Change the way of fetching data from datastore and write user's intents into datastor...
[nemo.git] / nemo-impl / src / main / java / org / opendaylight / nemo / user / tenantmanager / TenantManage.java
index 4a5154eb709cfc627d34e604b32d3cca62edbd9f..aca173aa54639d048352dbcfcdea0aa4bd9043e9 100644 (file)
@@ -7,18 +7,32 @@
  */\r
 package org.opendaylight.nemo.user.tenantmanager;\r
 \r
-import java.util.HashMap;\r
-import java.util.Map;\r
-import java.util.concurrent.ExecutionException;\r
-\r
+import com.google.common.base.Function;\r
+import com.google.common.base.Optional;\r
+import com.google.common.collect.Maps;\r
+import com.google.common.util.concurrent.CheckedFuture;\r
+import com.google.common.util.concurrent.FutureCallback;\r
+import com.google.common.util.concurrent.Futures;\r
+import com.google.common.util.concurrent.ListenableFuture;\r
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserRoleName;\r
+import org.opendaylight.nemo.user.vnspacemanager.languagestyle.NEMOConstants;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.RegisterUserInput;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.Users;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Operations;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.TemplateDefinitions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.TemplateInstances;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.OperationKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.definitions.TemplateDefinition;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.definitions.TemplateDefinitionKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.instances.TemplateInstance;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.instances.TemplateInstanceKey;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.UserBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.UserKey;\r
@@ -28,13 +42,9 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;\r
 import org.slf4j.LoggerFactory;\r
 \r
