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