From ce60296cca9da1d3201c43751c6e6016bd2ca9d5 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 26 Mar 2019 10:00:52 +0100 Subject: [PATCH] YangNamespaceContext should not have a default namespace Default namespace is usually bound separately from prefix, hence YangNamespaceContext should not contain it. Change-Id: I14543635dd33997f5cbc7d0f23405a59446de24c Signed-off-by: Robert Varga --- .../common/BiMapYangNamespaceContext.java | 44 +++---------------- .../yang/common/YangNamespaceContext.java | 31 +------------ .../common/BiMapYangNamespaceContextTest.java | 19 ++------ .../util/ModuleNameNamespaceContext.java | 5 --- .../yang/xpath/impl/XPathParserTest.java | 2 +- 5 files changed, 12 insertions(+), 89 deletions(-) diff --git a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/BiMapYangNamespaceContext.java b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/BiMapYangNamespaceContext.java index 9cc9e0e2e6..69f44144bd 100644 --- a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/BiMapYangNamespaceContext.java +++ b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/BiMapYangNamespaceContext.java @@ -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 mapping; - private final QNameModule defaultNamespace; public BiMapYangNamespaceContext(final BiMap mapping) { - this(mapping, null); - } - - public BiMapYangNamespaceContext(final BiMap 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 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 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 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(); } } diff --git a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangNamespaceContext.java b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangNamespaceContext.java index 584e9ecc70..9986eb8e78 100644 --- a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangNamespaceContext.java +++ b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangNamespaceContext.java @@ -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 RFC7950 Section 7.1.4. * *

- * 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 getDefaultNamespace(); - /** * Return QNameModule to which a particular prefix is bound. * @@ -59,21 +47,6 @@ public interface YangNamespaceContext extends Immutable, Serializable { */ @NonNull Optional 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 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. diff --git a/yang/yang-common/src/test/java/org/opendaylight/yangtools/yang/common/BiMapYangNamespaceContextTest.java b/yang/yang-common/src/test/java/org/opendaylight/yangtools/yang/common/BiMapYangNamespaceContextTest.java index 0a15d92b5c..f48f6192d0 100644 --- a/yang/yang-common/src/test/java/org/opendaylight/yangtools/yang/common/BiMapYangNamespaceContextTest.java +++ b/yang/yang-common/src/test/java/org/opendaylight/yangtools/yang/common/BiMapYangNamespaceContextTest.java @@ -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")); } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleNameNamespaceContext.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleNameNamespaceContext.java index 7336b342fa..d5e10a27bf 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleNameNamespaceContext.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleNameNamespaceContext.java @@ -62,11 +62,6 @@ public final class ModuleNameNamespaceContext implements YangNamespaceContext, S return schemaContext; } - @Override - public Optional getDefaultNamespace() { - throw new IllegalStateException("No default namespace is available"); - } - @Override public Optional findNamespaceForPrefix(final String prefix) { return schemaContext.findModules(prefix).stream().findFirst().map(Module::getQNameModule); diff --git a/yang/yang-xpath-impl/src/test/java/org/opendaylight/yangtools/yang/xpath/impl/XPathParserTest.java b/yang/yang-xpath-impl/src/test/java/org/opendaylight/yangtools/yang/xpath/impl/XPathParserTest.java index e249ede6ae..c4196b546c 100644 --- a/yang/yang-xpath-impl/src/test/java/org/opendaylight/yangtools/yang/xpath/impl/XPathParserTest.java +++ b/yang/yang-xpath-impl/src/test/java/org/opendaylight/yangtools/yang/xpath/impl/XPathParserTest.java @@ -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; -- 2.36.6