fixing side effect of mutabilty od resource id

Change-Id: I16bf790829e1c9984e61eb8bf5d5754b1c6ab001
diff --git a/apps/config/src/main/java/org/onosproject/config/ResourceIdParser.java b/apps/config/src/main/java/org/onosproject/config/ResourceIdParser.java
index 802e682..6bcdecc 100755
--- a/apps/config/src/main/java/org/onosproject/config/ResourceIdParser.java
+++ b/apps/config/src/main/java/org/onosproject/config/ResourceIdParser.java
@@ -17,6 +17,7 @@
 
 import java.util.Iterator;
 
+import java.util.LinkedList;
 import java.util.List;
 
 import org.onosproject.yang.model.KeyLeaf;
@@ -46,12 +47,6 @@
 
     }
 
-    public static ResourceId getParent(ResourceId path) {
-        int last = path.nodeKeys().size();
-        path.nodeKeys().remove(last - 1);
-        return path;
-    }
-
     public static NodeKey getInstanceKey(ResourceId path) {
         int last = path.nodeKeys().size();
         NodeKey ret = path.nodeKeys().get(last - 1);
@@ -92,7 +87,6 @@
         return ret;
     }
 
-
     public static String appendMultiInstKey(String path, String leaf) {
         return (path + leaf.substring(leaf.indexOf(KEY_SEP)));
     }
@@ -161,7 +155,14 @@
         if (path == null) {
             return bldr.toString();
         }
-        List<NodeKey> nodeKeyList = path.nodeKeys();
+        List<NodeKey> nodeKeyList = new LinkedList<>();
+        Iterator<NodeKey> itr = path.nodeKeys().iterator();
+        while (itr.hasNext()) {
+            nodeKeyList.add(itr.next());
+        }
+        if (nodeKeyList.get(0).schemaId().name().compareTo("/") == 0) {
+            nodeKeyList.remove(0);
+        }
         for (NodeKey key : nodeKeyList) {
             bldr.append(EL_SEP);
             if (key instanceof LeafListKey) {
diff --git a/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java b/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
index d1359e3..a1287a2 100644
--- a/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
+++ b/apps/config/src/main/java/org/onosproject/config/impl/DistributedDynamicConfigStore.java
@@ -56,7 +56,6 @@
 import org.slf4j.LoggerFactory;
 
 import java.math.BigInteger;
-import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
@@ -125,11 +124,6 @@
     public CompletableFuture<Boolean>
     addNode(ResourceId complete, DataNode node) {
         CompletableFuture<Boolean> eventFuture = CompletableFuture.completedFuture(true);
-        List<NodeKey> nodeKeyList = complete.nodeKeys();
-        NodeKey f = nodeKeyList.get(0);
-        if (f.schemaId().name().compareTo("/") == 0) {
-            nodeKeyList.remove(0);
-        }
         String spath = ResourceIdParser.parseResId(complete);
         if (spath == null) {
             throw new FailedException("Invalid RsourceId, cannot create Node");
@@ -211,11 +205,6 @@
     @Override
     public CompletableFuture<DataNode> readNode(ResourceId path, Filter filter) {
         CompletableFuture<DataNode> eventFuture = CompletableFuture.completedFuture(null);
-        List<NodeKey> nodeKeyList = path.nodeKeys();
-        NodeKey f = nodeKeyList.get(0);
-        if (f.schemaId().name().compareTo("/") == 0) {
-            nodeKeyList.remove(0);
-        }
         String spath = ResourceIdParser.parseResId(path);
         DocumentPath dpath = DocumentPath.from(spath);
         DataNode.Type type = null;
@@ -339,11 +328,6 @@
     @Override
     public CompletableFuture<Boolean> updateNode(ResourceId complete, DataNode node) {
         CompletableFuture<Boolean> eventFuture = CompletableFuture.completedFuture(true);
-        List<NodeKey> nodeKeyList = complete.nodeKeys();
-        NodeKey f = nodeKeyList.get(0);
-        if (f.schemaId().name().compareTo("/") == 0) {
-            nodeKeyList.remove(0);
-        }
         String spath = ResourceIdParser.parseResId(complete);
         if (spath == null) {
             throw new FailedException("Invalid RsourceId, cannot update Node");
@@ -361,11 +345,6 @@
     @Override
     public CompletableFuture<Boolean> nodeExist(ResourceId complete) {
         Boolean stat = true;
-        List<NodeKey> nodeKeyList = complete.nodeKeys();
-        NodeKey f = nodeKeyList.get(0);
-        if (f.schemaId().name().compareTo("/") == 0) {
-            nodeKeyList.remove(0);
-        }
         String spath = ResourceIdParser.parseResId(complete);
         if (spath == null) {
             stat = false;
@@ -423,14 +402,9 @@
 
     @Override
     public CompletableFuture<Boolean> deleteNodeRecursive(ResourceId path) {
-        List<NodeKey> nodeKeyList = path.nodeKeys();
-        NodeKey f = nodeKeyList.get(0);
-        if (f.schemaId().name().compareTo("/") == 0) {
-            nodeKeyList.remove(0);
-        }
         String spath = ResourceIdParser.parseResId(path);
         if (spath == null) {
-            throw new FailedException("Invalid RsourceId, cannot create Node");
+            throw new FailedException("Invalid RsourceId, cannot delete Node");
         }
         if (spath.compareTo(ResourceIdParser.ROOT) == 0) {
             throw new FailedException("Cannot delete Root");