2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.parser.util;
11 import java.util.Comparator;
12 import java.util.Date;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
16 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
18 public final class Comparators {
21 * Comparator based on alphabetical order of qname's local name.
23 public static final QNameComparator QNAME_COMP = new QNameComparator();
26 * Comparator based on alphabetical order of local name of SchemaNode's qname.
28 public static final SchemaNodeComparator SCHEMA_NODE_COMP = new SchemaNodeComparator();
31 * Comparator based on augment target path length.
33 public static final AugmentComparator AUGMENT_COMP = new AugmentComparator();
35 private Comparators() {
38 private static final class QNameComparator implements Comparator<QName> {
40 public int compare(QName o1, QName o2) {
41 return o1.getLocalName().compareTo(o2.getLocalName());
45 private static final class SchemaNodeComparator implements Comparator<SchemaNode> {
47 public int compare(SchemaNode o1, SchemaNode o2) {
48 QName q1 = o1.getQName();
49 QName q2 = o2.getQName();
50 int result = q1.getLocalName().compareTo(q2.getLocalName());
52 URI ns1 = q1.getNamespace();
53 URI ns2 = q2.getNamespace();
54 if (ns1 == null && ns2 == null) {
55 Date rev1 = q1.getRevision();
56 Date rev2 = q2.getRevision();
58 if (rev1 == null && rev2 == null) {
59 String p1 = q1.getPrefix();
60 String p2 = q2.getPrefix();
61 if (p1 == null && p2 == null) {
62 throw new IllegalArgumentException("Failed to sort nodes: " + o1 + ", " + o2);
64 if (p1 == null || p2 == null) {
71 return p1.compareTo(p2);
73 if (rev1 == null || rev2 == null) {
80 return rev1.compareTo(rev2);
82 if (ns1 == null || ns2 == null) {
89 return ns1.toString().compareTo(ns2.toString());
96 private static final class AugmentComparator implements Comparator<AugmentationSchemaBuilder> {
98 public int compare(AugmentationSchemaBuilder o1, AugmentationSchemaBuilder o2) {
99 return o1.getTargetPath().getPath().size() - o2.getTargetPath().getPath().size();