014c788386fb6ca237a45240737367aacfe604d7
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / MutableCompositeNodeTOImpl.java
1 /*\r
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.yangtools.yang.data.impl;\r
9 \r
10 import java.util.ArrayList;\r
11 import java.util.List;\r
12 import java.util.Map;\r
13 \r
14 import org.opendaylight.yangtools.yang.common.QName;\r
15 import org.opendaylight.yangtools.yang.data.api.CompositeNode;\r
16 import org.opendaylight.yangtools.yang.data.api.ModifyAction;\r
17 import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode;\r
18 import org.opendaylight.yangtools.yang.data.api.Node;\r
19 \r
20 /**\r
21  * @author michal.rehak\r
22  *\r
23  */\r
24 public class MutableCompositeNodeTOImpl extends CompositeNodeTOImpl\r
25         implements MutableCompositeNode {\r
26 \r
27     private Map<QName, List<Node<?>>> nodeMap;\r
28     private CompositeNode original;\r
29 \r
30     /**\r
31      * @param qname\r
32      * @param parent\r
33      * @param value\r
34      * @param modifyAction\r
35      */\r
36     public MutableCompositeNodeTOImpl(QName qname, CompositeNode parent,\r
37             List<Node<?>> value, ModifyAction modifyAction) {\r
38         super(qname, parent, value, modifyAction);\r
39     }\r
40 \r
41     /**\r
42      * update nodeMap - it should be invoked after children was changed\r
43      */\r
44     @Override\r
45     public void init() {\r
46         if (!getChildren().isEmpty()) {\r
47             nodeMap = NodeUtils.buildNodeMap(getChildren());\r
48         }\r
49     }\r
50     \r
51     @Override\r
52     public List<Node<?>> getChildren() {\r
53         return getValue() == null ? new ArrayList<Node<?>>() : getValue();\r
54     }\r
55 \r
56     @Override\r
57     public List<Node<?>> setValue(List<Node<?>> value) {\r
58         List<Node<?>> oldVal = super.setValue(value);\r
59         init();\r
60         return oldVal;\r
61     }\r
62 \r
63     @Override\r
64     public void setModifyAction(ModifyAction action) {\r
65         super.setModificationAction(action);\r
66     }\r
67 \r
68     @Override\r
69     protected Map<QName, List<Node<?>>> getNodeMap() {\r
70         return nodeMap;\r
71     }\r
72 \r
73     @Override\r
74     public MutableCompositeNode asMutable() {\r
75         return this;\r
76     }\r
77 \r
78     @Override\r
79     public CompositeNode getOriginal() {\r
80         return original;\r
81     }\r
82 \r
83     /**\r
84      * @param original the original to set\r
85      */\r
86     public void setOriginal(CompositeNode original) {\r
87         this.original = original;\r
88     }\r
89 }\r