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.GetDefinitions;
\r
14 import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateTemplateDefinition;
\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHost;
\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;
\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalHostId;
\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalHostName;
\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.definitions.TemplateDefinitionBuilder;
\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.definitions.TemplateDefinitionKey;
\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.EndNode;
\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.EndNodeBuilder;
\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.EndNodeKey;
\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItem;
\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItemBuilder;
\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItemKey;
\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.match.item.instance.MatchItemValueBuilder;
\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.*;
\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.PropertyValuesBuilder;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.property.instance.property.values.*;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.ParameterValuesBuilder;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegment;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegmentBuilder;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegmentKey;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.condition.segment.ConditionParameterTargetValueBuilder;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.ActionBuilder;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.ActionKey;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping.AbstractIntentsBuilder;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping.TemplateParameter;
\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping.TemplateParameterBuilder;
\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping.TemplateParameterKey;
\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents.AbstractObjectsBuilder;
\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents.AbstractOperationsBuilder;
\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents._abstract.objects.*;
\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents._abstract.operations.AbstractOperation;
\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents._abstract.operations.AbstractOperationBuilder;
\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.template.rev151201.template.definition.grouping._abstract.intents._abstract.operations.AbstractOperationKey;
\r
53 * Created by z00293636 on 2015/12/7.
\r
55 public class UpdateTemplateDefinitionLang {
\r
56 private UpdateTemplateDefinition definition;
\r
57 private Map<NodeName, AbstractNode> abstractNodes;
\r
58 private Map<ConnectionName, AbstractConnection> abstractConnections;
\r
59 private Map<FlowName, AbstractFlow> abstractFlows;
\r
60 private Map<OperationName, AbstractOperation> abstractOperations;
\r
61 private GetDefinitions getDefinitions;
\r
63 public UpdateTemplateDefinitionLang(DataBroker dataBroker, TenantManage tenantManage){
\r
64 definition = new UpdateTemplateDefinition(dataBroker,tenantManage);
\r
65 abstractNodes = new HashMap<NodeName, AbstractNode>();
\r
66 abstractConnections = new HashMap<ConnectionName, AbstractConnection>();
\r
67 abstractFlows = new HashMap<FlowName, AbstractFlow>();
\r
68 abstractOperations = new HashMap<OperationName, AbstractOperation>();
\r
69 getDefinitions = new GetDefinitions(dataBroker);
\r
72 public String templateDefinitionLang(UserId userId, String templateName, LinkedHashMap<String, String> parameters){
\r
73 TemplateDefinitionBuilder builder = new TemplateDefinitionBuilder();
\r
74 builder.setKey(new TemplateDefinitionKey(new TemplateName(templateName)))
\r
75 .setTemplateName(new TemplateName(templateName));
\r
77 List<TemplateParameter> templateParameters = new LinkedList<TemplateParameter>();
\r
78 for (String value : parameters.keySet()){
\r
79 TemplateParameterBuilder parameterBuilder = new TemplateParameterBuilder();
\r
80 parameterBuilder.setKey(new TemplateParameterKey(new ParameterName(value)))
\r
81 .setParameterName(new ParameterName(value));
\r
83 if (parameters.get(value).equals(NEMOConstants.string)){
\r
84 parameterBuilder.setParameterValueType(TemplateParameter.ParameterValueType.String);
\r
86 else if (parameters.get(value).equals(NEMOConstants.integer)){
\r
87 parameterBuilder.setParameterValueType(TemplateParameter.ParameterValueType.Int);
\r
89 else if (parameters.get(value).equals(NEMOConstants.range)){
\r
90 parameterBuilder.setParameterValueType(TemplateParameter.ParameterValueType.Range);
\r
92 templateParameters.add(parameterBuilder.build());
\r
94 builder.setTemplateParameter(templateParameters);
\r
96 AbstractIntentsBuilder intentsBuilder = new AbstractIntentsBuilder();
\r
97 AbstractObjectsBuilder objectsBuilder = new AbstractObjectsBuilder();
\r
98 if (!abstractNodes.isEmpty()){
\r
99 List<AbstractNode> abstractNodeList = new LinkedList<AbstractNode>();
\r
100 for (AbstractNode node : abstractNodes.values()){
\r
101 abstractNodeList.add(node);
\r
103 objectsBuilder.setAbstractNode(abstractNodeList);
\r
105 objectsBuilder.setAbstractNode(null);
\r
108 if (!abstractConnections.isEmpty()){
\r
109 List<AbstractConnection> abstractConnectionList = new LinkedList<AbstractConnection>();
\r
110 for (AbstractConnection connection : abstractConnections.values()){
\r
111 abstractConnectionList.add(connection);
\r
113 objectsBuilder.setAbstractConnection(abstractConnectionList);
\r
115 objectsBuilder.setAbstractConnection(null);
\r
118 if (!abstractFlows.isEmpty()){
\r
119 List<AbstractFlow> abstractFlowList = new ArrayList<AbstractFlow>();
\r
120 for (AbstractFlow flow : abstractFlows.values()){
\r
121 abstractFlowList.add(flow);
\r
123 objectsBuilder.setAbstractFlow(abstractFlowList);
\r
125 objectsBuilder.setAbstractFlow(null);
\r
128 AbstractOperationsBuilder operationsBuilder = new AbstractOperationsBuilder();
\r
129 if (!abstractOperations.isEmpty()){
\r
130 List<AbstractOperation> abstractOperationList = new LinkedList<AbstractOperation>();
\r
131 for (AbstractOperation operation : abstractOperations.values()){
\r
132 abstractOperationList.add(operation);
\r
134 operationsBuilder.setAbstractOperation(abstractOperationList);
\r
136 operationsBuilder.setAbstractOperation(null);
\r
139 intentsBuilder.setAbstractObjects(objectsBuilder.build())
\r
140 .setAbstractOperations(operationsBuilder.build());
\r
141 builder.setAbstractIntents(intentsBuilder.build());
\r
143 return definition.checkTemplateDefinition(userId,builder.build());
\r
146 public String createAbstractNode(String name, String type, List<String> subnodes, LinkedHashMap<String, LinkedHashMap<String,String>> propertyList){
\r
147 AbstractNodeBuilder nodeBuilder = new AbstractNodeBuilder();
\r
148 NodeId nodeId = null;
\r
149 if (type.equals(NEMOConstants.host)){
\r
150 Map<PhysicalHostName, PhysicalHost> physicalHostMap = getDefinitions.getPhysicalHost();
\r
151 if (physicalHostMap.containsKey(new PhysicalHostName(name))){
\r
152 PhysicalHostId physicalHostId = physicalHostMap.get(new PhysicalHostName(name)).getHostId();
\r
153 nodeBuilder.setKey(new AbstractNodeKey(new AbstractNodeKey(new NodeId(physicalHostId.getValue()))))
\r
154 .setNodeId(new NodeId(physicalHostId.getValue()));
\r
157 return "The host " + name + " is not exist in physical network.";
\r
161 nodeId = new NodeId(UUID.randomUUID().toString());
\r
164 nodeBuilder.setKey(new AbstractNodeKey(nodeId));
\r
165 nodeBuilder.setNodeId(nodeId);
\r
166 nodeBuilder.setNodeName(new NodeName(name));
\r
167 nodeBuilder.setNodeType(new NodeType(type));
\r
169 if (!subnodes.isEmpty()){
\r
170 if (abstractNodes.isEmpty()){
\r
171 return "There are no nodes.";
\r
174 List<SubNode> subNodeList = new LinkedList<SubNode>();
\r
176 for (String nodeName : subnodes){
\r
177 if (!abstractNodes.containsKey(new NodeName(nodeName))){
\r
178 return "The subnode " + nodeName + " is not exist.";
\r
181 SubNodeBuilder subNodeBuilder = new SubNodeBuilder();
\r
182 subNodeBuilder.setKey(new SubNodeKey(abstractNodes.get(new NodeName(nodeName)).getNodeId()))
\r
183 .setNodeId(abstractNodes.get(new NodeName(nodeName)).getNodeId())
\r
186 subNodeList.add(subNodeBuilder.build());
\r
189 nodeBuilder.setSubNode(subNodeList);
\r
193 if (!propertyList.isEmpty()){
\r
194 List<Property> properties = new LinkedList<Property>();
\r
195 for (String propertyName : propertyList.keySet()){
\r
196 PropertyBuilder builder = new PropertyBuilder();
\r
197 builder.setKey(new PropertyKey(new PropertyName(propertyName)))
\r
198 .setPropertyName(new PropertyName(propertyName));
\r
200 Map<String, String> values = propertyList.get(propertyName);
\r
201 PropertyValuesBuilder valuesBuilder = new PropertyValuesBuilder();
\r
202 List<StringValue> stringValues = new LinkedList<StringValue>();
\r
203 List<IntValue> intValues = new LinkedList<IntValue>();
\r
204 RangeValue rangeValue = null;
\r
206 for (String value : values.keySet()){
\r
207 if (values.get(value).equals(NEMOConstants.string)){
\r
208 StringValueBuilder stringValueBuilder = new StringValueBuilder();
\r
209 stringValueBuilder.setKey(new StringValueKey(order,value))
\r
213 stringValues.add(stringValueBuilder.build());
\r
215 if (values.get(value).equals(NEMOConstants.integer)){
\r
216 IntValueBuilder intValueBuilder = new IntValueBuilder();
\r
217 intValueBuilder.setKey(new IntValueKey(order, Long.parseLong(value)))
\r
219 .setValue(Long.parseLong(value));
\r
221 intValues.add(intValueBuilder.build());
\r
223 if (values.get(value).equals(NEMOConstants.range)){
\r
224 String[] range = value.split(",");
\r
225 RangeValueBuilder rangeValueBuilder = new RangeValueBuilder();
\r
226 if (Long.parseLong(range[0])<Long.parseLong(range[1])){
\r
227 rangeValueBuilder.setMin(Long.parseLong(range[0]));
\r
228 rangeValueBuilder.setMax(Long.parseLong(range[1]));
\r
231 rangeValueBuilder.setMin(Long.parseLong(range[1]));
\r
232 rangeValueBuilder.setMax(Long.parseLong(range[0]));
\r
234 rangeValue = rangeValueBuilder.build();
\r
237 valuesBuilder.setStringValue(stringValues.isEmpty()?null:stringValues)
\r
238 .setIntValue(intValues.isEmpty()?null:intValues)
\r
239 .setRangeValue(rangeValue);
\r
240 builder.setPropertyValues(valuesBuilder.build());
\r
241 properties.add(builder.build());
\r
243 nodeBuilder.setProperty(properties);
\r
245 abstractNodes.put(new NodeName(name),nodeBuilder.build());
\r
249 public String createAbstractConnection(String name, String type, List<String> endnodes, LinkedHashMap<String, LinkedHashMap<String,String>> propertyList){
\r
250 AbstractConnectionBuilder connectionBuilder = new AbstractConnectionBuilder();
\r
251 ConnectionId connectionId = new ConnectionId(UUID.randomUUID().toString());
\r
252 connectionBuilder.setKey(new AbstractConnectionKey(connectionId))
\r
253 .setConnectionId(connectionId)
\r
254 .setConnectionName(new ConnectionName(name))
\r
255 .setConnectionType(new ConnectionType(type));
\r
257 List<EndNode> endNodeList = new LinkedList<EndNode>();
\r
258 if (abstractNodes.isEmpty()){
\r
259 return "There are nodes exist.";
\r
263 for (String endNode : endnodes){
\r
264 if (!abstractNodes.containsKey(new NodeName(endNode))){
\r
265 return "The endnode " + endNode + " is not exit.";
\r
268 EndNodeBuilder endNodeBuilder = new EndNodeBuilder();
\r
269 endNodeBuilder.setKey(new EndNodeKey(abstractNodes.get(new NodeName(endNode)).getNodeId()))
\r
270 .setNodeId(abstractNodes.get(new NodeName(endNode)).getNodeId())
\r
273 endNodeList.add(endNodeBuilder.build());
\r
277 connectionBuilder.setEndNode(endNodeList.isEmpty()?null:endNodeList);
\r
279 if (!propertyList.isEmpty()){
\r
280 List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property> properties = new LinkedList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.Property>();
\r
281 for (String propertyName : propertyList.keySet()){
\r
282 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.PropertyBuilder builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.PropertyBuilder();
\r
283 builder.setKey(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.connection.instance.PropertyKey(new PropertyName(propertyName)))
\r
284 .setPropertyName(new PropertyName(propertyName));
\r
286 Map<String, String> values = propertyList.get(propertyName);
\r
287 PropertyValuesBuilder valuesBuilder = new PropertyValuesBuilder();
\r
288 List<StringValue> stringValues = new LinkedList<StringValue>();
\r
289 List<IntValue> intValues = new LinkedList<IntValue>();
\r
290 RangeValue rangeValue = null;
\r
292 for (String value : values.keySet()){
\r
293 if (values.get(value).equals(NEMOConstants.string)){
\r
294 StringValueBuilder stringValueBuilder = new StringValueBuilder();
\r
295 stringValueBuilder.setKey(new StringValueKey(order,value))
\r
299 stringValues.add(stringValueBuilder.build());
\r
301 if (values.get(value).equals(NEMOConstants.integer)){
\r
302 IntValueBuilder intValueBuilder = new IntValueBuilder();
\r
303 intValueBuilder.setKey(new IntValueKey(order, Long.parseLong(value)))
\r
305 .setValue(Long.parseLong(value));
\r
307 intValues.add(intValueBuilder.build());
\r
309 if (values.get(value).equals(NEMOConstants.range)){
\r
310 String[] range = value.split(",");
\r
311 RangeValueBuilder rangeValueBuilder = new RangeValueBuilder();
\r
312 if (Long.parseLong(range[0])<Long.parseLong(range[1])){
\r
313 rangeValueBuilder.setMin(Long.parseLong(range[0]));
\r
314 rangeValueBuilder.setMax(Long.parseLong(range[1]));
\r
317 rangeValueBuilder.setMin(Long.parseLong(range[1]));
\r
318 rangeValueBuilder.setMax(Long.parseLong(range[0]));
\r
320 rangeValue = rangeValueBuilder.build();
\r
323 valuesBuilder.setStringValue(stringValues.isEmpty()?null:stringValues)
\r
324 .setIntValue(intValues.isEmpty()?null:intValues)
\r
325 .setRangeValue(rangeValue);
\r
326 builder.setPropertyValues(valuesBuilder.build());
\r
327 properties.add(builder.build());
\r
329 connectionBuilder.setProperty(properties);
\r
331 abstractConnections.put(new ConnectionName(name),connectionBuilder.build());
\r
335 public String createAbstractFlow(String name,LinkedHashMap<String,LinkedHashMap<String,String>> matches,LinkedHashMap<String,LinkedHashMap<String,String>> propertyList){
\r
336 AbstractFlowBuilder flowBuilder = new AbstractFlowBuilder();
\r
337 FlowId flowId = new FlowId(UUID.randomUUID().toString());
\r
338 flowBuilder.setKey(new AbstractFlowKey(flowId))
\r
340 .setFlowName(new FlowName(name));
\r
342 List<MatchItem> matchItemList = new LinkedList<MatchItem>();
\r
343 for (String matchName : matches.keySet()){
\r
344 MatchItemBuilder matchItemBuilder = new MatchItemBuilder();
\r
345 matchItemBuilder.setKey(new MatchItemKey(new MatchItemName(matchName)))
\r
346 .setMatchItemName(new MatchItemName(matchName));
\r
348 MatchItemValueBuilder valueBuilder = new MatchItemValueBuilder();
\r
349 Map<String, String> values = matches.get(matchName);
\r
350 for (String value : values.keySet()){
\r
351 if (values.get(value).equals(NEMOConstants.string)){
\r
352 valueBuilder.setStringValue(value);
\r
354 if (values.get(value).equals(NEMOConstants.integer)){
\r
355 valueBuilder.setIntValue(Long.parseLong(value));
\r
357 if (values.get(value).equals(NEMOConstants.range)){
\r
358 String[] range = value.split(",");
\r
359 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.match.item.instance.match.item.value.RangeValueBuilder rangeValueBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.match.item.instance.match.item.value.RangeValueBuilder();
\r
360 rangeValueBuilder.setMax(Long.parseLong(range[0]) > Long.parseLong(range[1]) ? Long.parseLong(range[0]) : Long.parseLong(range[1]));
\r
361 rangeValueBuilder.setMin(Long.parseLong(range[0])<Long.parseLong(range[1])?Long.parseLong(range[0]):Long.parseLong(range[1]));
\r
362 valueBuilder.setRangeValue(rangeValueBuilder.build());
\r
365 matchItemBuilder.setMatchItemValue(valueBuilder.build());
\r
366 matchItemList.add(matchItemBuilder.build());
\r
368 flowBuilder.setMatchItem(matchItemList);
\r
370 //todo check property
\r
372 abstractFlows.put(new FlowName(name), flowBuilder.build());
\r
376 public String createAbstractOperation(String name, String target, String priority, LinkedHashMap<String,LinkedHashMap<String,String>> conditions,LinkedHashMap<String,LinkedHashMap<String,String>>actions){
\r
377 AbstractOperationBuilder operationBuilder = new AbstractOperationBuilder();
\r
378 OperationId operationId = new OperationId(UUID.randomUUID().toString());
\r
379 operationBuilder.setKey(new AbstractOperationKey(operationId))
\r
380 .setOperationId(operationId)
\r
381 .setOperationName(new OperationName(name))
\r
382 .setPriority(Long.parseLong(priority));
\r
383 if (abstractNodes.containsKey(new NodeName(target))){
\r
384 operationBuilder.setTargetObject(abstractNodes.get(new NodeName(target)).getNodeId());
\r
386 else if (abstractConnections.containsKey(new ConnectionName(target))){
\r
387 operationBuilder.setTargetObject(abstractConnections.get(new ConnectionName(target)).getConnectionId());
\r
389 else if (abstractFlows.containsKey(new FlowName(target))){
\r
390 operationBuilder.setTargetObject(abstractFlows.get(new FlowName(target)).getFlowId());
\r
393 if (!conditions.isEmpty()){
\r
394 List<ConditionSegment> conditionSegmentList = new LinkedList<ConditionSegment>();
\r
396 for (String conditionName : conditions.keySet()){
\r
397 String[] condition = conditionName.split(NEMOConstants.comma);
\r
398 ConditionSegmentBuilder conditionSegmentBuilder = new ConditionSegmentBuilder();
\r
399 ConditionSegmentId conditionSegmentId = new ConditionSegmentId(UUID.randomUUID().toString());
\r
400 conditionSegmentBuilder.setKey(new ConditionSegmentKey(conditionSegmentId))
\r
401 .setConditionSegmentId(conditionSegmentId)
\r
403 String preRelationOperator = condition[0];
\r
404 if (preRelationOperator == null){
\r
405 conditionSegmentBuilder.setPrecursorRelationOperator(ConditionSegment.PrecursorRelationOperator.None);
\r
407 else if (preRelationOperator.equals(NEMOConstants.not)){
\r
408 conditionSegmentBuilder.setPrecursorRelationOperator(ConditionSegment.PrecursorRelationOperator.Not);
\r
410 else if (preRelationOperator.equals(NEMOConstants.and)){
\r
411 conditionSegmentBuilder.setPrecursorRelationOperator(ConditionSegment.PrecursorRelationOperator.And);
\r
413 else if (preRelationOperator.equals(NEMOConstants.or)){
\r
414 conditionSegmentBuilder.setPrecursorRelationOperator(ConditionSegment.PrecursorRelationOperator.Or);
\r
417 String condtionName = condition[1];
\r
418 conditionSegmentBuilder.setConditionParameterName(new ConditionParameterName(condtionName));
\r
420 String matchPattern = condition[2];
\r
421 if (matchPattern.equals(NEMOConstants.equal)){
\r
422 conditionSegmentBuilder.setConditionParameterMatchPattern(ConditionSegment.ConditionParameterMatchPattern.Equal);
\r
424 else if (matchPattern.equals(NEMOConstants.not_equal)){
\r
425 conditionSegmentBuilder.setConditionParameterMatchPattern(ConditionSegment.ConditionParameterMatchPattern.NotEqual);
\r
427 else if (matchPattern.equals(NEMOConstants.greater_than)){
\r
428 conditionSegmentBuilder.setConditionParameterMatchPattern(ConditionSegment.ConditionParameterMatchPattern.GreaterThan);
\r
430 else if (matchPattern.equals(NEMOConstants.less_than)){
\r
431 conditionSegmentBuilder.setConditionParameterMatchPattern(ConditionSegment.ConditionParameterMatchPattern.LessThan);
\r
433 else if (matchPattern.equals(NEMOConstants.not_less_than)){
\r
434 conditionSegmentBuilder.setConditionParameterMatchPattern(ConditionSegment.ConditionParameterMatchPattern.NotLessThan);
\r
436 else if (matchPattern.equals(NEMOConstants.not_greater_than)){
\r
437 conditionSegmentBuilder.setConditionParameterMatchPattern(ConditionSegment.ConditionParameterMatchPattern.NotGreaterThan);
\r
439 else if (matchPattern.equals(NEMOConstants.between)){
\r
440 conditionSegmentBuilder.setConditionParameterMatchPattern(ConditionSegment.ConditionParameterMatchPattern.Between);
\r
443 Map<String, String> targetValue = conditions.get(conditionName);
\r
444 ConditionParameterTargetValueBuilder valueBuilder = new ConditionParameterTargetValueBuilder();
\r
445 for (String value : targetValue.keySet()){
\r
446 if (targetValue.get(value).equals(NEMOConstants.string)){
\r
447 valueBuilder.setStringValue(value);
\r
449 else if (targetValue.get(value).equals(NEMOConstants.integer)){
\r
450 valueBuilder.setIntValue(Long.parseLong(value));
\r
452 else if (targetValue.get(value).equals(NEMOConstants.range)){
\r
453 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.condition.segment.condition.parameter.target.value.RangeValueBuilder rangeValueBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.condition.segment.condition.parameter.target.value.RangeValueBuilder();
\r
454 String[] values = value.split(NEMOConstants.comma);
\r
455 rangeValueBuilder.setMax(Long.parseLong(values[0])>Long.parseLong(values[1])?Long.parseLong(values[0]):Long.parseLong(values[1]))
\r
456 .setMin(Long.parseLong(values[0])<Long.parseLong(values[1])?Long.parseLong(values[0]):Long.parseLong(values[1]));
\r
457 valueBuilder.setRangeValue(rangeValueBuilder.build());
\r
460 conditionSegmentBuilder.setConditionParameterTargetValue(valueBuilder.build());
\r
462 conditionSegmentList.add(conditionSegmentBuilder.build());
\r
464 operationBuilder.setConditionSegment(conditionSegmentList);
\r
467 if (!actions.isEmpty()){
\r
468 List<Action> actionList = new LinkedList<Action>();
\r
470 for (String actionName : actions.keySet()){
\r
471 ActionBuilder actionBuilder = new ActionBuilder();
\r
472 actionBuilder.setKey(new ActionKey(new ActionName(actionName)))
\r
473 .setActionName(new ActionName(actionName))
\r
476 Map<String, String> parameters = actions.get(actionName);
\r
477 if (parameters!=null){
\r
478 ParameterValuesBuilder parameterValuesBuilder = new ParameterValuesBuilder();
\r
479 Long valueOrder = 0L;
\r
480 List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue> stringValues = new LinkedList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValue>();
\r
481 List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.IntValue> intValues = new LinkedList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.IntValue>();
\r
482 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.RangeValue rangeValue = null;
\r
484 for (String value : parameters.keySet()){
\r
485 if (parameters.get(value).equals(NEMOConstants.string)){
\r
486 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValueBuilder valueBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValueBuilder();
\r
487 valueBuilder.setKey(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.StringValueKey(valueOrder,value))
\r
489 .setOrder(valueOrder);
\r
491 stringValues.add(valueBuilder.build());
\r
493 if (parameters.get(value).equals(NEMOConstants.integer)){
\r
494 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.IntValueBuilder valueBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.IntValueBuilder();
\r
495 valueBuilder.setKey(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.IntValueKey(order,Long.parseLong(value)))
\r
496 .setValue(Long.parseLong(value))
\r
497 .setOrder(valueOrder);
\r
499 intValues.add(valueBuilder.build());
\r
501 if (parameters.get(value).equals(NEMOConstants.range)){
\r
502 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.RangeValueBuilder rangeValueBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.parameter.values.RangeValueBuilder();
\r
503 String[] range = value.split(",");
\r
505 rangeValueBuilder.setMax(Long.parseLong(range[0])>Long.parseLong(range[1])?Long.parseLong(range[0]):Long.parseLong(range[1]));
\r
508 if ((!stringValues.isEmpty()&&intValues.isEmpty()&&rangeValue==null)
\r
509 ||(stringValues.isEmpty()&&!intValues.isEmpty()&&rangeValue==null)
\r
510 ||stringValues.isEmpty()&&intValues.isEmpty()&&rangeValue!=null){
\r
511 parameterValuesBuilder.setStringValue(stringValues.isEmpty()?null:stringValues)
\r
512 .setIntValue(intValues.isEmpty()?null:intValues)
\r
513 .setRangeValue(rangeValue);
\r
514 actionBuilder.setParameterValues(parameterValuesBuilder.build());
\r
517 return "The action values are not consistent.";
\r
520 actionList.add(actionBuilder.build());
\r
522 operationBuilder.setAction(actionList);
\r
524 abstractOperations.put(new OperationName(name),operationBuilder.build());
\r