Fixing sonar issues 4
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / NodeModificationBuilderImpl.java
index 503b07fc63c77a4fdf9df0e2490b78b63fb4ff1c..f1c2a44a03373ee0126595802740b54cff6beb18 100644 (file)
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.yangtools.yang.data.impl;\r
-\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.opendaylight.yangtools.yang.common.QName;\r
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;\r
-import org.opendaylight.yangtools.yang.data.api.ModifyAction;\r
-import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode;\r
-import org.opendaylight.yangtools.yang.data.api.MutableNode;\r
-import org.opendaylight.yangtools.yang.data.api.MutableSimpleNode;\r
-import org.opendaylight.yangtools.yang.data.api.Node;\r
-import org.opendaylight.yangtools.yang.data.api.NodeModificationBuilder;\r
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;\r
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;\r
-\r
-/**\r
- * @author michal.rehak\r
- *\r
- */\r
-public class NodeModificationBuilderImpl implements NodeModificationBuilder {\r
-\r
-    private SchemaContext context;\r
-\r
-    private Set<MutableNode<?>> changeLog;\r
-    private LazyNodeToNodeMap originalToMutable;\r
-\r
-    /**\r
-     * @param originalTreeRootNode\r
-     * @param context\r
-     */\r
-    public NodeModificationBuilderImpl(CompositeNode originalTreeRootNode, SchemaContext context) {\r
-        this.context = context;\r
-        originalToMutable = new LazyNodeToNodeMap();\r
-        changeLog = new HashSet<>();\r
-    }\r
-\r
-    /**\r
-     * @param modNode\r
-     * @param action\r
-     */\r
-    private void addModificationToLog(MutableNode<?> modNode, ModifyAction action) {\r
-        modNode.setModifyAction(action);\r
-        changeLog.add(modNode);\r
-    }\r
-\r
-    @Override\r
-    public void addNode(MutableSimpleNode<?> newNode) {\r
-        NodeUtils.fixParentRelation(newNode);\r
-        addModificationToLog(newNode, ModifyAction.CREATE);\r
-    }\r
-\r
-    @Override\r
-    public void addNode(MutableCompositeNode newNode) {\r
-        NodeUtils.fixParentRelation(newNode);\r
-        addModificationToLog(newNode, ModifyAction.CREATE);\r
-    }\r
-\r
-    @Override\r
-    public void replaceNode(MutableSimpleNode<?> replacementNode) {\r
-        addModificationToLog(replacementNode, ModifyAction.REPLACE);\r
-    }\r
-\r
-    @Override\r
-    public void replaceNode(MutableCompositeNode replacementNode) {\r
-        addModificationToLog(replacementNode, ModifyAction.REPLACE);\r
-    }\r
-\r
-    @Override\r
-    public void deleteNode(MutableCompositeNode deadNode) {\r
-        addModificationToLog(deadNode, ModifyAction.DELETE);\r
-    }\r
-\r
-    @Override\r
-    public void deleteNode(MutableSimpleNode<?> deadNode) {\r
-        addModificationToLog(deadNode, ModifyAction.DELETE);\r
-    }\r
-\r
-    @Override\r
-    public void removeNode(MutableSimpleNode<?> deadNode) {\r
-        addModificationToLog(deadNode, ModifyAction.REMOVE);\r
-    }\r
-\r
-    @Override\r
-    public void removeNode(MutableCompositeNode deadNode) {\r
-        addModificationToLog(deadNode, ModifyAction.REMOVE);\r
-    }\r
-\r
-    @Override\r
-    public void mergeNode(MutableCompositeNode alteredNode) {\r
-        addModificationToLog(alteredNode, ModifyAction.MERGE);\r
-    }\r
-\r
-    /**\r
-     * @return minimalistic tree containing diffs only\r
-     */\r
-    @Override\r
-    public CompositeNode buildDiffTree() {\r
-        Set<Node<?>> wanted = new HashSet<>();\r
-\r
-        // walk changeLog, collect all required nodes\r
-        for (MutableNode<?> mutant : changeLog) {\r
-            wanted.addAll(collectSelfAndAllParents(mutant));\r
-        }\r
-\r
-        // walk wanted and add relevant keys\r
-        Map<String, ListSchemaNode>  mapOfLists = NodeUtils.buildMapOfListNodes(context);\r
-        for (Node<?> outlaw : wanted) {\r
-            if (outlaw instanceof CompositeNode) {\r
-                String path = NodeUtils.buildPath(outlaw);\r
-                if (mapOfLists.containsKey(path)) {\r
-                    ListSchemaNode listSchema = mapOfLists.get(path);\r
-                    if (listSchema.getQName().equals(outlaw.getNodeType())) {\r
-                        // try to add key subnode to wanted list\r
-                        List<QName> supportedKeys = listSchema.getKeyDefinition();\r
-                        CompositeNode outlawOriginal = ((MutableCompositeNode) outlaw).getOriginal();\r
-                        for (Node<?> outlawOriginalChild : outlawOriginal.getChildren()) {\r
-                            if (supportedKeys.contains(outlawOriginalChild.getNodeType())) {\r
-                                originalToMutable.getMutableEquivalent(outlawOriginalChild);\r
-                            }\r
-                        }\r
-                    }\r
-                }\r
-            }\r
-        }\r
-\r
-        return originalToMutable.getMutableRoot();\r
-    }\r
-\r
-    /**\r
-     * @param focusedDescendant\r
-     * @return set of parents and focusedAncestor itself\r
-     */\r
-    private static Set<Node<?>> collectSelfAndAllParents(Node<?> focusedDescendant) {\r
-        Set<Node<?>> family = new HashSet<>();\r
-        Node<?> tmpNode = focusedDescendant;\r
-        while (tmpNode != null) {\r
-            family.add(tmpNode);\r
-            tmpNode = tmpNode.getParent();\r
-        }\r
-        return family;\r
-    }\r
-\r
-    /**\r
-     * @param originalNode\r
-     * @return mutable version of given node\r
-     */\r
-    @Override\r
-    public Node<?> getMutableEquivalent(Node<?> originalNode) {\r
-        return originalToMutable.getMutableEquivalent(originalNode);\r
-    }\r
-\r
-}\r
+/*
+ * 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.HashSet;
+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.MutableNode;
+import org.opendaylight.yangtools.yang.data.api.MutableSimpleNode;
+import org.opendaylight.yangtools.yang.data.api.Node;
+import org.opendaylight.yangtools.yang.data.api.NodeModificationBuilder;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+
+/**
+ * @author michal.rehak
+ * 
+ */
+public class NodeModificationBuilderImpl implements NodeModificationBuilder {
+
+    private SchemaContext context;
+
+    private Set<MutableNode<?>> changeLog;
+    private LazyNodeToNodeMap originalToMutable;
+
+    /**
+     * @param context
+     */
+    public NodeModificationBuilderImpl(SchemaContext context) {
+        this.context = context;
+        originalToMutable = new LazyNodeToNodeMap();
+        changeLog = new HashSet<>();
+    }
+
+    /**
+     * @param modNode
+     * @param action
+     */
+    private void addModificationToLog(MutableNode<?> modNode, ModifyAction action) {
+        modNode.setModifyAction(action);
+        changeLog.add(modNode);
+    }
+
+    @Override
+    public void addNode(MutableSimpleNode<?> newNode) {
+        NodeUtils.fixParentRelation(newNode);
+        addModificationToLog(newNode, ModifyAction.CREATE);
+    }
+
+    @Override
+    public void addNode(MutableCompositeNode newNode) {
+        NodeUtils.fixParentRelation(newNode);
+        addModificationToLog(newNode, ModifyAction.CREATE);
+    }
+
+    @Override
+    public void replaceNode(MutableSimpleNode<?> replacementNode) {
+        addModificationToLog(replacementNode, ModifyAction.REPLACE);
+    }
+
+    @Override
+    public void replaceNode(MutableCompositeNode replacementNode) {
+        addModificationToLog(replacementNode, ModifyAction.REPLACE);
+    }
+
+    @Override
+    public void deleteNode(MutableCompositeNode deadNode) {
+        addModificationToLog(deadNode, ModifyAction.DELETE);
+    }
+
+    @Override
+    public void deleteNode(MutableSimpleNode<?> deadNode) {
+        addModificationToLog(deadNode, ModifyAction.DELETE);
+    }
+
+    @Override
+    public void removeNode(MutableSimpleNode<?> deadNode) {
+        addModificationToLog(deadNode, ModifyAction.REMOVE);
+    }
+
+    @Override
+    public void removeNode(MutableCompositeNode deadNode) {
+        addModificationToLog(deadNode, ModifyAction.REMOVE);
+    }
+
+    @Override
+    public void mergeNode(MutableCompositeNode alteredNode) {
+        addModificationToLog(alteredNode, ModifyAction.MERGE);
+    }
+
+    /**
+     * @return minimalistic tree containing diffs only
+     */
+    @Override
+    public CompositeNode buildDiffTree() {
+        Set<Node<?>> wanted = new HashSet<>();
+
+        // walk changeLog, collect all required nodes
+        for (MutableNode<?> mutant : changeLog) {
+            wanted.addAll(collectSelfAndAllParents(mutant));
+        }
+
+        // walk wanted and add relevant keys
+        Map<String, ListSchemaNode> mapOfLists = NodeUtils.buildMapOfListNodes(context);
+        for (Node<?> outlaw : wanted) {
+            if (outlaw instanceof CompositeNode) {
+                String path = NodeUtils.buildPath(outlaw);
+                if (mapOfLists.containsKey(path)) {
+                    ListSchemaNode listSchema = mapOfLists.get(path);
+                    if (listSchema.getQName().equals(outlaw.getNodeType())) {
+                        // try to add key subnode to wanted list
+                        List<QName> supportedKeys = listSchema.getKeyDefinition();
+                        CompositeNode outlawOriginal = ((MutableCompositeNode) outlaw).getOriginal();
+                        for (Node<?> outlawOriginalChild : outlawOriginal.getChildren()) {
+                            if (supportedKeys.contains(outlawOriginalChild.getNodeType())) {
+                                originalToMutable.getMutableEquivalent(outlawOriginalChild);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return originalToMutable.getMutableRoot();
+    }
+
+    /**
+     * @param focusedDescendant
+     * @return set of parents and focusedAncestor itself
+     */
+    private static Set<Node<?>> collectSelfAndAllParents(Node<?> focusedDescendant) {
+        Set<Node<?>> family = new HashSet<>();
+        Node<?> tmpNode = focusedDescendant;
+        while (tmpNode != null) {
+            family.add(tmpNode);
+            tmpNode = tmpNode.getParent();
+        }
+        return family;
+    }
+
+    /**
+     * @param originalNode
+     * @return mutable version of given node
+     */
+    @Override
+    public Node<?> getMutableEquivalent(Node<?> originalNode) {
+        return originalToMutable.getMutableEquivalent(originalNode);
+    }
+
+}