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.languagestyle.NEMOParse.NEMOparser;
\r
14 import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateNode;
\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;
\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Node;
\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.NodeBuilder;
\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.NodeKey;
\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;
\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.*;
\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.PropertyValuesBuilder;
\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.*;
\r
27 * Created by z00293636 on 2015/10/31.
\r
29 public class UpdateNodeLang {
\r
30 private TenantManage tenantManage;
\r
31 private UpdateNode updateNode;
\r
34 public UpdateNodeLang(DataBroker dataBroker, TenantManage tenantManage){
\r
35 this.tenantManage = tenantManage;
\r
36 updateNode = new UpdateNode(dataBroker,tenantManage);
\r
39 public String NodeHandling(UserId userId,String nodename, String nodetype, List<String> subnodes, LinkedHashMap<String, LinkedHashMap<String,String>> propertyList){
\r
40 String errorInfo = null;
\r
41 if (nodetype.equals(NEMOConstants.host)&&!subnodes.isEmpty()){
\r
42 errorInfo = "the node "+nodename+ " is a " + NEMOConstants.host +", it could not contain other nodes.";
\r
45 if (!propertyList.isEmpty()){
\r
46 errorInfo = checkProperty(propertyList);
\r
48 if (errorInfo==null){
\r
49 errorInfo = createNode(userId, nodename, nodetype, subnodes, propertyList);
\r
50 if (errorInfo == null){
\r
51 return updateNode.NodeHandling(userId,this.node);
\r
57 private String checkProperty(LinkedHashMap<String, LinkedHashMap<String,String>> propertyList){
\r
58 String errorInfo = null;
\r
59 for (String propertyName : propertyList.keySet()) {
\r
60 LinkedHashMap<String, String> propertyValues = propertyList.get(propertyName);
\r
61 Iterator<String> iterator = propertyValues.values().iterator();
\r
62 String valueType = iterator.next();
\r
64 while (iterator.hasNext()) {
\r
65 if (valueType.equals(NEMOConstants.range)) {
\r
66 errorInfo = "The property should just has one range value.";
\r
69 else if (valueType.equals(NEMOConstants.string)){
\r
70 if (!iterator.next().equals(NEMOConstants.string)){
\r
71 return "The property " + propertyValues.get(iterator.next()) + " should be string.";
\r
74 else if (valueType.equals(NEMOConstants.integer)){
\r
75 if (!iterator.next().equals(NEMOConstants.integer)){
\r
76 return "The property " + propertyValues.get(iterator.next()) + " should be int.";
\r
84 private String createNode(UserId userId, String nodename, String nodetype, List<String> subnodes, LinkedHashMap<String, LinkedHashMap<String,String>> propertyList){
\r
85 String errorInfo = null;
\r
86 tenantManage.fetchVNSpace(userId);
\r
87 User user =tenantManage.getUser();
\r
88 List<Node> nodeList = new ArrayList<Node>();
\r
89 if (user.getObjects()!=null)
\r
91 if (user.getObjects().getNode()!=null)
\r
93 nodeList = user.getObjects().getNode();
\r
96 NodeBuilder nodeBuilder = new NodeBuilder();
\r
97 Boolean NodeExist = false;
\r
98 if (!nodeList.isEmpty())
\r
100 for (Node node1:nodeList)
\r
102 if (node1.getNodeName().getValue().equals(nodename))
\r
105 nodeBuilder.setKey(node1.getKey());
\r
106 nodeBuilder.setNodeId(node1.getNodeId());
\r
112 NodeId nodeId = new NodeId(UUID.randomUUID().toString());
\r
113 nodeBuilder.setKey(new NodeKey(nodeId));
\r
114 nodeBuilder.setNodeId(nodeId);
\r
117 nodeBuilder.setNodeName(new NodeName(nodename));
\r
118 nodeBuilder.setNodeType(new NodeType(nodetype));
\r
120 List<SubNode> subNodeList = new ArrayList<SubNode>();
\r
121 Boolean subnodeexist = false;
\r
122 if (errorInfo==null && !subnodes.isEmpty())
\r
124 for (String subnodename : subnodes)
\r
127 if (!nodeList.isEmpty())
\r
129 for (Node node : nodeList)
\r
131 if (node.getNodeName().getValue().equals(subnodename))
\r
133 subnodeexist = true;
\r
134 SubNodeBuilder subNodeBuilder = new SubNodeBuilder();
\r
135 subNodeBuilder.setKey(new SubNodeKey(node.getNodeId()));
\r
136 subNodeBuilder.setNodeId(node.getNodeId());
\r
137 subNodeBuilder.setOrder((long)order);
\r
138 subNodeList.add(subNodeBuilder.build());
\r
143 errorInfo = "The subnode is not exist.";
\r
149 errorInfo = "The subnode is not exist.";
\r
154 nodeBuilder.setSubNode(subNodeList);
\r
157 if (errorInfo==null && !propertyList.isEmpty())
\r
159 PropertyBuilder propertyBuilder = new PropertyBuilder();
\r
160 List<Property> nodeproperty = new ArrayList<Property>();
\r
161 for (String propertyname : propertyList.keySet())
\r
163 propertyBuilder.setKey(new PropertyKey(new PropertyName(propertyname)));
\r
164 propertyBuilder.setPropertyName(new PropertyName(propertyname));
\r
166 PropertyValuesBuilder propertyValuesBuilder = new PropertyValuesBuilder();
\r
167 LinkedHashMap<String, String> valuetype = propertyList.get(propertyname);
\r
168 List<IntValue> intValueList = new ArrayList<IntValue>();
\r
169 List<StringValue> stringValueList = new ArrayList<StringValue>();
\r
170 RangeValue RangeValue = null;
\r
173 for (String value : valuetype.keySet())
\r
175 // if ((valuetype.get(value).equals(NEMOConstants.string))||valuetype.get(value).equals(NEMOConstants.ipv4addr)||valuetype.get(value).equals(NEMOConstants.ipv4pref)
\r
176 // ||valuetype.get(value).equals(NEMOConstants.ethaddr))
\r
177 if (valuetype.get(value).equals(NEMOConstants.string))
\r
179 StringValueBuilder stringValueBuilder = new StringValueBuilder();
\r
180 stringValueBuilder.setKey(new StringValueKey((long)order,value));
\r
181 stringValueBuilder.setValue(value);
\r
182 stringValueBuilder.setOrder((long)order);
\r
183 stringValueList.add(stringValueBuilder.build());
\r
185 if (valuetype.get(value).equals(NEMOConstants.integer))
\r
187 IntValueBuilder intValueBuilder = new IntValueBuilder();
\r
188 intValueBuilder.setKey(new IntValueKey((long)order,Long.parseLong(value)));
\r
189 intValueBuilder.setValue(Long.parseLong(value));
\r
190 intValueBuilder.setOrder((long)order);
\r
191 intValueList.add(intValueBuilder.build());
\r
193 if (valuetype.get(value).equals(NEMOConstants.range))
\r
195 String[] rangevalue = new String[2];
\r
196 rangevalue = value.split(",");
\r
197 RangeValueBuilder rangeValueBuilder = new RangeValueBuilder();
\r
198 if (Long.parseLong(rangevalue[0])<Long.parseLong(rangevalue[1]))
\r
200 rangeValueBuilder.setMin(Long.parseLong(rangevalue[0]));
\r
201 rangeValueBuilder.setMax(Long.parseLong(rangevalue[1]));
\r
205 rangeValueBuilder.setMin(Long.parseLong(rangevalue[1]));
\r
206 rangeValueBuilder.setMax(Long.parseLong(rangevalue[0]));
\r
208 RangeValue = rangeValueBuilder.build();
\r
209 propertyValuesBuilder.setRangeValue(RangeValue);
\r
213 if (intValueList.isEmpty())
\r
215 intValueList = null;
\r
216 propertyValuesBuilder.setIntValue(intValueList);
\r
218 if (stringValueList.isEmpty())
\r
220 stringValueList = null;
\r
221 propertyValuesBuilder.setStringValue(stringValueList);
\r
224 propertyValuesBuilder.setIntValue(intValueList).setStringValue(stringValueList).setRangeValue(RangeValue);
\r
225 propertyBuilder.setPropertyValues(propertyValuesBuilder.build());
\r
226 nodeproperty.add(propertyBuilder.build());
\r
228 nodeBuilder.setProperty(nodeproperty);
\r
230 this.node = nodeBuilder.build();
\r