6482c99f510c4dc7ccb39c1f4fbfc9fe066bae72
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / ChildSchemaNodes.java
1 /**
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
9
10 import java.util.Map;
11 import org.opendaylight.yangtools.yang.common.QName;
12 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
13 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
14 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
15 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace;
16 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
17
18 /**
19  * Statement local namespace, which holds direct schema node descendants.
20  *
21  * @param <D>
22  * @param <E>
23  */
24 public class ChildSchemaNodes<D extends DeclaredStatement<QName>,E extends EffectiveStatement<QName, D>>
25     extends NamespaceBehaviour<QName, StmtContext<?, D, E>, ChildSchemaNodes<D, E>>
26     implements StatementNamespace<QName, D, E>{
27
28     protected ChildSchemaNodes() {
29         super((Class<ChildSchemaNodes<D,E>>) (Class) ChildSchemaNodes.class);
30     }
31
32     @Override
33     public StmtContext<?, D, E> get(QName key) {
34         // TODO Auto-generated method stub
35         return null;
36     }
37
38     @Override
39     public StmtContext<?, D, E> getFrom(NamespaceStorageNode storage, QName key) {
40         return globalOrStatementSpecific(storage).getFromLocalStorage(getIdentifier(), key);
41     }
42
43     @Override
44     public Map<QName, StmtContext<?, D, E>> getAllFrom(NamespaceStorageNode storage) {
45         // TODO Auto-generated method stub
46         return null;
47     }
48
49     @SuppressWarnings("unchecked")
50     @Override
51     public void addTo(NamespaceBehaviour.NamespaceStorageNode storage, QName key, StmtContext<?, D, E> value) {
52         globalOrStatementSpecific(storage).addToLocalStorage(ChildSchemaNodes.class, key, value);
53     }
54
55     private NamespaceStorageNode globalOrStatementSpecific(NamespaceBehaviour.NamespaceStorageNode storage) {
56         NamespaceStorageNode current = storage;
57         while(current.getStorageNodeType() != StorageNodeType.STATEMENT_LOCAL && current.getStorageNodeType() != StorageNodeType.GLOBAL) {
58             current = current.getParentNamespaceStorage();
59         }
60         return current;
61     }
62 }