+ public static QName create(final QName base, final String localName) {
+ return create(base.getModule(), 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 new QName(Preconditions.checkNotNull(qnameModule,"module may not be null"), localName);
+ }
+
+ /**
+ * Creates new QName.
+ *
+ * @param namespace
+ * Namespace of QName or null if namespace is undefined.
+ * @param revision
+ * Revision of namespace or null if revision is unspecified.
+ * @param localName
+ * Local name part of QName. MUST NOT BE null.
+ * @return Instance of QName
+ */
+ public static QName create(final URI namespace, final Date revision, final String localName) {
+ return create(QNameModule.create(namespace, revision), localName);
+ }
+
+ /**
+ * Creates new QName.
+ *
+ * @param namespace
+ * Namespace of QName or null if namespace is undefined.
+ * @param revision
+ * Revision of namespace or null if revision is unspecified.
+ * @param localName
+ * Local name part of QName. MUST NOT BE null.
+ * @return Instance of QName
+ */
+ public static QName create(final String namespace, final String localName, final Date revision) {
+ final URI namespaceUri = parseNamespace(namespace);
+ return create(QNameModule.create(namespaceUri, revision), localName);
+ }
+
+ /**
+ * Creates new QName.
+ *
+ * @param namespace
+ * Namespace of QName, MUST NOT BE Null.
+ * @param revision
+ * Revision of namespace / YANG module. MUST NOT BE null, MUST BE
+ * in format <code>YYYY-mm-dd</code>.
+ * @param localName
+ * Local name part of QName. MUST NOT BE null.
+ * @return A new QName
+ * @throws NullPointerException
+ * 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
+ * <code>YYYY-mm-dd</code>.
+ */
+ public static QName create(final String namespace, final String revision, final String localName) {
+ final URI namespaceUri = parseNamespace(namespace);
+ final 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 A new QName
+ * @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) {
+ return create(parseNamespace(namespace), null, localName);
+ }
+