039d64b4a6647598a148aed025326b52aad4d7c1
[vfc/nfvo/catalog.git] /
1 /**\r
2  * Copyright 2016 [ZTE] and others.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 package org.openo.commontosca.catalog.model.wrapper;\r
17 \r
18 import java.util.ArrayList;\r
19 import java.util.Arrays;\r
20 import java.util.List;\r
21 \r
22 import org.openo.commontosca.catalog.model.entity.ServiceTemplateOperation;\r
23 import org.openo.commontosca.catalog.resources.CatalogBadRequestException;\r
24 import org.openo.commontosca.catalog.common.ToolUtil;\r
25 import org.openo.commontosca.catalog.db.entity.NodeTemplateData;\r
26 import org.openo.commontosca.catalog.db.entity.PackageData;\r
27 import org.openo.commontosca.catalog.db.entity.ServiceTemplateData;\r
28 import org.openo.commontosca.catalog.db.entity.ServiceTemplateMappingData;\r
29 import org.openo.commontosca.catalog.db.exception.CatalogResourceException;\r
30 import org.openo.commontosca.catalog.db.resource.TemplateManager;\r
31 import org.openo.commontosca.catalog.model.common.TemplateDataHelper;\r
32 import org.openo.commontosca.catalog.model.entity.InputParameter;\r
33 import org.openo.commontosca.catalog.model.entity.NfvTemplate;\r
34 import org.openo.commontosca.catalog.model.entity.NodeTemplate;\r
35 import org.openo.commontosca.catalog.model.entity.QueryRawDataCondition;\r
36 import org.openo.commontosca.catalog.model.entity.ServiceTemplate;\r
37 import org.openo.commontosca.catalog.model.entity.ServiceTemplateRawData;\r
38 import org.openo.commontosca.catalog.model.entity.SubstitutionMapping;\r
39 import org.slf4j.Logger;\r
40 import org.slf4j.LoggerFactory;\r
41 \r
42 /**\r
43  * \r
44  * @author 10090474\r
45  * \r
46  */\r
47 public class ServiceTemplateWrapper {\r
48     private static ServiceTemplateWrapper instance;\r
49     private static final Logger logger = LoggerFactory.getLogger(ServiceTemplateWrapper.class);\r
50 \r
51     public static ServiceTemplateWrapper getInstance() {\r
52         if (instance == null) {\r
53             instance = new ServiceTemplateWrapper();\r
54         }\r
55         return instance;\r
56     }\r
57 \r
58     /**\r
59      * \r
60      * @param serviceTemplateId\r
61      * @return\r
62      * @throws CatalogResourceException\r
63      */\r
64     public ServiceTemplate getServiceTemplateById(String serviceTemplateId)\r
65             throws CatalogResourceException {\r
66         logger.info("getServiceTemplateById. serviceTemplateId = "\r
67                 + serviceTemplateId);\r
68 \r
69         List<ServiceTemplateData> stdList = TemplateManager.getInstance()\r
70                 .queryServiceTemplateById(serviceTemplateId);\r
71         if (stdList == null || stdList.isEmpty()) {\r
72             throw new CatalogResourceException("Can't find this servcie template");\r
73         }\r
74         \r
75         return TemplateDataHelper.convert2ServiceTemplate(stdList.get(0));\r
76     }\r
77 \r
78 \r
79     /**\r
80      * \r
81      * @param status\r
82      * @param deletionPending\r
83      * @return\r
84      * @throws CatalogResourceException\r
85      */\r
86     public ServiceTemplate[] getServiceTemplates(String status,\r
87             boolean deletionPending) throws CatalogResourceException {\r
88         PackageData pd = new PackageData();\r
89         pd.setUsageState(status);\r
90         pd.setDeletionPending(String.valueOf(deletionPending));\r
91 \r
92         List<ServiceTemplateData> stdList = TemplateManager.getInstance()\r
93                 .queryServiceTemplateByCsarPackageInfo(pd);\r
94 \r
95         return TemplateDataHelper.convert2ServiceTemplates(stdList);\r
96     }\r
97 \r
98 \r
99     /**\r
100      * @param nodeTypeIds\r
101      * @return\r
102      * @throws CatalogResourceException\r
103      */\r
104     public ServiceTemplate[] getNestingServiceTemplate(String[] nodeTypeIds)\r
105             throws CatalogResourceException {\r
106         ServiceTemplate[] sts = new ServiceTemplate[nodeTypeIds.length];\r
107         for (int i = 0; i < nodeTypeIds.length; i++) {\r
108             SubstitutionMapping stm = getSubstitutionMappingsByNodeTypeId(nodeTypeIds[i]);\r
109             if (stm == null) {\r
110                 sts[i] = null;\r
111             } else {\r
112                 sts[i] = getServiceTemplateById(stm.getServiceTemplateId());\r
113             }\r
114         }\r
115 \r
116         return sts;\r
117     }\r
118 \r
119     /**\r
120      * @param nodeTypeId\r
121      * @return\r
122      * @throws CatalogResourceException\r
123      */\r
124     private SubstitutionMapping getSubstitutionMappingsByNodeTypeId(\r
125             String nodeTypeId) throws CatalogResourceException {\r
126         List<ServiceTemplateMappingData> stmDataList = TemplateManager\r
127                 .getInstance().queryServiceTemplateMapping(nodeTypeId, null);\r
128         if (stmDataList == null || stmDataList.isEmpty()) {\r
129             return null;\r
130         }\r
131 \r
132         return TemplateDataHelper.convert2SubstitutionMapping(stmDataList\r
133                 .get(0));\r
134     }\r
135 \r
136 \r
137     /**\r
138      * @param queryCondition\r
139      * @return\r
140      * @throws CatalogResourceException\r
141      * @throws CatalogBadRequestException\r
142      */\r
143     public ServiceTemplateRawData getServiceTemplateRawData(\r
144             QueryRawDataCondition queryCondition)\r
145             throws CatalogResourceException, CatalogBadRequestException {\r
146         if (ToolUtil.isTrimedEmptyString(queryCondition.getCsarId())) {\r
147             throw new CatalogBadRequestException("CsarId is null.");\r
148         }\r
149         PackageData pd = new PackageData();\r
150         pd.setCsarId(queryCondition.getCsarId());\r
151 \r
152         List<ServiceTemplateData> stdList = TemplateManager.getInstance()\r
153                 .queryServiceTemplateByCsarPackageInfo(pd);\r
154 \r
155         if (stdList == null || stdList.isEmpty()) {\r
156             throw new CatalogResourceException(\r
157                     "Can't find this servcie template");\r
158         }\r
159 \r
160         return new ServiceTemplateRawData(stdList.get(0).getRowData());\r
161     }\r
162 \r
163     /**\r
164      * \r
165      * @param serviceTemplateId\r
166      * @return\r
167      * @throws CatalogResourceException\r
168      */\r
169     public InputParameter[] getServiceTemplateParameters(\r
170             String serviceTemplateId) throws CatalogResourceException {\r
171         ServiceTemplate st = getServiceTemplateById(serviceTemplateId);\r
172         return st.getInputs();\r
173     }\r
174 \r
175     /**\r
176      * \r
177      * @param serviceTemplateId\r
178      * @return\r
179      */\r
180     public ServiceTemplateOperation[] getTemplateOperations(\r
181             String serviceTemplateId) throws CatalogResourceException {\r
182         ServiceTemplate st = getServiceTemplateById(serviceTemplateId);\r
183 \r
184         if (st.getOperations() == null) {\r
185             return new ServiceTemplateOperation[0];\r
186         }\r
187         return st.getOperations();\r
188     }\r
189 \r
190     /**\r
191      * @param serviceTemplateId\r
192      * @param operationName\r
193      * @return\r
194      * @throws CatalogResourceException\r
195      */\r
196     public InputParameter[] getParametersByOperationName(\r
197             String serviceTemplateId, String operationName)\r
198             throws CatalogResourceException {\r
199         if (ToolUtil.isTrimedEmptyString(operationName)) {\r
200             throw new CatalogResourceException("Operation Name is null.");\r
201         }\r
202 \r
203         ServiceTemplateOperation[] operations = getTemplateOperations(serviceTemplateId);\r
204         for (int i = 0; i < operations.length; i++) {\r
205             if (operationName.equals(operations[i].getName())) {\r
206                 return operations[i].getInputs();\r
207             }\r
208         }\r
209 \r
210         throw new CatalogResourceException("Can't find this operation.");\r
211     }\r
212 \r
213 \r
214     /**\r
215      * @param serviceTemplateId\r
216      * @param nodeTemplateId\r
217      * @return\r
218      * @throws CatalogResourceException\r
219      */\r
220     public NodeTemplate getNodeTemplateById(String serviceTemplateId,\r
221             String nodeTemplateId) throws CatalogResourceException {\r
222         List<NodeTemplateData> ntdList = TemplateManager.getInstance()\r
223                 .queryNodeTemplateById(serviceTemplateId, nodeTemplateId);\r
224 \r
225         if (ntdList == null || ntdList.isEmpty()) {\r
226             throw new CatalogResourceException("Can't find this node template.");\r
227         }\r
228 \r
229         return TemplateDataHelper.convert2NodeTemplate(ntdList.get(0));\r
230     }\r
231 \r
232     /**\r
233      * @param serviceTemplateId\r
234      * @param types\r
235      * @return\r
236      * @throws CatalogResourceException\r
237      */\r
238     public NodeTemplate[] getNodeTemplates(String serviceTemplateId,\r
239             String[] types) throws CatalogResourceException {\r
240         List<NodeTemplateData> ntdList = TemplateManager.getInstance()\r
241                 .queryNodeTemplateBySeriviceTemplateId(serviceTemplateId);\r
242         if (ntdList == null || ntdList.isEmpty()) {\r
243             return new NodeTemplate[0];\r
244         }\r
245 \r
246         if (ToolUtil.isTrimedEmptyArray(types)) { // return all node templates\r
247             return TemplateDataHelper.convert2NodeTemplates(ntdList);\r
248         }\r
249 \r
250         List<NodeTemplate> ntList = new ArrayList<>();\r
251         for (String type : types) {\r
252             if (!ToolUtil.isTrimedEmptyString(type)) {\r
253                 List<NodeTemplateData> typedNtdList = filterNodeTemplateDataListByType(\r
254                         ntdList, type);\r
255                 ntList.addAll(Arrays\r
256 .asList(TemplateDataHelper\r
257                         .convert2NodeTemplates(typedNtdList)));\r
258             }\r
259         }\r
260         return ntList.toArray(new NodeTemplate[0]);\r
261     }\r
262 \r
263     /**\r
264      * @param ntdList\r
265      * @param type\r
266      * @return\r
267      */\r
268     private List<NodeTemplateData> filterNodeTemplateDataListByType(\r
269             List<NodeTemplateData> ntdList, String type) {\r
270         List<NodeTemplateData> retList = new ArrayList<>();\r
271         for (NodeTemplateData ntd : ntdList) {\r
272             if (type.equals(ntd.getType())) {\r
273                 retList.add(ntd);\r
274             }\r
275         }\r
276         return retList;\r
277     }\r
278 \r
279 \r
280     /**\r
281      * @param serviceTemlateId\r
282      * @return\r
283      * @throws CatalogResourceException\r
284      */\r
285     public NfvTemplate getNfvTemplate(String serviceTemlateId)\r
286             throws CatalogResourceException {\r
287         NodeTemplate[] nts = getNodeTemplates(serviceTemlateId, null);\r
288 \r
289         List<NodeTemplate> vduNodes = new ArrayList<>();\r
290         List<NodeTemplate> networkNodes = new ArrayList<>();\r
291         List<NodeTemplate> vnfcNodes = new ArrayList<>();\r
292         List<NodeTemplate> vnfNodes = new ArrayList<>();\r
293         for (NodeTemplate nt : nts) {\r
294             if (isVduNode(nt.getType())) {\r
295                 vduNodes.add(nt);\r
296                 continue;\r
297             }\r
298 \r
299             if (isNetworkNode(nt.getType())) {\r
300                 networkNodes.add(nt);\r
301                 continue;\r
302             }\r
303             \r
304             if (isVnfcNode(nt.getType())) {\r
305                 vnfcNodes.add(nt);\r
306                 continue;\r
307             }\r
308             \r
309             if (isVnfNode(nt.getType())) {\r
310                 vnfNodes.add(nt);\r
311                 continue;\r
312             }\r
313         }\r
314         \r
315         return new NfvTemplate(vduNodes, networkNodes, vnfcNodes, vnfNodes);\r
316     }\r
317 \r
318     /**\r
319      * @param type\r
320      * @return\r
321      */\r
322     private boolean isVnfNode(String type) {\r
323         return type.toUpperCase().indexOf(".VNF") > 0;\r
324     }\r
325 \r
326     /**\r
327      * @param type\r
328      * @return\r
329      */\r
330     private boolean isVnfcNode(String type) {\r
331         return type.toUpperCase().indexOf(".VNFC") > 0;\r
332     }\r
333 \r
334     /**\r
335      * @param type\r
336      * @return\r
337      */\r
338     private boolean isNetworkNode(String type) {\r
339         return type.toUpperCase().indexOf(".VL") > 0\r
340                 || type.toUpperCase().indexOf(".VIRTUALLINK") > 0;\r
341     }\r
342 \r
343     /**\r
344      * @param type\r
345      * @return\r
346      */\r
347     private boolean isVduNode(String type) {\r
348         return type.toUpperCase().indexOf(".VDU") > 0;\r
349     }\r
350 \r
351 }\r