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.advancedquery;
\r
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.QueryConditionDefinitions;
\r
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.advanced.nemo.query.input.QueryCondition;
\r
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.query.condition.definitions.QueryConditionDefinition;
\r
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.query.condition.definitions.query.condition.definition.QueryConditionMatchPatterns;
\r
14 import com.google.common.base.Optional;
\r
15 import com.google.common.util.concurrent.FutureCallback;
\r
16 import com.google.common.util.concurrent.Futures;
\r
17 import com.google.common.util.concurrent.ListenableFuture;
\r
18 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
\r
19 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
\r
20 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
\r
21 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
\r
22 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
\r
24 import org.slf4j.Logger;
\r
25 import org.slf4j.LoggerFactory;
\r
27 import java.util.List;
\r
30 * Created by z00293636 on 2015/9/16.
\r
32 public class QueryDefinitionCheck {
\r
33 private DataBroker dataBroker;
\r
34 private List<QueryConditionDefinition> queryConditionDefinitions;
\r
35 private static final Logger LOG = LoggerFactory.getLogger(QueryDefinitionCheck.class);
\r
37 public QueryDefinitionCheck(DataBroker dataBroker)
\r
39 this.dataBroker = dataBroker;
\r
40 queryConditionDefinitions = null;
\r
43 public String CheckQueryDefinition(QueryCondition queryCondition)
\r
45 fetchQueryConditionDefinitionList();
\r
46 Boolean conditionexist = false;
\r
47 String errorInfo = null;
\r
48 if (queryConditionDefinitions != null)
\r
50 for (QueryConditionDefinition queryConditionDefinition : queryConditionDefinitions)
\r
52 if (queryConditionDefinition.getQueryConditionName().equals(queryCondition.getQueryConditionName()))
\r
54 conditionexist = true;
\r
56 if (queryCondition.getQueryIntentType() != null)
\r
58 if (queryConditionDefinition.getQueryIntentType() != null)
\r
60 if (queryCondition.getQueryIntentType().getIntValue() != queryConditionDefinition.getQueryIntentType().getIntValue())
\r
62 errorInfo = "The query target is not consistent with the definition.";
\r
68 errorInfo = "There are no query intent type defined in this query condition.";
\r
73 if (queryCondition.getQueryConditionTargetValue() != null)
\r
75 if (queryConditionDefinition.getQueryConditionValueType() != null)
\r
77 QueryConditionDefinition.QueryConditionValueType queryConditionValueType = queryConditionDefinition.getQueryConditionValueType();
\r
78 if (queryConditionValueType.getIntValue() == 0 && !(queryCondition.getQueryConditionTargetValue().getIntValue() == null && queryCondition.getQueryConditionTargetValue().getStringValue() != null && queryCondition.getQueryConditionTargetValue().getRangeValue() == null))
\r
80 errorInfo = "The property value type should be string";
\r
83 else if (queryConditionValueType.getIntValue() == 1 && !(queryCondition.getQueryConditionTargetValue().getIntValue() != null && queryCondition.getQueryConditionTargetValue().getStringValue() == null && queryCondition.getQueryConditionTargetValue().getRangeValue() == null))
\r
85 errorInfo = "The property value type should be integer";
\r
88 else if (queryConditionValueType.getIntValue() == 2 && !(queryCondition.getQueryConditionTargetValue().getIntValue() == null && queryCondition.getQueryConditionTargetValue().getStringValue() == null && queryCondition.getQueryConditionTargetValue().getRangeValue() != null))
\r
90 errorInfo = "The property value type should be range";
\r
96 errorInfo = "There are no query condition value type defined in query condition.";
\r
101 if (queryCondition.getQueryConditionMatchPattern() != null)
\r
103 if (queryConditionDefinition.getQueryConditionMatchPatterns() != null)
\r
105 if (queryConditionDefinition.getQueryConditionMatchPatterns().getQueryConditionMatchPattern() != null)
\r
107 List<QueryConditionMatchPatterns.QueryConditionMatchPattern> queryConditionMatchPatternList= queryConditionDefinition.getQueryConditionMatchPatterns().getQueryConditionMatchPattern();
\r
108 if (!queryConditionMatchPatternList.contains(queryCondition.getQueryConditionMatchPattern()))
\r
110 errorInfo = "The query condition match type pattern is not included in the definitions.";
\r
116 errorInfo = "There are no query condition list defined in query condition.";
\r
121 errorInfo = "There are no query condition match patterns defined in query condition.";
\r
128 if (!conditionexist)
\r
130 errorInfo = "The condition has not been defined.";
\r
135 private void fetchQueryConditionDefinitionList()
\r
137 InstanceIdentifier<QueryConditionDefinitions> queryCondiDefInsIdentifier = InstanceIdentifier.builder(QueryConditionDefinitions.class).build();
\r
138 ListenableFuture<Optional<QueryConditionDefinitions>> querydefinitionFuture = dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION, queryCondiDefInsIdentifier);
\r
139 Futures.addCallback(querydefinitionFuture, new FutureCallback<Optional<QueryConditionDefinitions>>() {
\r
141 public void onSuccess(Optional<QueryConditionDefinitions> result)
\r
143 setQueryConditionDefinitions(result.get().getQueryConditionDefinition());
\r
148 public void onFailure(Throwable t)
\r
150 LOG.error("Can not read query definition information.", t);
\r
158 private void setQueryConditionDefinitions(List<QueryConditionDefinition> queryConditionDefinitions)
\r
160 this.queryConditionDefinitions = queryConditionDefinitions;
\r