-import com.google.common.base.Function;\r
-import com.google.common.base.Optional;\r
-import com.google.common.collect.Maps;\r
-import com.google.common.util.concurrent.CheckedFuture;\r
-import com.google.common.util.concurrent.FutureCallback;\r
-import com.google.common.util.concurrent.Futures;\r
-import com.google.common.util.concurrent.ListenableFuture;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.concurrent.ExecutionException;\r
 \r
 /**\r
  * Created by z00293636 on 2015/8/29.\r
@@ -45,9 +55,16 @@ public class TenantManage {
     private static final Logger LOG = LoggerFactory.getLogger(TenantManage.class);\r
     private DataBroker dataBroker;\r
     private User user;\r
+    private Map<UserId, Map<NodeId, Node>> userNodeMap = new HashMap<UserId, Map<NodeId, Node>>();\r
+    private Map<UserId, Map<ConnectionId, Connection>> userConnectionMap = new HashMap<UserId, Map<ConnectionId, Connection>>();\r
+    private Map<UserId, Map<FlowId, Flow>> userFlowMap = new HashMap<UserId, Map<FlowId, Flow>>();\r
+    private Map<UserId, Map<OperationId, Operation>> userOperationMap = new HashMap<UserId, Map<OperationId, Operation>>();\r
+    private Map<UserId, Map<TemplateName, TemplateDefinition>> userTemplateDefinitionMap = new HashMap<UserId, Map<TemplateName, TemplateDefinition>>();\r
+    private Map<UserId, Map<TemplateInstanceId, TemplateInstance>> userTemplateInstanceMap = new HashMap<UserId, Map<TemplateInstanceId, TemplateInstance>>();\r
+    private Map<UserId, Map<String, String>> userDeleteIntent = new HashMap<UserId, Map<String, String>>();\r
+    private Map<UserId, Map<String, String>> userNameIdMap = new HashMap<UserId, Map<String, String>>();\r
 \r
-    public TenantManage(DataBroker dataBroker)\r
-    {\r
+    public TenantManage(DataBroker dataBroker){\r
         this.dataBroker = dataBroker;\r
     }\r
 \r
@@ -134,8 +151,7 @@ public class TenantManage {
         }).or(new HashMap<UserId, User>());\r
     }\r
 \r
-    public void fetchVNSpace(UserId userId)\r
-    {\r
+    public void fetchVNSpace(UserId userId){\r
         final Map<UserId, User> users = getUsers();\r
         setUser((users != null) ? users.get(userId) : null);\r
     }\r
@@ -162,6 +178,576 @@ public class TenantManage {
 \r
                 }\r
             });\r
+            try {\r
+                f.get();\r
+            } catch (InterruptedException e) {\r
+                // TODO Auto-generated catch block\r
+                e.printStackTrace();\r
+            } catch (ExecutionException e) {\r
+                // TODO Auto-generated catch block\r
+                e.printStackTrace();\r
+            }\r
+        }\r
+    }\r
+\r
+    /**\r
+     * create a space to store all information in one transaction\r
+     */\r
+    public void transactionHandling(UserId userId){\r
+        writeDataStore(userId);\r
+        deleteDataStore(userId);\r
+\r
+        userNodeMap.clear();\r
+        userConnectionMap.clear();\r
+        userFlowMap.clear();\r
+        userOperationMap.clear();\r
+        userTemplateDefinitionMap.clear();\r
+        userTemplateInstanceMap.clear();\r
+        userDeleteIntent.clear();\r
+    }\r
+\r
+    /**\r
+     * store and get all user node in one transaction into map\r
+     * @param userId\r
+     */\r
+    public void setNode(UserId userId, NodeId nodeId, Node node){\r
+        if (userNodeMap.containsKey(userId)){\r
+            Map<NodeId, Node> nodeMap = userNodeMap.get(userId);\r
+            nodeMap.put(nodeId, node);\r
+        }\r
+        else {\r
+            Map<NodeId, Node> nodeMap = new HashMap<NodeId, Node>();\r
+            nodeMap.put(nodeId,node);\r
+            userNodeMap.put(userId,nodeMap);\r
+        }\r
+        setUserNameIdMap(userId, node.getNodeName().getValue(),nodeId.getValue());\r
+    }\r
+\r
+    public Map<NodeId, Node> getNode(UserId userId){\r
+        if (!userNodeMap.isEmpty()){\r
+            return userNodeMap.get(userId);\r
+        }\r
+        else {\r
+            return null;\r
+        }\r
+    }\r
+\r
+    public void setConnection(UserId userId, ConnectionId connectionId, Connection connection){\r
+        if (userConnectionMap.containsKey(userId)){\r
+            Map<ConnectionId, Connection> connectionMap = userConnectionMap.get(userId);\r
+            connectionMap.put(connectionId,connection);\r
+        }\r
+        else {\r
+            Map<ConnectionId, Connection> connectionMap = new HashMap<ConnectionId, Connection>();\r
+            connectionMap.put(connectionId,connection);\r
+            userConnectionMap.put(userId,connectionMap);\r
+        }\r
+        setUserNameIdMap(userId, connection.getConnectionName().getValue(),connectionId.getValue());\r
+    }\r
+\r
+    public Map<ConnectionId, Connection> getConnection(UserId userId){\r
+        if (!userConnectionMap.isEmpty()){\r
+            return userConnectionMap.get(userId);\r
+        }\r
+        else {\r
+            return null;\r
+        }\r
+    }\r
+\r
+    public void setFlow(UserId userId, FlowId flowId, Flow flow){\r
+        if (userFlowMap.containsKey(userId)){\r
+            Map<FlowId,Flow> flowMap = userFlowMap.get(userId);\r
+            flowMap.put(flowId,flow);\r
+        }\r
+        else {\r
+            Map<FlowId,Flow> flowMap = new HashMap<FlowId, Flow>();\r
+            flowMap.put(flowId,flow);\r
+            userFlowMap.put(userId,flowMap);\r
+        }\r
+        setUserNameIdMap(userId,flow.getFlowName().getValue(),flowId.getValue());\r
+    }\r
+\r
+    public Map<FlowId,Flow> getFlow(UserId userId){\r
+        if (!userFlowMap.isEmpty()){\r
+            return userFlowMap.get(userId);\r
+        }\r
+        else {\r
+            return null;\r
+        }\r
+    }\r
+\r
+    public void setOperation(UserId userId, OperationId operationId, Operation operation){\r
+        if (userOperationMap.containsKey(userId)){\r
+            Map<OperationId, Operation> operationMap = userOperationMap.get(userId);\r
+            operationMap.put(operationId,operation);\r
+        }\r
+        else {\r
+            Map<OperationId, Operation> operationMap = new HashMap<OperationId, Operation>();\r
+            operationMap.put(operationId,operation);\r
+            userOperationMap.put(userId,operationMap);\r
+        }\r
+        setUserNameIdMap(userId,operation.getOperationName().getValue(),operationId.getValue());\r
+    }\r
+\r
+    public Map<OperationId, Operation> getOperation(UserId userId){\r
+        if (!userOperationMap.isEmpty()){\r
+            return userOperationMap.get(userId);\r
+        }\r
+        else {\r
+            return null;\r
+        }\r
+    }\r
+\r
+    public void setTemplateDefinition(UserId userId,TemplateName templateName, TemplateDefinition definition){\r
+        if (userTemplateDefinitionMap.containsKey(userId)){\r
+            Map<TemplateName, TemplateDefinition> definitionMap = userTemplateDefinitionMap.get(userId);\r
+            definitionMap.put(templateName,definition);\r
+        }\r
+        else {\r
+            Map<TemplateName, TemplateDefinition> definitionMap = new HashMap<TemplateName, TemplateDefinition>();\r
+            definitionMap.put(templateName,definition);\r
+            userTemplateDefinitionMap.put(userId,definitionMap);\r
+        }\r
+    }\r
+\r
+    public Map<TemplateName, TemplateDefinition> getTempalteDefinition(UserId userId){\r
+        if (!userTemplateDefinitionMap.isEmpty()){\r
+            return userTemplateDefinitionMap.get(userId);\r
+        }\r
+        else {\r
+            return null;\r
+        }\r
+    }\r
+\r
+    public void setUserTemplateInstance(UserId userId, TemplateInstanceId instanceId, TemplateInstance instance){\r
+        if (userTemplateInstanceMap.containsKey(userId)){\r
+            Map<TemplateInstanceId, TemplateInstance> instanceMap = userTemplateInstanceMap.get(userId);\r
+            instanceMap.put(instanceId,instance);\r
+        }\r
+        else {\r
+            Map<TemplateInstanceId, TemplateInstance> instanceMap = new HashMap<TemplateInstanceId, TemplateInstance>();\r
+            instanceMap.put(instanceId,instance);\r
+            userTemplateInstanceMap.put(userId,instanceMap);\r
+        }\r
+    }\r
+\r
+    public Map<TemplateInstanceId, TemplateInstance> getTemplateInstance(UserId userId){\r
+        if (!userTemplateInstanceMap.isEmpty()){\r
+            return userTemplateInstanceMap.get(userId);\r
+        }\r
+        else {\r
+            return null;\r
+        }\r
+    }\r
+\r
+    /**\r
+     * store all intent need to be deleted in the data store\r
+     * @param userId\r
+     * @param type\r
+     * @param objectId\r
+     */\r
+    public void setUserDeleteIntent(UserId userId, String type, String objectId){\r
+        if (userDeleteIntent.containsKey(userId)){\r
+            Map<String, String> deleteObject = userDeleteIntent.get(userId);\r
+            deleteObject.put(objectId,type);\r
+        }\r
+        else {\r
+            Map<String, String> deleteObject = new HashMap<String, String>();\r
+            deleteObject.put(objectId,type);\r
+            userDeleteIntent.put(userId, deleteObject);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * store all name-id map\r
+     * @param userId\r
+     * @param name\r
+     * @param objectId\r
+     */\r
+    public void setUserNameIdMap(UserId userId, String name, String objectId){\r
+        if (userNameIdMap.containsKey(userId)){\r
+            Map<String, String> map = userNameIdMap.get(userId);\r
+            map.put(name,objectId);\r
+        }\r
+        else {\r
+            Map<String, String> nameIdMap = new HashMap<String, String>();\r
+            nameIdMap.put(name, objectId);\r
+            userNameIdMap.put(userId, nameIdMap);\r
+        }\r
+    }\r
+\r
+    public Map<String, String> getUserNameIdMap(UserId userId){\r
+        if (!userNameIdMap.isEmpty()){\r
+            return userNameIdMap.get(userId);\r
+        }\r
+        else {\r
+            return null;\r
+        }\r
+    }\r
+\r
+    public String getObjectId(UserId userId, String name){\r
+        if (userNameIdMap.containsKey(userId)){\r
+            if (userNameIdMap.get(userId).containsKey(name)){\r
+                return userNameIdMap.get(userId).get(name);\r
+            }\r
+        }\r
+        return null;\r
+    }\r
+\r
+    public String getName(UserId userId, String objectId){\r
+        if (userNameIdMap.containsKey(userId)){\r
+            for (String name : userNameIdMap.get(userId).keySet()){\r
+                if (objectId.equals(userNameIdMap.get(userId).get(name))){\r
+                    return name;\r
+                }\r
+            }\r
+        }\r
+        return null;\r
+    }\r
+\r
+    /**\r
+     * get all information stored in data store\r
+     */\r
+\r
+    public Map<NodeId, Node> getNodeDataStore(UserId userId){\r
+        Map<NodeId, Node> nodeMap = new HashMap<NodeId, Node>();\r
+        fetchVNSpace(userId);\r
+        User user1 = getUser();\r
+        if (user1.getObjects()!=null){\r
+            if (user1.getObjects().getNode()!=null){\r
+                for (Node node : user1.getObjects().getNode()){\r
+                    nodeMap.put(node.getNodeId(),node);\r
+                }\r
+            }\r
+        }\r
+        return nodeMap.isEmpty()?null:nodeMap;\r
+    }\r
+\r
+    public Map<ConnectionId, Connection> getConnectionDataStore(UserId userId){\r
+        Map<ConnectionId, Connection> connectionMap = new HashMap<ConnectionId, Connection>();\r
+        fetchVNSpace(userId);\r
+        User user1 = getUser();\r
+        if (user1.getObjects()!=null){\r
+            if (user1.getObjects().getConnection()!=null){\r
+                for (Connection connection : user1.getObjects().getConnection()){\r
+                    connectionMap.put(connection.getConnectionId(),connection);\r
+                }\r
+            }\r
+        }\r
+        return connectionMap.isEmpty()?null:connectionMap;\r
+    }\r
+\r
+    public Map<FlowId, Flow> getFlowDataStore(UserId userId){\r
+        Map<FlowId, Flow> flowMap = new HashMap<FlowId, Flow>();\r
+        fetchVNSpace(userId);\r
+        User user1 = getUser();\r
+        if (user1.getObjects()!=null){\r
+            if (user1.getObjects().getFlow()!=null){\r
+                for (Flow flow : user1.getObjects().getFlow()){\r
+                    flowMap.put(flow.getFlowId(),flow);\r
+                }\r
+            }\r
+        }\r
+        return flowMap.isEmpty()?null:flowMap;\r
+    }\r
+\r
+    public Map<OperationId, Operation> getOperationDataStore(UserId userId){\r
+        Map<OperationId, Operation> operationMap = new HashMap<OperationId, Operation>();\r
+        fetchVNSpace(userId);\r
+        User user1 = getUser();\r
+        if (user1.getOperations()!=null){\r
+            if (user1.getOperations().getOperation()!=null){\r
+                for (Operation operation : user1.getOperations().getOperation()){\r
+                    operationMap.put(operation.getOperationId(),operation);\r
+                }\r
+            }\r
+        }\r
+        return operationMap.isEmpty()?null:operationMap;\r
+    }\r
+\r
+    public Map<TemplateName, TemplateDefinition> getDefinitionDataStore(UserId userId){\r
+        Map<TemplateName, TemplateDefinition> definitionMap = new HashMap<TemplateName, TemplateDefinition>();\r
+        fetchVNSpace(userId);\r
+        User user1 = getUser();\r
+        if (user1.getTemplateDefinitions()!=null){\r
+            if (user1.getTemplateDefinitions().getTemplateDefinition()!=null){\r
+                for (TemplateDefinition definition : user1.getTemplateDefinitions().getTemplateDefinition()){\r
+                    definitionMap.put(definition.getTemplateName(),definition);\r
+                }\r
+            }\r
+        }\r
+        return definitionMap.isEmpty()?null:definitionMap;\r
+    }\r
+\r
+    public Map<TemplateInstanceId, TemplateInstance> getInstanceDataStore(UserId userId){\r
+        Map<TemplateInstanceId, TemplateInstance> instanceMap = new HashMap<TemplateInstanceId, TemplateInstance>();\r
+        fetchVNSpace(userId);\r
+        User user1 = getUser();\r
+        if (user1.getTemplateInstances()!=null){\r
+            if (user1.getTemplateInstances().getTemplateInstance()!=null){\r
+                for (TemplateInstance instance : user1.getTemplateInstances().getTemplateInstance()){\r
+                    instanceMap.put(instance.getTemplateInstanceId(),instance);\r
+                }\r
+            }\r
+        }\r
+        return instanceMap.isEmpty()?null:instanceMap;\r
+    }\r
+\r
+    /**\r
+     * write all information in one transaction into data store\r
+     */\r
+    private void writeDataStore(UserId userId){\r
+\r
+        UserKey userKey = new UserKey(userId);\r
+        if (getNode(userId)!=null){\r
+            for (NodeId nodeId : getNode(userId).keySet()){\r
+                NodeKey nodeKey = new NodeKey(nodeId);\r
+                WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
+                InstanceIdentifier<Node> nodeid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Node.class,nodeKey).build();\r
+                t.put(LogicalDatastoreType.CONFIGURATION, nodeid, getNode(userId).get(nodeId),true);\r
+                CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
+                Futures.addCallback(f, new FutureCallback<Void>() {\r
+                    @Override\r
+                    public void onFailure(Throwable t) {\r
+                        LOG.error("Could not write node instance", t);\r
+                    }\r
+                    @Override\r
+                    public void onSuccess(Void result) {\r
+                    }\r
+                });\r
+                try {\r
+                    f.get();\r
+                } catch (InterruptedException e) {\r
+                    // TODO Auto-generated catch block\r
+                    e.printStackTrace();\r
+                } catch (ExecutionException e) {\r
+                    // TODO Auto-generated catch block\r
+                    e.printStackTrace();\r
+                }\r
+            }\r
+\r
+        }\r
+        if (getConnection(userId)!=null){\r
+           for (ConnectionId connectionId : getConnection(userId).keySet()){\r
+                ConnectionKey connectionKey = new ConnectionKey(connectionId);\r
+               WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
+                InstanceIdentifier<Connection> connectionid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Connection.class,connectionKey).build();\r
+                t.put(LogicalDatastoreType.CONFIGURATION, connectionid, getConnection(userId).get(connectionId),true);\r
+                CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
+                Futures.addCallback(f, new FutureCallback<Void>() {\r
+                    @Override\r
+                    public void onFailure(Throwable t) {\r
+                        LOG.error("Could not write connection instance", t);\r
+                    }\r
+                    @Override\r
+                    public void onSuccess(Void result) {\r
+                    }\r
+                });\r
+               try {\r
+                   f.get();\r
+               } catch (InterruptedException e) {\r
+                   // TODO Auto-generated catch block\r
+                   e.printStackTrace();\r
+               } catch (ExecutionException e) {\r
+                   // TODO Auto-generated catch block\r
+                   e.printStackTrace();\r
+               }\r
+           }\r
+        }\r
+        if (getFlow(userId)!=null){\r
+           for (FlowId flowId : getFlow(userId).keySet()){\r
+                FlowKey flowKey = new FlowKey(flowId);\r
+               WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
+                InstanceIdentifier<Flow> flowid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Flow.class,flowKey).build();\r
+                t.put(LogicalDatastoreType.CONFIGURATION, flowid, getFlow(userId).get(flowId),true);\r
+                CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
+                Futures.addCallback(f, new FutureCallback<Void>() {\r
+                    @Override\r
+                    public void onFailure(Throwable t) {\r
+                        LOG.error("Could not write endpoint base container", t);\r
+                    }\r
+                    @Override\r
+                    public void onSuccess(Void result) {\r
+                    }\r
+                });\r
+               try {\r
+                   f.get();\r
+               } catch (InterruptedException e) {\r
+                   // TODO Auto-generated catch block\r
+                   e.printStackTrace();\r
+               } catch (ExecutionException e) {\r
+                   // TODO Auto-generated catch block\r
+                   e.printStackTrace();\r
+               }\r
+           }\r
+        }\r
+        if (getOperation(userId)!=null){\r
+            for (OperationId operationId : getOperation(userId).keySet()){\r
+                OperationKey operationKey = new OperationKey(operationId);\r
+                WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
+                InstanceIdentifier<Operation> operationid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Operations.class).child(Operation.class,operationKey).build();\r
+                t.put(LogicalDatastoreType.CONFIGURATION, operationid, getOperation(userId).get(operationId),true);\r
+                CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
+                Futures.addCallback(f, new FutureCallback<Void>() {\r
+                    @Override\r
+                    public void onFailure(Throwable t) {\r
+                        LOG.error("Could not write endpoint base container", t);\r
+                    }\r
+\r
+                    @Override\r
+                    public void onSuccess(Void result) {\r
+\r
+                    }\r
+                });\r
+                try {\r
+                    f.get();\r
+                } catch (InterruptedException e) {\r
+                    // TODO Auto-generated catch block\r
+                    e.printStackTrace();\r
+                } catch (ExecutionException e) {\r
+                    // TODO Auto-generated catch block\r
+                    e.printStackTrace();\r
+                }\r
+            }\r
+        }\r
+        if (getTempalteDefinition(userId)!=null){\r
+            for (TemplateName templateName : getTempalteDefinition(userId).keySet()){\r
+                TemplateDefinitionKey key = new TemplateDefinitionKey(templateName);\r
+                WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
+                InstanceIdentifier<TemplateDefinition> templateDefinitionId = InstanceIdentifier.builder(Users.class).child(User.class, userKey)\r
+                        .child(TemplateDefinitions.class).child(TemplateDefinition.class, key)\r
+                        .build();\r
+                t.put(LogicalDatastoreType.CONFIGURATION, templateDefinitionId, getTempalteDefinition(userId).get(templateName),true);\r
+                CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
+                Futures.addCallback(f, new FutureCallback<Void>() {\r
+                    @Override\r
+                    public void onFailure(Throwable t) {\r
+                        LOG.error("Could not write endpoint base container", t);\r
+                    }\r
+                    @Override\r
+                    public void onSuccess(Void result) {\r
+                    }\r
+                });\r
+                try {\r
+                    f.get();\r
+                } catch (InterruptedException e) {\r
+                    // TODO Auto-generated catch block\r
+                    e.printStackTrace();\r
+                } catch (ExecutionException e) {\r
+                    // TODO Auto-generated catch block\r
+                    e.printStackTrace();\r
+                }\r
+            }\r
+        }\r
+        if (getTemplateInstance(userId)!=null){\r
+          for (TemplateInstanceId instanceId : getTemplateInstance(userId).keySet()){\r
+                TemplateInstanceKey key = new TemplateInstanceKey(instanceId);\r
+                WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
+                InstanceIdentifier<TemplateInstance> templateDefinitionId = InstanceIdentifier.builder(Users.class).child(User.class, userKey)\r
+                        .child(TemplateInstances.class).child(TemplateInstance.class, key)\r
+                        .build();\r
+                t.put(LogicalDatastoreType.CONFIGURATION, templateDefinitionId, getTemplateInstance(userId).get(instanceId),true);\r
+                CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
+                Futures.addCallback(f, new FutureCallback<Void>() {\r
+                    @Override\r
+                    public void onFailure(Throwable t) {\r
+                        LOG.error("Could not write endpoint base container", t);\r
+                    }\r
+                    @Override\r
+                    public void onSuccess(Void result) {\r
+                    }\r
+                });\r
+              try {\r
+                  f.get();\r
+              } catch (InterruptedException e) {\r
+                  // TODO Auto-generated catch block\r
+                  e.printStackTrace();\r
+              } catch (ExecutionException e) {\r
+                  // TODO Auto-generated catch block\r
+                  e.printStackTrace();\r
+              }\r
+          }\r
+        }\r
+    }\r
+\r
+    /**\r
+     * delete intent in data store\r
+     * @param userId\r
+     */\r
+    private void deleteDataStore(UserId userId){\r
+        if (userDeleteIntent.get(userId)!=null){\r
+            Map<String, String> deleteObject = userDeleteIntent.get(userId);\r
+\r
+            for (String objectId : deleteObject.keySet()){\r
+                if (deleteObject.get(objectId).equals(NEMOConstants.node)){\r
+                    UserKey userKey = new UserKey(userId);\r
+                    NodeKey nodeKey = new NodeKey(new NodeId(objectId));\r
+                    WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
+                    InstanceIdentifier<Node> nodeid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Node.class,nodeKey).build();\r
+                    t.delete(LogicalDatastoreType.CONFIGURATION, nodeid);\r
+                    CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
+                    Futures.addCallback(f, new FutureCallback<Void>() {\r
+                        @Override\r
+                        public void onFailure(Throwable t) {\r
+                            LOG.error("Could not delete node instance", t);\r
+                        }\r
+                        @Override\r
+                        public void onSuccess(Void result) {\r
+                        }\r
+                    });\r
+                }\r
+                if (deleteObject.get(objectId).equals(NEMOConstants.connection)){\r
+                    UserKey userKey = new UserKey(userId);\r
+                    ConnectionKey connectionKey = new ConnectionKey(new ConnectionId(objectId));\r
+                    WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
+                    InstanceIdentifier<Connection> connectionid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Connection.class,connectionKey).build();\r
+                    t.delete(LogicalDatastoreType.CONFIGURATION, connectionid);\r
+                    CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
+                    Futures.addCallback(f, new FutureCallback<Void>() {\r
+                        @Override\r
+                        public void onFailure(Throwable t) {\r
+                            LOG.error("Could not delete connection instance", t);\r
+                        }\r
+                        @Override\r
+                        public void onSuccess(Void result) {\r
+                        }\r
+                    });\r
+                }\r
+                if (deleteObject.get(objectId).equals(NEMOConstants.flow)){\r
+                    UserKey userKey = new UserKey(userId);\r
+                    FlowKey flowKey = new FlowKey(new FlowId(objectId));\r
+                    WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
+                    InstanceIdentifier<Flow> flowid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Flow.class,flowKey).build();\r
+                    t.delete(LogicalDatastoreType.CONFIGURATION, flowid);\r
+                    CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
+                    Futures.addCallback(f, new FutureCallback<Void>() {\r
+                        @Override\r
+                        public void onFailure(Throwable t) {\r
+                            LOG.error("Could not delete flow instance", t);\r
+                        }\r
+                        @Override\r
+                        public void onSuccess(Void result) {\r
+                        }\r
+                    });\r
+                }\r
+                if (deleteObject.get(objectId).equals(NEMOConstants.operation)){\r
+                    UserKey userKey = new UserKey(userId);\r
+                    OperationKey operationKey = new OperationKey(new OperationId(objectId));\r
+                    WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
+                    InstanceIdentifier<Operation> operationid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Operations.class).child(Operation.class,operationKey).build();\r
+                    t.delete(LogicalDatastoreType.CONFIGURATION, operationid);\r
+                    CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
+                    Futures.addCallback(f, new FutureCallback<Void>() {\r
+                        @Override\r
+                        public void onFailure(Throwable t) {\r
+                            LOG.error("Could not delete operation instance", t);\r
+                        }\r
+                        @Override\r
+                        public void onSuccess(Void result) {\r
+                        }\r
+                    });\r
+                }\r
+            }\r
         }\r
     }\r
 }\r