Adding nemo engine.
[nemo.git] / nemo-impl / src / main / java / org / opendaylight / nemo / user / advancedquery / QueryDefinitionCheck.java
1 /*\r
2  * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.\r
3  *\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
7  */\r
8 package org.opendaylight.nemo.user.advancedquery;\r
9 \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
23 \r
24 import org.slf4j.Logger;\r
25 import org.slf4j.LoggerFactory;\r
26 \r
27 import java.util.List;\r
28 \r
29 /**\r
30  * Created by z00293636 on 2015/9/16.\r
31  */\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
36 \r
37     public QueryDefinitionCheck(DataBroker dataBroker)\r
38     {\r
39         this.dataBroker = dataBroker;\r
40         queryConditionDefinitions = null;\r
41     }\r
42 \r
43     public String CheckQueryDefinition(QueryCondition queryCondition)\r
44     {\r
45         fetchQueryConditionDefinitionList();\r
46         Boolean conditionexist = false;\r
47         String errorInfo = null;\r
48         if (queryConditionDefinitions != null)\r
49         {\r
50             for (QueryConditionDefinition queryConditionDefinition : queryConditionDefinitions)\r
51             {\r
52                 if (queryConditionDefinition.getQueryConditionName().equals(queryCondition.getQueryConditionName()))\r
53                 {\r
54                     conditionexist = true;\r
55 \r
56                     if (queryCondition.getQueryIntentType() != null)\r
57                     {\r
58                         if (queryConditionDefinition.getQueryIntentType() != null)\r
59                         {\r
60                             if (queryCondition.getQueryIntentType().getIntValue() != queryConditionDefinition.getQueryIntentType().getIntValue())\r
61                             {\r
62                                 errorInfo = "The query target is not consistent with the definition.";\r
63                                 break;\r
64                             }\r
65                         }\r
66                         else\r
67                         {\r
68                             errorInfo = "There are no query intent type defined in this query condition.";\r
69                             break;\r
70                         }\r
71                     }\r
72 \r
73                     if (queryCondition.getQueryConditionTargetValue() != null)\r
74                     {\r
75                         if (queryConditionDefinition.getQueryConditionValueType() != null)\r
76                         {\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
79                             {\r
80                                 errorInfo =  "The property value type should be string";\r
81                                 break;\r
82                             }\r
83                             else if (queryConditionValueType.getIntValue() == 1 && !(queryCondition.getQueryConditionTargetValue().getIntValue() != null && queryCondition.getQueryConditionTargetValue().getStringValue() == null && queryCondition.getQueryConditionTargetValue().getRangeValue() == null))\r
84                             {\r
85                                 errorInfo =  "The property value type should be integer";\r
86                                 break;\r
87                             }\r
88                             else if (queryConditionValueType.getIntValue() == 2 && !(queryCondition.getQueryConditionTargetValue().getIntValue() == null && queryCondition.getQueryConditionTargetValue().getStringValue() == null && queryCondition.getQueryConditionTargetValue().getRangeValue() != null))\r
89                             {\r
90                                 errorInfo =  "The property value type should be range";\r
91                                 break;\r
92                             }\r
93                         }\r
94                         else\r
95                         {\r
96                             errorInfo = "There are no query condition value type defined in query condition.";\r
97                             break;\r
98                         }\r
99                     }\r
100 \r
101                     if (queryCondition.getQueryConditionMatchPattern() != null)\r
102                     {\r
103                         if (queryConditionDefinition.getQueryConditionMatchPatterns() != null)\r
104                         {\r
105                             if (queryConditionDefinition.getQueryConditionMatchPatterns().getQueryConditionMatchPattern() != null)\r
106                             {\r
107                                 List<QueryConditionMatchPatterns.QueryConditionMatchPattern> queryConditionMatchPatternList= queryConditionDefinition.getQueryConditionMatchPatterns().getQueryConditionMatchPattern();\r
108                                if (!queryConditionMatchPatternList.contains(queryCondition.getQueryConditionMatchPattern()))\r
109                                 {\r
110                                     errorInfo = "The query condition match type pattern is not included in the definitions.";\r
111                                     break;\r
112                                 }\r
113                             }\r
114                             else\r
115                             {\r
116                                 errorInfo = "There are no query condition list defined in query condition.";\r
117                             }\r
118                         }\r
119                         else\r
120                         {\r
121                             errorInfo = "There are no query condition match patterns defined in query condition.";\r
122                         }\r
123                     }\r
124                 }\r
125             }\r
126         }\r
127 \r
128         if (!conditionexist)\r
129         {\r
130             errorInfo = "The condition has not been defined.";\r
131         }\r
132         return errorInfo;\r
133     }\r
134 \r
135     private void fetchQueryConditionDefinitionList()\r
136     {\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
140             @Override\r
141             public void onSuccess(Optional<QueryConditionDefinitions> result)\r
142             {\r
143                 setQueryConditionDefinitions(result.get().getQueryConditionDefinition());\r
144                 return;\r
145             }\r
146 \r
147             @Override\r
148             public void onFailure(Throwable t)\r
149             {\r
150                 LOG.error("Can not read query definition information.", t);\r
151 \r
152                 return;\r
153             }\r
154         });\r
155         return ;\r
156     }\r
157 \r
158     private void setQueryConditionDefinitions(List<QueryConditionDefinition> queryConditionDefinitions)\r
159     {\r
160         this.queryConditionDefinitions = queryConditionDefinitions;\r
161     }\r
162  }\r