X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Freactor%2FNamespaceStorageSupport.java;h=63db5d1c7010c8abe6fdd8028bc9bb3b40d29350;hb=b6d7ee20c622441c5bf97f185960235131b9de46;hp=f79a062ea11ed7d3dd61cafb98be0b07a9a2c2bc;hpb=9e5540fb30986583d69e51f9290dbb651338f4b0;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java index f79a062ea1..63db5d1c70 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java @@ -9,12 +9,16 @@ package org.opendaylight.yangtools.yang.parser.stmt.reactor; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceNotAvailableException; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; abstract class NamespaceStorageSupport implements NamespaceStorageNode { @@ -26,44 +30,82 @@ abstract class NamespaceStorageSupport implements NamespaceStorageNode { public abstract NamespaceBehaviour.Registry getBehaviourRegistry(); - protected void checkLocalNamespaceAllowed(Class> type) { + protected void checkLocalNamespaceAllowed(final Class> type) { // NOOP } - protected > void onNamespaceElementAdded(Class type, K key, V value) { + protected > void onNamespaceElementAdded(final Class type, final K key, final V value) { // NOOP } - public final > VT getFromNamespace(Class type, K key) + public final > V getFromNamespace(final Class type, final KT key) throws NamespaceNotAvailableException { return getBehaviourRegistry().getNamespaceBehaviour(type).getFrom(this,key); } - public final > void addToNs(Class type, K key, VT value) + public final > Map getAllFromNamespace(final Class type){ + return getBehaviourRegistry().getNamespaceBehaviour(type).getAllFrom(this); + } + + public final > Map getAllFromCurrentStmtCtxNamespace(final Class type){ + return (Map) namespaces.get(type); + } + + public final > void addToNs(final Class type, final KT key, final VT value) throws NamespaceNotAvailableException { getBehaviourRegistry().getNamespaceBehaviour(type).addTo(this,key,value); } @SuppressWarnings({ "unchecked", "rawtypes" }) - public final > void addContextToNamespace(Class type, K key, StmtContext value) + public final > void addContextToNamespace(final Class type, final K key, final StmtContext value) throws NamespaceNotAvailableException { getBehaviourRegistry().getNamespaceBehaviour((Class)type).addTo(this, key, value); } + @SuppressWarnings("unchecked") @Override - public > V getFromLocalStorage(Class type, K key) { - @SuppressWarnings("unchecked") + public > V getFromLocalStorage(final Class type, final K key) { Map localNamespace = (Map) namespaces.get(type); + + V potential = null; if(localNamespace != null) { - return localNamespace.get(key); + potential = localNamespace.get(key); } - return null; + + if(potential == null && Utils.isModuleIdentifierWithoutSpecifiedRevision(key)) { + potential = getRegardlessOfRevision((ModuleIdentifier)key,(Map)localNamespace); + } + + return potential; } + private static > V getRegardlessOfRevision(final ModuleIdentifier key, + final Map localNamespace) { + if (localNamespace == null) { + return null; + } + + Set> entrySet = localNamespace.entrySet(); + for (Entry entry : entrySet) { + ModuleIdentifier moduleIdentifierInMap = entry.getKey(); + if (moduleIdentifierInMap.getName().equals(key.getName())) { + return entry.getValue(); + } + } + + return null; + } + + @Override + public > Map getAllFromLocalStorage(final Class type) { + @SuppressWarnings("unchecked") + Map localNamespace = (Map) namespaces.get(type); + return localNamespace; + } @Override - public > void addToLocalStorage(Class type, K key, V value) { + public > void addToLocalStorage(final Class type, final K key, final V value) { @SuppressWarnings("unchecked") Map localNamespace = (Map) namespaces.get(type); if(localNamespace == null) {