*/
package org.opendaylight.yangtools.yang.data.impl;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.CompositeNode;
import org.opendaylight.yangtools.yang.data.api.ModifyAction;
import org.opendaylight.yangtools.yang.data.api.Node;
import org.opendaylight.yangtools.yang.data.api.SimpleNode;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
/**
* @author michal.rehak
*
*/
-public class CompositeNodeTOImpl extends AbstractNodeTO<List<Node<?>>> implements CompositeNode {
+public class CompositeNodeTOImpl extends AbstractNodeTO<List<Node<?>>> implements CompositeNode, Serializable {
+
+ private static final long serialVersionUID = 100L;
- private Map<QName, List<Node<?>>> nodeMap;
+ private Map<QName, List<Node<?>>> nodeMap = new HashMap<>();
/**
* @param qname
*/
public CompositeNodeTOImpl(QName qname, CompositeNode parent, List<Node<?>> value) {
super(qname, parent, value);
- if (value != null) {
- nodeMap = NodeUtils.buildNodeMap(getValue());
- }
init();
}
super(qname, parent, value, modifyAction);
init();
}
+
+ protected void init() {
+ if (getValue() != null) {
+ nodeMap = NodeUtils.buildNodeMap(getValue());
+ }
+ }
- /**
- * @return the nodeMap
- */
protected Map<QName, List<Node<?>>> getNodeMap() {
return nodeMap;
}
@Override
public List<CompositeNode> getCompositesByName(QName children) {
List<Node<?>> toFilter = getNodeMap().get(children);
+ if(toFilter == null) {
+ return Collections.emptyList();
+ }
List<CompositeNode> list = new ArrayList<CompositeNode>();
for (Node<?> node : toFilter) {
if (node instanceof CompositeNode) {
@Override
public List<SimpleNode<?>> getSimpleNodesByName(QName children) {
List<Node<?>> toFilter = getNodeMap().get(children);
+ if(toFilter == null) {
+ return Collections.emptyList();
+ }
List<SimpleNode<?>> list = new ArrayList<SimpleNode<?>>();
for (Node<?> node : toFilter) {
return getSimpleNodesByName(new QName(getNodeType(), children));
}
- protected void init() {
- if (getValue() != null) {
- nodeMap = NodeUtils.buildNodeMap(getValue());
- }
- }
-
@Override
public MutableCompositeNode asMutable() {
throw new IllegalAccessError("cast to mutable is not supported - " + getClass().getSimpleName());
public Collection<List<Node<?>>> values() {
return nodeMap.values();
}
+
+ // Serialization related
+
+ private void readObject(ObjectInputStream aStream) throws IOException, ClassNotFoundException {
+ aStream.defaultReadObject();
+ QName qName = (QName)aStream.readObject();
+ CompositeNode parent = (CompositeNode) aStream.readObject();
+ List<Node<?>> value = (List<Node<?>>) aStream.readObject();
+ ModifyAction modifyAction = (ModifyAction) aStream.readObject();
+
+ init(qName, parent, value, modifyAction);
+ }
+
+ private void writeObject(ObjectOutputStream aStream) throws IOException {
+ aStream.defaultWriteObject();
+ //manually serialize superclass
+ aStream.writeObject(getQName());
+ aStream.writeObject(getParent());
+ aStream.writeObject(getValue());
+ aStream.writeObject(getModificationAction());
+ }
}