*/
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;
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;
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
@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());
}
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) {
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();
}
}
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;
* 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.
*
*/
@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.
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
@Test
public void testCreateQName() {
- assertEquals(QName.create(FOO, "foo"), context.createQName("foo"));
assertEquals(QName.create(FOO, "some"), context.createQName("foo", "some"));
}
}
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);
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;