Updated SchemaNodeIdentifier namespace handling.
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / ChildSchemaNodes.java
index b9761b1a913edcd5d27ec64751a4c399de42e637..6482c99f510c4dc7ccb39c1f4fbfc9fe066bae72 100644 (file)
@@ -7,10 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
 
+import java.util.Map;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
 /**
  * Statement local namespace, which holds direct schema node descendants.
@@ -18,6 +21,42 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
  * @param <D>
  * @param <E>
  */
-public interface ChildSchemaNodes<D extends DeclaredStatement<QName>,E extends EffectiveStatement<QName, D>> extends StatementNamespace<QName, D, E>{
+public class ChildSchemaNodes<D extends DeclaredStatement<QName>,E extends EffectiveStatement<QName, D>>
+    extends NamespaceBehaviour<QName, StmtContext<?, D, E>, ChildSchemaNodes<D, E>>
+    implements StatementNamespace<QName, D, E>{
 
+    protected ChildSchemaNodes() {
+        super((Class<ChildSchemaNodes<D,E>>) (Class) ChildSchemaNodes.class);
+    }
+
+    @Override
+    public StmtContext<?, D, E> get(QName key) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public StmtContext<?, D, E> getFrom(NamespaceStorageNode storage, QName key) {
+        return globalOrStatementSpecific(storage).getFromLocalStorage(getIdentifier(), key);
+    }
+
+    @Override
+    public Map<QName, StmtContext<?, D, E>> getAllFrom(NamespaceStorageNode storage) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void addTo(NamespaceBehaviour.NamespaceStorageNode storage, QName key, StmtContext<?, D, E> value) {
+        globalOrStatementSpecific(storage).addToLocalStorage(ChildSchemaNodes.class, key, value);
+    }
+
+    private NamespaceStorageNode globalOrStatementSpecific(NamespaceBehaviour.NamespaceStorageNode storage) {
+        NamespaceStorageNode current = storage;
+        while(current.getStorageNodeType() != StorageNodeType.STATEMENT_LOCAL && current.getStorageNodeType() != StorageNodeType.GLOBAL) {
+            current = current.getParentNamespaceStorage();
+        }
+        return current;
+    }
 }