X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2FCompositeNodeTOImpl.java;h=3e59659d2e106eb397ef5fefa429df967ba7baa4;hb=3911bcef14d0e323a67747fb4a5374561a1ef9f8;hp=1fdf28e12a79800cfe8d79ea1da428957a6abac7;hpb=5c1f875f69e35248aa4115c429bd962160beeef4;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/CompositeNodeTOImpl.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/CompositeNodeTOImpl.java index 1fdf28e12a..3e59659d2e 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/CompositeNodeTOImpl.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/CompositeNodeTOImpl.java @@ -1,153 +1,242 @@ -/* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.data.impl; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -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.MutableCompositeNode; -import org.opendaylight.yangtools.yang.data.api.Node; -import org.opendaylight.yangtools.yang.data.api.SimpleNode; - -/** - * @author michal.rehak - * - */ -public class CompositeNodeTOImpl extends AbstractNodeTO>> - implements CompositeNode { - - private Map>> nodeMap; - - /** - * @param qname - * @param parent use null to create top composite node (without parent) - * @param value - */ - public CompositeNodeTOImpl(QName qname, CompositeNode parent, - List> value) { - super(qname, parent, value); - if (value != null) { - nodeMap = NodeUtils.buildNodeMap(getValue()); - } - init(); - } - - /** - * @param qname - * @param parent use null to create top composite node (without parent) - * @param value - * @param modifyAction - */ - public CompositeNodeTOImpl(QName qname, CompositeNode parent, - List> value, ModifyAction modifyAction) { - super(qname, parent, value, modifyAction); - init(); - } - - - /** - * @return the nodeMap - */ - protected Map>> getNodeMap() { - return nodeMap; - } - - @Override - public List> getChildren() { - return getValue(); - } - - @Override - public SimpleNode getFirstSimpleByName(QName leafQName) { - List> list = getSimpleNodesByName(leafQName); - if (list.isEmpty()) - return null; - return list.get(0); - } - - @Override - public List getCompositesByName(QName children) { - List> toFilter = getNodeMap().get(children); - List list = new ArrayList(); - for (Node node : toFilter) { - if (node instanceof CompositeNode) - list.add((CompositeNode) node); - } - return list; - } - - @Override - public List> getSimpleNodesByName(QName children) { - List> toFilter = getNodeMap().get(children); - List> list = new ArrayList>(); - - for (Node node : toFilter) { - if (node instanceof SimpleNode) - list.add((SimpleNode) node); - } - return list; - } - - @Override - public CompositeNode getFirstCompositeByName(QName container) { - List list = getCompositesByName(container); - if (list.isEmpty()) { - return null; - } - return list.get(0); - } - - /** - * @param leaf - * @return TODO:: do we need this method? - */ - public SimpleNode getFirstLeafByName(QName leaf) { - List> list = getSimpleNodesByName(leaf); - if (list.isEmpty()) { - return null; - } - return list.get(0); - } - - @Override - public List getCompositesByName(String children) { - return getCompositesByName(new QName(getNodeType(), children)); - } - - @Override - public List> getSimpleNodesByName(String children) { - return getSimpleNodesByName(new QName(getNodeType(), children)); - } - - /** - * @param value - */ - 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()); - } - - @Override - public String toString() { - return super.toString() + ", children.size = " - + (getChildren() != null ? getChildren().size() : "n/a"); - } - - - -} +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.impl; + +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; + +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.MutableCompositeNode; +import org.opendaylight.yangtools.yang.data.api.Node; +import org.opendaylight.yangtools.yang.data.api.SimpleNode; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; + +/** + * @author michal.rehak + * + * @deprecated Use one of the {@link NormalizedNodeContainer} implementations. + */ +@Deprecated +public class CompositeNodeTOImpl extends AbstractNodeTO>> implements CompositeNode, Serializable { + + private static final long serialVersionUID = 100L; + + private Map>> nodeMap = new HashMap<>(); + + /** + * @param qname + * @param parent + * use null to create top composite node (without parent) + * @param value + */ + public CompositeNodeTOImpl(final QName qname, final CompositeNode parent, final List> value) { + super(qname, parent, value); + init(); + } + + /** + * @param qname + * @param parent + * use null to create top composite node (without parent) + * @param value + * @param modifyAction + */ + public CompositeNodeTOImpl(final QName qname, final CompositeNode parent, final List> value, final ModifyAction modifyAction) { + super(qname, parent, value, modifyAction); + init(); + } + + protected void init() { + if (getValue() != null) { + nodeMap = NodeUtils.buildNodeMap(getValue()); + } + } + + protected Map>> getNodeMap() { + return nodeMap; + } + + @Override + public List> getChildren() { + return Collections.unmodifiableList(getValue() == null ? new ArrayList>() : getValue()); + } + + @Override + public SimpleNode getFirstSimpleByName(final QName leafQName) { + List> list = getSimpleNodesByName(leafQName); + if (list.isEmpty()) { + return null; + } + return list.get(0); + } + + @Override + public List getCompositesByName(final QName children) { + List> toFilter = getNodeMap().get(children); + if(toFilter == null) { + return Collections.emptyList(); + } + List list = new ArrayList(); + for (Node node : toFilter) { + if (node instanceof CompositeNode) { + list.add((CompositeNode) node); + } + } + return list; + } + + @Override + public List> getSimpleNodesByName(final QName children) { + List> toFilter = getNodeMap().get(children); + if(toFilter == null) { + return Collections.emptyList(); + } + List> list = new ArrayList>(); + + for (Node node : toFilter) { + if (node instanceof SimpleNode) { + list.add((SimpleNode) node); + } + } + return list; + } + + @Override + public CompositeNode getFirstCompositeByName(final QName container) { + List list = getCompositesByName(container); + if (list.isEmpty()) { + return null; + } + return list.get(0); + } + + /** + * @param leaf + * @return TODO:: do we need this method? + */ + public SimpleNode getFirstLeafByName(final QName leaf) { + List> list = getSimpleNodesByName(leaf); + if (list.isEmpty()) { + return null; + } + return list.get(0); + } + + @Override + public List getCompositesByName(final String children) { + return getCompositesByName(QName.create(getNodeType(), children)); + } + + @Override + public List> getSimpleNodesByName(final String children) { + return getSimpleNodesByName(QName.create(getNodeType(), children)); + } + + @Override + public MutableCompositeNode asMutable() { + throw new IllegalAccessError("cast to mutable is not supported - " + getClass().getSimpleName()); + } + + @Override + public String toString() { + return super.toString() + ", children.size = " + (!getChildren().isEmpty() ? getChildren().size() : "n/a"); + } + + @Override + public void clear() { + nodeMap.clear(); + } + + @Override + public boolean containsKey(final Object key) { + return nodeMap.containsKey(key); + } + + @Override + public boolean containsValue(final Object value) { + return nodeMap.containsValue(value); + } + + @Override + public Set>>> entrySet() { + return nodeMap.entrySet(); + } + + @Override + public int size() { + return nodeMap.size(); + } + + @Override + public boolean isEmpty() { + return nodeMap.isEmpty(); + } + + @Override + public List> get(final Object key) { + return nodeMap.get(key); + } + + @Override + public List> put(final QName key, final List> value) { + return nodeMap.put(key, value); + } + + @Override + public List> remove(final Object key) { + return nodeMap.remove(key); + } + + @Override + public void putAll(final Map>> m) { + nodeMap.putAll(m); + } + + @Override + public Set keySet() { + return nodeMap.keySet(); + } + + @Override + public Collection>> values() { + return nodeMap.values(); + } + + // Serialization related + + private void readObject(final ObjectInputStream aStream) throws IOException, ClassNotFoundException { + aStream.defaultReadObject(); + QName qName = (QName)aStream.readObject(); + CompositeNode parent = (CompositeNode) aStream.readObject(); + @SuppressWarnings("unchecked") + List> value = (List>) aStream.readObject(); + ModifyAction modifyAction = (ModifyAction) aStream.readObject(); + + init(qName, parent, value, modifyAction); + } + + private void writeObject(final ObjectOutputStream aStream) throws IOException { + aStream.defaultWriteObject(); + //manually serialize superclass + aStream.writeObject(getQName()); + aStream.writeObject(getParent()); + aStream.writeObject(getValue()); + aStream.writeObject(getModificationAction()); + } +}