Merge "Bug 2363, Bug 2205. Beta version of LeafRefContext tree computation"
[yangtools.git] / yang / yang-common / src / main / java / org / opendaylight / yangtools / yang / common / QName.java
index 18969403d01d0f6c663814170d6653fd2128eacb..bfdfdadc80d8721372e829c7b226eb58627e5cf1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.Fpre
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
@@ -8,7 +8,6 @@
 package org.opendaylight.yangtools.yang.common;
 
 import static org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil.getRevisionFormat;
-
 import java.io.Serializable;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -17,7 +16,6 @@ import java.util.Date;
 import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
 import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.objcache.ObjectCache;
 import org.opendaylight.yangtools.objcache.ObjectCacheFactory;
@@ -64,19 +62,16 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
     private final QNameModule module;
     // Mandatory
     private final String localName;
-    // Nullable
-    private final String prefix;
 
-    private QName(final QNameModule module, final String prefix, final String localName) {
+    private QName(final QNameModule module, final String localName) {
         this.localName = checkLocalName(localName);
-        this.prefix = prefix;
         this.module = module;
     }
 
     /**
      * Look up specified QName in the global cache and return a shared reference.
      *
-     * @param module QName instance
+     * @param qname QName instance
      * @return Cached instance, according to {@link ObjectCache} policy.
      */
     public static QName cachedReference(final QName qname) {
@@ -94,25 +89,6 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
         return CACHE.getReference(what);
     }
 
-    /**
-     * QName Constructor.
-     *
-     * @param namespace
-     *            the namespace assigned to the YANG module
-     * @param revision
-     *            the revision of the YANG module
-     * @param prefix
-     *            locally defined prefix assigned to local name
-     * @param localName
-     *            YANG schema identifier
-     *
-     * @deprecated Prefix storage in QNames is deprecated.
-     */
-    @Deprecated
-    public QName(final URI namespace, final Date revision, final String prefix, final String localName) {
-        this(QNameModule.create(namespace, revision), prefix, localName);
-    }
-
     /**
      * QName Constructor.
      *
@@ -122,7 +98,7 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
      *            YANG schema identifier
      */
     public QName(final URI namespace, final String localName) {
-        this(namespace, null, "", localName);
+        this(QNameModule.create(namespace, null), localName);
     }
 
     private static String checkLocalName(final String localName) {
@@ -204,18 +180,6 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
         return module.getRevision();
     }
 
-    /**
-     * Returns locally defined prefix assigned to local name
-     *
-     * @return locally defined prefix assigned to local name
-     *
-     * @deprecated Prefix storage in QNames is deprecated.
-     */
-    @Deprecated
-    public String getPrefix() {
-        return prefix;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 31;
@@ -232,7 +196,7 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
      * {@link QName} and its {@link #getLocalName()}, {@link #getNamespace()} and
      * {@link #getRevision()} are equals to same properties of this instance.
      *
-     * @param o the object to be compared for equality with this QName
+     * @param obj the object to be compared for equality with this QName
      * @return <tt>true</tt> if the specified object is equal to this QName
      *
      */
@@ -256,7 +220,7 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
     }
 
     public static QName create(final QName base, final String localName) {
-        return create(base.getModule(), base.getPrefix(), localName);
+        return create(base.getModule(), localName);
     }
 
     /**
@@ -264,33 +228,15 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
      *
      * @param qnameModule
      *            Namespace and revision enclosed as a QNameModule
-     * @param prefix
-     *            Namespace prefix
      * @param localName
      *            Local name part of QName. MUST NOT BE null.
      * @return Instance of QName
-     *
-     * @deprecated Prefix storage in QNames is deprecated.
      */
-    @Deprecated
-    public static QName create(final QNameModule module, final String prefix, final String localName) {
-        if (module == null) {
+    public static QName create(final QNameModule qnameModule, final String localName) {
+        if (qnameModule == null) {
             throw new NullPointerException("module may not be null");
         }
-        return new QName(module, prefix, localName);
-    }
-
-    /**
-     * Creates new QName.
-     *
-     * @param qnameModule
-     *            Namespace and revision enclosed as a QNameModule
-     * @param localName
-     *            Local name part of QName. MUST NOT BE null.
-     * @return Instance of QName
-     */
-    public static QName create(final QNameModule qnameModule, final String localName) {
-        return create(qnameModule, null, localName);
+        return new QName(qnameModule, localName);
     }
 
     /**
@@ -305,7 +251,7 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
      * @return Instance of QName
      */
     public static QName create(final URI namespace, final Date revision, final String localName) {
-        return create(QNameModule.create(namespace, revision), null, localName);
+        return create(QNameModule.create(namespace, revision), localName);
     }
 
     /**
@@ -321,7 +267,7 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
      *            Local name part of QName. MUST NOT BE null.
      * @return
      * @throws NullPointerException
-     *             If any of paramaters is null.
+     *             If any of parameters is null.
      * @throws IllegalArgumentException
      *             If <code>namespace</code> is not valid URI or
      *             <code>revision</code> is not according to format
@@ -329,15 +275,34 @@ public final class QName implements Immutable, Serializable, Comparable<QName> {
      */
     public static QName create(final String namespace, final String revision, final String localName)
             throws IllegalArgumentException {
-        final URI namespaceUri;
+        final URI namespaceUri = parseNamespace(namespace);
+        final Date revisionDate = parseRevision(revision);
+        return create(namespaceUri, revisionDate, localName);
+    }
+
+    private static URI parseNamespace(final String namespace) {
         try {
-            namespaceUri = new URI(namespace);
+            return new URI(namespace);
         } catch (URISyntaxException ue) {
             throw new IllegalArgumentException(String.format("Namespace '%s' is not a valid URI", namespace), ue);
         }
+    }
 
-        Date revisionDate = parseRevision(revision);
-        return create(namespaceUri, revisionDate, localName);
+    /**
+     * Creates new QName.
+     *
+     * @param namespace
+     *            Namespace of QName, MUST NOT BE Null.
+     * @param localName
+     *            Local name part of QName. MUST NOT BE null.
+     * @return
+     * @throws NullPointerException
+     *             If any of parameters is null.
+     * @throws IllegalArgumentException
+     *             If <code>namespace</code> is not valid URI.
+     */
+    public static QName create(final String namespace, final String localName) throws IllegalArgumentException {
+        return create(parseNamespace(namespace), null, localName);
     }
 
     @Override