YangNamespaceContext should not have a default namespace 60/81160/4
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 26 Mar 2019 09:00:52 +0000 (10:00 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 26 Mar 2019 19:55:32 +0000 (20:55 +0100)
Default namespace is usually bound separately from prefix, hence
YangNamespaceContext should not contain it.

Change-Id: I14543635dd33997f5cbc7d0f23405a59446de24c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/BiMapYangNamespaceContext.java
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangNamespaceContext.java
yang/yang-common/src/test/java/org/opendaylight/yangtools/yang/common/BiMapYangNamespaceContextTest.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleNameNamespaceContext.java
yang/yang-xpath-impl/src/test/java/org/opendaylight/yangtools/yang/xpath/impl/XPathParserTest.java

index 9cc9e0e2e6fb13098f25d7793262de8940b8d10c..69f44144bddefeefbc878d768e6ce16446dd53ea 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.common;
 
-import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
@@ -19,7 +18,6 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 import java.util.Map.Entry;
-import java.util.Objects;
 import java.util.Optional;
 import org.opendaylight.yangtools.concepts.WritableObject;
 
@@ -33,25 +31,9 @@ public final class BiMapYangNamespaceContext implements YangNamespaceContext, Wr
     private static final long serialVersionUID = 1L;
 
     private final ImmutableBiMap<String, QNameModule> mapping;
-    private final QNameModule defaultNamespace;
 
     public BiMapYangNamespaceContext(final BiMap<String, QNameModule> mapping) {
-        this(mapping, null);
-    }
-
-    public BiMapYangNamespaceContext(final BiMap<String, QNameModule> mapping,
-            final QNameModule defaultNamespace) {
-        this.defaultNamespace = defaultNamespace;
         this.mapping = ImmutableBiMap.copyOf(mapping);
-        if (defaultNamespace != null) {
-            checkArgument(this.mapping.containsValue(defaultNamespace),
-                "Mapping %s does not contain default namespace %s", this.mapping, defaultNamespace);
-        }
-    }
-
-    @Override
-    public Optional<QNameModule> getDefaultNamespace() {
-        return Optional.ofNullable(defaultNamespace);
     }
 
     @Override
@@ -66,13 +48,6 @@ public final class BiMapYangNamespaceContext implements YangNamespaceContext, Wr
 
     @Override
     public void writeTo(final DataOutput out) throws IOException {
-        if (defaultNamespace != null) {
-            out.writeBoolean(true);
-            defaultNamespace.writeTo(out);
-        } else {
-            out.writeBoolean(false);
-        }
-
         out.writeInt(mapping.size());
         for (Entry<String, QNameModule> entry : mapping.entrySet()) {
             out.writeUTF(entry.getKey());
@@ -81,8 +56,6 @@ public final class BiMapYangNamespaceContext implements YangNamespaceContext, Wr
     }
 
     public static BiMapYangNamespaceContext readFrom(final DataInput in) throws IOException {
-        final boolean haveDefault = in.readBoolean();
-        final QNameModule defaultNamespace = haveDefault ? QNameModule.readFrom(in) : null;
         final int size = in.readInt();
         final Builder<String, QNameModule> builder = ImmutableBiMap.builder();
         for (int i = 0; i < size; ++i) {
@@ -91,29 +64,22 @@ public final class BiMapYangNamespaceContext implements YangNamespaceContext, Wr
             builder.put(prefix, namespace);
         }
 
-        return new BiMapYangNamespaceContext(builder.build(), defaultNamespace);
+        return new BiMapYangNamespaceContext(builder.build());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(defaultNamespace, mapping);
+        return mapping.hashCode();
     }
 
     @Override
     public boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (!(obj instanceof BiMapYangNamespaceContext)) {
-            return false;
-        }
-        final BiMapYangNamespaceContext other = (BiMapYangNamespaceContext) obj;
-        return defaultNamespace.equals(other.defaultNamespace) && mapping.equals(other.mapping);
+        return this == obj || obj instanceof BiMapYangNamespaceContext
+                && mapping.equals(((BiMapYangNamespaceContext) obj).mapping);
     }
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(this).add("defaultNamespace", defaultNamespace).add("mapping", mapping)
-                .toString();
+        return MoreObjects.toStringHelper(this).add("mapping", mapping).toString();
     }
 }
index 584e9ecc70e39ee5f1fec0bb937a8e7f3710087a..9986eb8e786409421f676b109af7ea86beb46f1a 100644 (file)
@@ -8,8 +8,6 @@
 package org.opendaylight.yangtools.yang.common;
 
 import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
-import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
 import java.io.Serializable;
@@ -23,23 +21,13 @@ import org.opendaylight.yangtools.concepts.Immutable;
  * statements and detailed in <a href="https://tools.ietf.org/html/rfc7950#section-7.1.4">RFC7950 Section 7.1.4</a>.
  *
  * <p>
