2 * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.
\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
8 package org.opendaylight.nemo.user.vnspacemanager.languagestyle.updateintentlang;
\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
25 * Created by z00293636 on 2015/11/5.
\r
27 public class UpdateConnectionLang {
\r
28 private TenantManage tenantManage;
\r
29 private Connection connection;
\r
30 private UpdateConnection updateConnection;
\r
32 public UpdateConnectionLang(DataBroker dataBroker, TenantManage tenantManage){
\r
33 this.tenantManage = tenantManage;
\r
34 updateConnection = new UpdateConnection(dataBroker,tenantManage);
\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
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
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
58 while (iterator.hasNext()){
\r
59 if (valueType.equals(NEMOConstants.range)) {
\r
60 errorInfo = "The property should just has one range value.";
\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
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
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
87 else if (tenantManage.getConnectionDataStore(userId).containsKey(connectionId)){
\r
88 connection1 = tenantManage.getConnectionDataStore(userId).get(connectionId);
\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
98 connectionBuilder.setKey(connection1.getKey())
\r
99 .setConnectionId(connection1.getConnectionId());
\r
102 connectionBuilder.setConnectionName(new ConnectionName(connectionname))
\r
103 .setConnectionType(new ConnectionType(connectiontype));
\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
110 NodeId nodeId = new NodeId(tenantManage.getObjectId(userId,nodeName));
\r
111 EndNodeBuilder endNodeBuilder = new EndNodeBuilder();
\r
112 endNodeBuilder.setKey(new EndNodeKey(nodeId))
\r
116 endNodeList.add(endNodeBuilder.build());
\r
119 return "The end node " + nodeName + " is not exist.";
\r
122 connectionBuilder.setEndNode(endNodeList);
\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
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
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
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
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
162 rangeValueBuilder.setMin(Long.parseLong(rangevalue[1]));
\r
163 rangeValueBuilder.setMax(Long.parseLong(rangevalue[0]));
\r
165 Rangevalue = rangeValueBuilder.build();
\r
166 propertyValuesBuilder.setRangeValue(Rangevalue);
\r
170 if (intValueList.isEmpty()){
\r
171 intValueList = null;
\r
172 propertyValuesBuilder.setIntValue(intValueList);
\r
174 if (stringValueList.isEmpty()){
\r
175 stringValueList = null;
\r
176 propertyValuesBuilder.setStringValue(stringValueList);
\r
178 propertyValuesBuilder.setIntValue(intValueList).setStringValue(stringValueList).setRangeValue(Rangevalue);
\r
179 propertyBuilder.setPropertyValues(propertyValuesBuilder.build());
\r
180 connectionproperty.add(propertyBuilder.build());
\r
182 connectionBuilder.setProperty(connectionproperty);
\r
184 this.connection = connectionBuilder.build();
\r