ab1d74df66299b2d654216b0c48612802296fe2a
[nemo.git] / nemo-impl / src / main / java / org / opendaylight / nemo / user / vnspacemanager / languagestyle / updateintentlang / UpdateConnectionLang.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.languagestyle.updateintentlang;\r
9 \r
10 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
11 import org.opendaylight.nemo.user.tenantmanager.TenantManage;\r
12 import org.opendaylight.nemo.user.vnspacemanager.languagestyle.NEMOConstants;\r
13 import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateConnection;\r
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Connection;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.ConnectionBuilder;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.ConnectionKey;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.*;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.PropertyValuesBuilder;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.*;\r
21 \r
22 import java.util.*;\r
23 \r
24 /**\r
25  * Created by z00293636 on 2015/11/5.\r
26  */\r
27 public class UpdateConnectionLang {\r
28     private TenantManage tenantManage;\r
29     private Connection connection;\r
30     private UpdateConnection updateConnection;\r
31 \r
32     public UpdateConnectionLang(DataBroker dataBroker, TenantManage tenantManage){\r
33         this.tenantManage = tenantManage;\r
34         updateConnection = new UpdateConnection(dataBroker,tenantManage);\r
35     }\r
36 \r
37     public String ConnectionHandling(UserId userId,String connectionname, String connectiontype, List<String> endnodes, LinkedHashMap<String, LinkedHashMap<String,String>> propertyList){\r
38         String errorInfo = null;\r
39         if (!propertyList.isEmpty()){\r
40             errorInfo = checkProperty(propertyList);\r
41         }\r
42         if (errorInfo==null){\r
43             errorInfo = createConnection(userId,connectionname,connectiontype,endnodes,propertyList);\r
44             if (errorInfo == null){\r
45                 return updateConnection.ConnectionHandling(userId,this.connection);\r
46             }\r
47         }\r
48         return errorInfo;\r
49     }\r
50 \r
51     private String checkProperty(LinkedHashMap<String, LinkedHashMap<String,String>> propertyList){\r
52         String errorInfo = null;\r
53         for (String propertyName : propertyList.keySet()){\r
54             LinkedHashMap<String, String> propertyValues = propertyList.get(propertyName);\r
55             Iterator<String> iterator = propertyValues.values().iterator();\r
56             String valueType = iterator.next();\r
57 \r
58             while (iterator.hasNext()){\r
59                 if (valueType.equals(NEMOConstants.range)) {\r
60                     errorInfo = "The property should just has one range value.";\r
61                     return errorInfo;\r
62                 }\r
63                 else if (valueType.equals(NEMOConstants.string)){\r
64                     if (!iterator.next().equals(NEMOConstants.string)){\r
65                         return "The property " + propertyValues.get(iterator.next()) + " should be string.";\r
66                     }\r
67                 }\r
68                 else if (valueType.equals(NEMOConstants.integer)){\r
69                     if (!iterator.next().equals(NEMOConstants.integer)){\r
70                         return "The property " + propertyValues.get(iterator.next()) + " should be int.";\r
71                     }\r
72                 }\r
73             }\r
74         }\r
75         return errorInfo;\r
76     }\r
77 \r
78     private String createConnection(UserId userId, String connectionname, String connectiontype, List<String> endnodes, LinkedHashMap<String, LinkedHashMap<String,String>> propertyList){\r
79         String errorInfo = null;\r
80         ConnectionBuilder connectionBuilder = new ConnectionBuilder();\r
81         Connection connection1 = null;\r
82         if (tenantManage.getObjectId(userId,connectionname)!=null){\r
83             ConnectionId connectionId = new ConnectionId(tenantManage.getObjectId(userId,connectionname));\r
84             if (tenantManage.getConnection(userId).containsKey(connectionId)){\r
85                 connection1 = tenantManage.getConnection(userId).get(connectionId);\r
86             }\r
87             else if (tenantManage.getConnectionDataStore(userId).containsKey(connectionId)){\r
88                 connection1 = tenantManage.getConnectionDataStore(userId).get(connectionId);\r
89             }\r
90         }\r
91 \r
92         if (connection1==null){\r
93             ConnectionId connectionId = new ConnectionId(UUID.randomUUID().toString());\r
94             connectionBuilder.setKey(new ConnectionKey(connectionId))\r
95                              .setConnectionId(connectionId);\r
96         }\r
97         else {\r
98             connectionBuilder.setKey(connection1.getKey())\r
99                              .setConnectionId(connection1.getConnectionId());\r
100         }\r
101 \r
102         connectionBuilder.setConnectionName(new ConnectionName(connectionname))\r
103                          .setConnectionType(new ConnectionType(connectiontype));\r
104 \r
105         if (!endnodes.isEmpty()){\r
106             List<EndNode> endNodeList = new ArrayList<EndNode>();\r
107             for (String nodeName : endnodes){\r
108                 if (tenantManage.getObjectId(userId,nodeName)!=null){\r
109                     Long order = 0L;\r
110                     NodeId nodeId = new NodeId(tenantManage.getObjectId(userId,nodeName));\r
111                     EndNodeBuilder endNodeBuilder = new EndNodeBuilder();\r
112                     endNodeBuilder.setKey(new EndNodeKey(nodeId))\r
113                                   .setNodeId(nodeId)\r
114                                   .setOrder(order);\r
115                     order++;\r
116                     endNodeList.add(endNodeBuilder.build());\r
117                 }\r
118                 else {\r
119                     return "The end node " + nodeName + " is not exist.";\r
120                 }\r
121             }\r
122             connectionBuilder.setEndNode(endNodeList);\r
123         }\r
124 \r
125         if (!propertyList.isEmpty() && errorInfo==null){\r
126             PropertyBuilder propertyBuilder = new PropertyBuilder();\r
127             List<Property> connectionproperty = new ArrayList<Property>();\r
128             for (String propertyname : propertyList.keySet()){\r
129                 propertyBuilder.setKey(new PropertyKey(new PropertyName(propertyname)));\r
130                 propertyBuilder.setPropertyName(new PropertyName(propertyname));\r
131 \r
132                 PropertyValuesBuilder propertyValuesBuilder = new PropertyValuesBuilder();\r
133                 LinkedHashMap<String, String> valuetype = propertyList.get(propertyname);\r
134                 List<IntValue> intValueList = new ArrayList<IntValue>();\r
135                 List<StringValue> stringValueList = new ArrayList<StringValue>();\r
136                 RangeValue Rangevalue = null;\r
137                 int order = 0;\r
138                 for (String value : valuetype.keySet()){\r
139                     if (valuetype.get(value).equals(NEMOConstants.string)){\r
140                         StringValueBuilder stringValueBuilder = new StringValueBuilder();\r
141                         stringValueBuilder.setKey(new StringValueKey((long)order,value));\r
142                         stringValueBuilder.setValue(value);\r
143                         stringValueBuilder.setOrder((long)order);\r
144                         stringValueList.add(stringValueBuilder.build());\r
145                     }\r
146                     if (valuetype.get(value).equals(NEMOConstants.integer)){\r
147                         IntValueBuilder intValueBuilder = new IntValueBuilder();\r
148                         intValueBuilder.setKey(new IntValueKey((long)order,Long.parseLong(value)));\r
149                         intValueBuilder.setValue(Long.parseLong(value));\r
150                         intValueBuilder.setOrder((long)order);\r
151                         intValueList.add(intValueBuilder.build());\r
152                     }\r
153                     if (valuetype.get(value).equals(NEMOConstants.range)){\r
154                         String[] rangevalue = new String[2];\r
155                         rangevalue = value.split(",");\r
156                         RangeValueBuilder rangeValueBuilder = new RangeValueBuilder();\r
157                         if (Long.parseLong(rangevalue[0])<Long.parseLong(rangevalue[1])){\r
158                             rangeValueBuilder.setMin(Long.parseLong(rangevalue[0]));\r
159                             rangeValueBuilder.setMax(Long.parseLong(rangevalue[1]));\r
160                         }\r
161                         else{\r
162                             rangeValueBuilder.setMin(Long.parseLong(rangevalue[1]));\r
163                             rangeValueBuilder.setMax(Long.parseLong(rangevalue[0]));\r
164                         }\r
165                         Rangevalue = rangeValueBuilder.build();\r
166                         propertyValuesBuilder.setRangeValue(Rangevalue);\r
167                     }\r
168                     order++;\r
169                 }\r
170                 if (intValueList.isEmpty()){\r
171                     intValueList = null;\r
172                     propertyValuesBuilder.setIntValue(intValueList);\r
173                 }\r
174                 if (stringValueList.isEmpty()){\r
175                     stringValueList = null;\r
176                     propertyValuesBuilder.setStringValue(stringValueList);\r
177                 }\r
178                 propertyValuesBuilder.setIntValue(intValueList).setStringValue(stringValueList).setRangeValue(Rangevalue);\r
179                 propertyBuilder.setPropertyValues(propertyValuesBuilder.build());\r
180                 connectionproperty.add(propertyBuilder.build());\r
181             }\r
182             connectionBuilder.setProperty(connectionproperty);\r
183         }\r
184         this.connection = connectionBuilder.build();\r
185         return errorInfo;\r
186     }\r
187 }\r