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.syntaxcheck;
\r
10 import com.google.common.base.Optional;
\r
11 import com.google.common.util.concurrent.FutureCallback;
\r
12 import com.google.common.util.concurrent.Futures;
\r
13 import com.google.common.util.concurrent.ListenableFuture;
\r
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
\r
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.ParameterName;
\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;
\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.ActionDefinitions;
\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.ConditionParameterDefinitions;
\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.definitions.ActionDefinition;
\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.action.instance.ParameterValues;
\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.ConditionSegment;
\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.instance.condition.segment.ConditionParameterTargetValue;
\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.parameter.definitions.ConditionParameterDefinition;
\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.condition.parameter.definitions.condition.parameter.definition.ParameterMatchPatterns;
\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.operation.rev151010.operation.instance.Action;
\r
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
\r
28 import org.slf4j.Logger;
\r
29 import org.slf4j.LoggerFactory;
\r
31 import java.util.List;
\r
34 * Created by z00293636 on 2015/9/2.
\r
36 public class OperationDefinitionCheck {
\r
38 private DataBroker dataBroker;
\r
39 private List<ActionDefinition> actionDefinitionList;
\r
40 private List<ConditionParameterDefinition> conditionParameterDefinitionList;
\r
41 private static final Logger LOG = LoggerFactory.getLogger(OperationDefinitionCheck.class);
\r
42 public OperationDefinitionCheck(DataBroker dataBroker)
\r
44 this.dataBroker = dataBroker;
\r
45 actionDefinitionList = null;
\r
46 conditionParameterDefinitionList = null;
\r
49 public String CheckDefinition(Operation operation)
\r
51 fetchActionDefinitions();
\r
52 fetchConditionParaDefinitions();
\r
53 String errorInfo = null;
\r
55 if (operation.getAction() != null )
\r
57 errorInfo = checkAction(operation);
\r
59 if (errorInfo == null && operation.getConditionSegment() != null)
\r
61 errorInfo = checkCondition(operation);
\r
66 private String checkAction(Operation operation)
\r
68 String errorInfo = null;
\r
69 Boolean actionHasDefine = false;
\r
71 if ( actionDefinitionList == null)
\r
73 errorInfo = "There are no actions has been defined in the data store.";
\r
76 for (Action action : operation.getAction()) {
\r
77 for (ActionDefinition actionDefinition : actionDefinitionList) {
\r
78 if (actionDefinition.getActionName().equals(action.getActionName())) {
\r
79 actionHasDefine = true;
\r
81 ParameterValues parameterValues = action.getParameterValues();
\r
82 ActionDefinition.ParameterValueType parameterValueType = actionDefinition.getParameterValueType();
\r
84 if (parameterValues != null && parameterValueType != null)
\r
86 if (parameterValueType.getIntValue() == 0 && !(parameterValues.getIntValue() == null && parameterValues.getStringValue() != null && parameterValues.getRangeValue() == null)) {
\r
87 errorInfo = "The value type of" + action.getActionName().toString() + "should be string.";
\r
90 if (parameterValueType.getIntValue() == 1 && !(parameterValues.getIntValue() != null && parameterValues.getStringValue() == null && parameterValues.getRangeValue() == null)) {
\r
91 errorInfo = "The value type of" + action.getActionName().toString() + "should be integer.";
\r
94 if (parameterValueType.getIntValue() == 2 && !(parameterValues.getIntValue() == null && parameterValues.getStringValue() == null && parameterValues.getRangeValue() != null)) {
\r
95 errorInfo = "The value type of" + action.getActionName().toString() + "should be range.";
\r
103 if (!actionHasDefine) {
\r
104 errorInfo = "The action type has not been defined.";
\r
110 private String checkCondition(Operation operation)
\r
112 String errorInfo = null;
\r
113 Boolean conditionHasDefined = false;
\r
115 if (conditionParameterDefinitionList != null)
\r
117 if (operation.getConditionSegment() != null)
\r
119 for (ConditionSegment conditionSegment :operation.getConditionSegment())
\r
121 for (ConditionParameterDefinition conditionParameterDefinition : conditionParameterDefinitionList)
\r
123 if (conditionParameterDefinition.getParameterName().getValue().equals(conditionSegment.getConditionParameterName().getValue()))
\r
125 conditionHasDefined = true;
\r
126 if (conditionSegment.getConditionParameterMatchPattern() != null)
\r
128 if (conditionParameterDefinition.getParameterMatchPatterns() != null)
\r
130 List<ParameterMatchPatterns.ParameterMatchPattern> conditionParameterMatchPatterns = conditionParameterDefinition.getParameterMatchPatterns().getParameterMatchPattern();
\r
131 if (conditionParameterMatchPatterns != null)
\r
133 Boolean matchpatternexist = false;
\r
134 for (ParameterMatchPatterns.ParameterMatchPattern parameterMatchPattern : conditionParameterMatchPatterns)
\r
136 if (parameterMatchPattern.getIntValue() == conditionSegment.getConditionParameterMatchPattern().getIntValue())
\r
138 matchpatternexist = true;
\r
142 if (!matchpatternexist)
\r
144 errorInfo = "The match pattern has not defined in the condition.";
\r
149 errorInfo = "There are no match pattern in match pattrn list.";
\r
155 errorInfo = "No match patterns have been defined in data store.";
\r
159 if (conditionSegment.getConditionParameterTargetValue() != null)
\r
161 if (conditionParameterDefinition.getParameterValueType() != null)
\r
163 ConditionParameterTargetValue conditionParameterTargetValue = conditionSegment.getConditionParameterTargetValue();
\r
164 ConditionParameterDefinition.ParameterValueType parameterValueType = conditionParameterDefinition.getParameterValueType();
\r
166 if (parameterValueType.getIntValue() == 0 && !(conditionParameterTargetValue.getIntValue() == null && conditionParameterTargetValue.getStringValue() != null && conditionParameterTargetValue.getRangeValue() == null)) {
\r
167 errorInfo = "The value type of" + conditionSegment.getConditionParameterName().toString() + "should be string.";
\r
170 if (parameterValueType.getIntValue() == 1 && !(conditionParameterTargetValue.getIntValue() != null && conditionParameterTargetValue.getStringValue() == null && conditionParameterTargetValue.getRangeValue() == null)) {
\r
171 errorInfo = "The value type of" + conditionSegment.getConditionParameterName().toString() + "should be integer.";
\r
174 if (parameterValueType.getIntValue() == 2 && !(conditionParameterTargetValue.getIntValue() == null && conditionParameterTargetValue.getStringValue() == null && conditionParameterTargetValue.getRangeValue() != null)) {
\r
175 errorInfo = "The value type of" + conditionSegment.getConditionParameterName().toString() + "should be range.";
\r
187 if (!conditionHasDefined)
\r
189 errorInfo = "This condition has not been defined in data store.";
\r
194 private void fetchActionDefinitions()
\r
196 InstanceIdentifier<ActionDefinitions> actiondefinitionId = InstanceIdentifier.builder(ActionDefinitions.class).build();
\r
197 ListenableFuture<Optional<ActionDefinitions>> actiondefinitionFuture = dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION, actiondefinitionId);
\r
198 Futures.addCallback(actiondefinitionFuture, new FutureCallback<Optional<ActionDefinitions>>() {
\r
200 public void onSuccess(Optional<ActionDefinitions> result) {
\r
201 setActionDefinitionList( result.get().getActionDefinition());
\r
206 public void onFailure(Throwable t) {
\r
207 LOG.error("Can not read action definition information.", t);
\r
215 private void fetchConditionParaDefinitions()
\r
217 InstanceIdentifier<ConditionParameterDefinitions> conditionparadefinitionId = InstanceIdentifier.builder(ConditionParameterDefinitions.class).build();
\r
218 ListenableFuture<Optional<ConditionParameterDefinitions>> conditionparadefinitionFuture = dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION, conditionparadefinitionId);
\r
219 Futures.addCallback(conditionparadefinitionFuture, new FutureCallback<Optional<ConditionParameterDefinitions>>() {
\r
221 public void onSuccess(Optional<ConditionParameterDefinitions> result) {
\r
222 setConditionParameterDefinitionList( result.get().getConditionParameterDefinition());
\r
227 public void onFailure(Throwable t) {
\r
228 LOG.error("Can not read condition parameter definition information.", t);
\r
235 private void setActionDefinitionList(List<ActionDefinition> actionDefinitionList)
\r
237 this.actionDefinitionList = actionDefinitionList;
\r
240 private void setConditionParameterDefinitionList(List<ConditionParameterDefinition> conditionParameterDefinitionList)
\r
242 this.conditionParameterDefinitionList = conditionParameterDefinitionList;
\r