- * Each namespace context can have a default namespace and a set of prefix/namespace mappings. A namespace can be bound
- * to multiple prefixes at the same time. The default namespace must also have a prefix assigned.
+ * Each namespace context has a set of prefix/namespace mappings. A namespace can be bound to multiple prefixes at the
+ * same time.
  *
  * @author Robert Varga
  */
 @Beta
 public interface YangNamespaceContext extends Immutable, Serializable {
-
-
-
-    /**
-     * Return the default namespace in this context.
-     *
-     * @return Default namespace, if supported.
-     */
-    @NonNull Optional<QNameModule> getDefaultNamespace();
-
     /**
      * Return QNameModule to which a particular prefix is bound.
      *
@@ -59,21 +47,6 @@ public interface YangNamespaceContext extends Immutable, Serializable {
      */
     @NonNull Optional<String> findPrefixForNamespace(QNameModule namespace);
 
-    /**
-     * Create a {@link QName} in the default namespace.
-     *
-     * @param localName QName local name
-     * @return A QName.
-     * @throws NullPointerException if {@code localName} is null
-     * @throws IllegalArgumentException if {@code localName} does not conform to local name requirements
-     * @throws IllegalStateException if this context does not have default namespace
-     */
-    default @NonNull QName createQName(final String localName) {
-        final Optional<QNameModule> namespace = getDefaultNamespace();
-        checkState(namespace.isPresent(), "%s does not have a default namespace", this);
-        return QName.create(namespace.get(), requireNonNull(localName));
-    }
-
     /**
      * Create a {@link QName} by resolving a prefix against currently-bound prefixes and combining it with specified
      * local name.
index 0a15d92b5c05f75f71f45fa7ad19e777ce86b844..f48f6192d0c4d12f37bddddf13f0300ff9b53fdb 100644 (file)
@@ -27,25 +27,15 @@ public class BiMapYangNamespaceContextTest {
     private static final QNameModule BAZ = QNameModule.create(URI.create("baz"));
 
     private final BiMapYangNamespaceContext context = new BiMapYangNamespaceContext(
-        ImmutableBiMap.of("foo", FOO, "bar", BAR), FOO);
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testUnmappedDefault() {
-        new BiMapYangNamespaceContext(ImmutableBiMap.of(), FOO);
-    }
-
-    @Test
-    public void testDefaultNamespace() {
-        assertEquals(Optional.of(FOO), context.getDefaultNamespace());
-    }
+        ImmutableBiMap.of("foo", FOO, "bar", BAR));
 
     @Test
     public void testEquals() {
         assertTrue(context.equals(context));
-        assertTrue(context.equals(new BiMapYangNamespaceContext(ImmutableBiMap.of("foo", FOO, "bar", BAR), FOO)));
+        assertTrue(context.equals(new BiMapYangNamespaceContext(ImmutableBiMap.of("foo", FOO, "bar", BAR))));
         assertFalse(context.equals(null));
-        assertFalse(context.equals(new BiMapYangNamespaceContext(ImmutableBiMap.of("foo", FOO), FOO)));
-        assertFalse(context.equals(new BiMapYangNamespaceContext(ImmutableBiMap.of("bar", BAR), BAR)));
+        assertFalse(context.equals(new BiMapYangNamespaceContext(ImmutableBiMap.of("foo", FOO))));
+        assertFalse(context.equals(new BiMapYangNamespaceContext(ImmutableBiMap.of("bar", BAR))));
     }
 
     @Test
@@ -82,7 +72,6 @@ public class BiMapYangNamespaceContextTest {
 
     @Test
     public void testCreateQName() {
-        assertEquals(QName.create(FOO, "foo"), context.createQName("foo"));
         assertEquals(QName.create(FOO, "some"), context.createQName("foo", "some"));
     }
 }
index 7336b342faeaaf8435442efa537c2b346b1f1163..d5e10a27bf456e63202ed31cd0bbab7dc1ff4380 100644 (file)
@@ -62,11 +62,6 @@ public final class ModuleNameNamespaceContext implements YangNamespaceContext, S
         return schemaContext;
     }
 
-    @Override
-    public Optional<QNameModule> getDefaultNamespace() {
-        throw new IllegalStateException("No default namespace is available");
-    }
-
     @Override
     public Optional<QNameModule> findNamespaceForPrefix(final String prefix) {
         return schemaContext.findModules(prefix).stream().findFirst().map(Module::getQNameModule);
index e249ede6ae8a4a7da61d421372d3f94c1c247e7b..c4196b546cbb58780d232c03734689843a7bd45a 100644 (file)
@@ -28,7 +28,7 @@ public class XPathParserTest {
     private static final YangNamespaceContext CONTEXT = new BiMapYangNamespaceContext(ImmutableBiMap.of(
         "def", DEFNS,
         "foo", QNameModule.create(URI.create("foo")),
-        "bar", QNameModule.create(URI.create("bar"))), DEFNS);
+        "bar", QNameModule.create(URI.create("bar"))));
 
     private @Nullable AntlrXPathParser parser;