b924deb9f3f9aabfcf257a85aa7676a2f966804d
[nemo.git] / nemo-impl / src / main / java / org / opendaylight / nemo / user / vnspacemanager / structurestyle / deleteintent / DeleteNode.java
1 /*\r
2  * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.nemo.user.vnspacemanager.structurestyle.deleteintent;\r
9 \r
10 import com.google.common.util.concurrent.CheckedFuture;\r
11 import com.google.common.util.concurrent.FutureCallback;\r
12 import com.google.common.util.concurrent.Futures;\r
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
14 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
16 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;\r
17 import org.opendaylight.nemo.user.tenantmanager.TenantManage;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.NodeId;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.Users;\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Connection;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.NodeKey;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.UserKey;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.EndNode;\r
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
29 import org.slf4j.Logger;\r
30 import org.slf4j.LoggerFactory;\r
31 \r
32 import java.util.List;\r
33 \r
34 /**\r
35  * Created by z00293636 on 2015/9/2.\r
36  */\r
37 public class DeleteNode {\r
38 \r
39     private DataBroker dataBroker;\r
40     private TenantManage tenantManage;\r
41     private static final Logger LOG = LoggerFactory.getLogger(DeleteNode.class);\r
42     private DeleteConnection deleteConnection;\r
43 \r
44     public DeleteNode(DataBroker dataBroker, TenantManage tenantManage){\r
45         this.dataBroker = dataBroker;\r
46         this.tenantManage = tenantManage;\r
47         deleteConnection = new DeleteConnection(dataBroker, tenantManage);\r
48     }\r
49 \r
50     public String DeleNodeHandling(UserId userId,NodeId nodeId){\r
51         String errorInfo = null;\r
52         Boolean NodeInstanceExist = false;\r
53         tenantManage.fetchVNSpace(userId);\r
54         User user = tenantManage.getUser();\r
55         if (user != null){\r
56             if (user.getObjects() != null){\r
57                 if (user.getObjects().getNode() != null){\r
58                     List<Node> nodeList = tenantManage.getUser().getObjects().getNode();\r
59                     for (Node node : nodeList){\r
60                         if (node.getNodeId().equals(nodeId)){\r
61                             NodeInstanceExist = true;\r
62                             DeleteNodeInstance(userId,nodeId);\r
63 \r
64                             if (user.getObjects().getConnection()!=null) {\r
65                                 Boolean nodeconn = false;\r
66                                 List<Connection> connectionList = user.getObjects().getConnection();\r
67                                 for (Connection connection : connectionList){\r
68                                     if (connection.getEndNode() != null){\r
69                                         for (EndNode endNode : connection.getEndNode()){\r
70                                             if (endNode.getNodeId().equals(nodeId)){\r
71                                                 nodeconn = true;\r
72                                             }\r
73                                         }\r
74                                         if (nodeconn){\r
75                                             errorInfo = deleteConnection.DeleteConnectionHandling(userId,connection.getConnectionId());\r
76                                         }\r
77                                     }\r
78                                 }\r
79                             }\r
80                         }\r
81                     }\r
82                     if (!NodeInstanceExist) {\r
83                         errorInfo = "The node instance " +nodeId.getValue()+" is not exist.Could not be deleted";\r
84                     }\r
85                 }\r
86                 else{\r
87                     errorInfo = "There are no nodes instances in data store.";\r
88                 }\r
89             }\r
90         }\r
91         else{\r
92             errorInfo = "There are no user in data store.";\r
93         }\r
94 \r
95         return errorInfo;\r
96     }\r
97 \r
98     private void DeleteNodeInstance(UserId userId,NodeId nodeId){\r
99         WriteTransaction t = dataBroker.newWriteOnlyTransaction();\r
100         UserKey userKey = new UserKey(userId);\r
101         NodeKey nodeKey = new NodeKey(nodeId);\r
102 \r
103         InstanceIdentifier<Node> nodeid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Node.class,nodeKey).build();\r
104         t.delete(LogicalDatastoreType.CONFIGURATION, nodeid);\r
105         CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();\r
106         Futures.addCallback(f, new FutureCallback<Void>() {\r
107             @Override\r
108             public void onFailure(Throwable t) {\r
109                 LOG.error("Could not write endpoint base container", t);\r
110             }\r
111 \r
112             @Override\r
113             public void onSuccess(Void result) {\r
114             }\r
115         });\r
116     }\r
117 }\r