2 * Copyright 2016 ZTE Corporation.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.openo.commontosca.catalog.model.wrapper;
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
22 import org.openo.commontosca.catalog.common.ToolUtil;
23 import org.openo.commontosca.catalog.db.entity.NodeTemplateData;
24 import org.openo.commontosca.catalog.db.entity.PackageData;
25 import org.openo.commontosca.catalog.db.entity.ServiceTemplateData;
26 import org.openo.commontosca.catalog.db.entity.ServiceTemplateMappingData;
27 import org.openo.commontosca.catalog.db.exception.CatalogResourceException;
28 import org.openo.commontosca.catalog.db.resource.TemplateManager;
29 import org.openo.commontosca.catalog.entity.EnumOperationalState;
30 import org.openo.commontosca.catalog.model.common.TemplateDataHelper;
31 import org.openo.commontosca.catalog.model.entity.InputParameter;
32 import org.openo.commontosca.catalog.model.entity.NfvTemplate;
33 import org.openo.commontosca.catalog.model.entity.NodeTemplate;
34 import org.openo.commontosca.catalog.model.entity.Parameters;
35 import org.openo.commontosca.catalog.model.entity.QueryRawDataCondition;
36 import org.openo.commontosca.catalog.model.entity.ServiceTemplate;
37 import org.openo.commontosca.catalog.model.entity.ServiceTemplateOperation;
38 import org.openo.commontosca.catalog.model.entity.ServiceTemplateRawData;
39 import org.openo.commontosca.catalog.model.entity.SubstitutionMapping;
40 import org.openo.commontosca.catalog.resources.CatalogBadRequestException;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
45 public class ServiceTemplateWrapper {
46 private static ServiceTemplateWrapper instance;
47 private static final Logger logger = LoggerFactory.getLogger(ServiceTemplateWrapper.class);
50 * get service template wrapper instance.
51 * @return ServiceTemplateWrapper instance
53 public static ServiceTemplateWrapper getInstance() {
54 if (instance == null) {
55 instance = new ServiceTemplateWrapper();
61 * get service template by id.
62 * @param serviceTemplateId service template id
63 * @return service template
64 * @throws CatalogResourceException e1
66 public ServiceTemplate getServiceTemplateById(String serviceTemplateId)
67 throws CatalogResourceException {
68 logger.info("getServiceTemplateById. serviceTemplateId = " + serviceTemplateId);
70 List<ServiceTemplateData> stdList =
71 TemplateManager.getInstance().queryServiceTemplateById(serviceTemplateId);
72 if (stdList == null || stdList.isEmpty()) {
73 throw new CatalogResourceException("Can't find this servcie template");
76 return TemplateDataHelper.convert2ServiceTemplate(stdList.get(0));
81 * get service templates.
82 * @param status usage status
83 * @param deletionPending package's deletionPending
84 * @return service template list
85 * @throws CatalogResourceException e
87 public ServiceTemplate[] getServiceTemplates(EnumOperationalState status, boolean deletionPending)
88 throws CatalogResourceException {
89 PackageData pd = new PackageData();
91 pd.setOperationalState(status.toString());
93 pd.setDeletionPending(String.valueOf(deletionPending));
95 List<ServiceTemplateData> stdList =
96 TemplateManager.getInstance().queryServiceTemplateByCsarPackageInfo(pd);
98 return TemplateDataHelper.convert2ServiceTemplates(stdList);
103 * get nesting service template.
104 * @param nodeTypeIds nodeType id list
105 * @return service template list
106 * @throws CatalogResourceException e
108 public ServiceTemplate[] getNestingServiceTemplate(String[] nodeTypeIds)
109 throws CatalogResourceException {
110 ServiceTemplate[] sts = new ServiceTemplate[nodeTypeIds.length];
111 for (int i = 0; i < nodeTypeIds.length; i++) {
112 SubstitutionMapping stm = getSubstitutionMappingsByNodeTypeId(nodeTypeIds[i]);
117 sts[i] = getServiceTemplate(stm, nodeTypeIds[i]);
123 private ServiceTemplate getServiceTemplate(SubstitutionMapping stm, String nodeTypeId) {
125 return getServiceTemplateById(stm.getServiceTemplateId());
126 } catch (CatalogResourceException e) {
127 logger.warn("Get Nesting ServiceTemplate Failed. NodeTypeIds = " + nodeTypeId, e);
133 * get substitution mappings by nodeTpe id.
134 * @param nodeTypeId nodeType id
135 * @return SubstitutionMapping
136 * @throws CatalogResourceException e
138 private SubstitutionMapping getSubstitutionMappingsByNodeTypeId(String nodeTypeId)
139 throws CatalogResourceException {
140 List<ServiceTemplateMappingData> stmDataList =
141 TemplateManager.getInstance().queryServiceTemplateMapping(nodeTypeId, null);
142 if (stmDataList == null || stmDataList.isEmpty()) {
146 return TemplateDataHelper.convert2SubstitutionMapping(stmDataList.get(0));
151 * get service template raw data.
152 * @param queryCondition query raw data condition
153 * @return ServiceTemplateRawData
154 * @throws CatalogResourceException e1
155 * @throws CatalogBadRequestException e2
157 public ServiceTemplateRawData getServiceTemplateRawData(QueryRawDataCondition queryCondition)
158 throws CatalogResourceException, CatalogBadRequestException {
159 ServiceTemplateData std = getServiceTemplateDataByCsarId(queryCondition.getCsarId());
160 return new ServiceTemplateRawData(std.getRowData());
164 * get service template data by package id.
165 * @param csarId package id
166 * @return ServiceTemplateData
167 * @throws CatalogBadRequestException e1
168 * @throws CatalogResourceException e2
170 private ServiceTemplateData getServiceTemplateDataByCsarId(String csarId)
171 throws CatalogBadRequestException, CatalogResourceException {
172 if (ToolUtil.isTrimedEmptyString(csarId)) {
173 throw new CatalogBadRequestException("CsarId is null.");
175 PackageData pd = new PackageData();
176 pd.setCsarId(csarId);
178 List<ServiceTemplateData> stdList =
179 TemplateManager.getInstance().queryServiceTemplateByCsarPackageInfo(pd);
181 if (stdList == null || stdList.isEmpty()) {
182 throw new CatalogResourceException("Can't find this servcie template");
185 return stdList.get(0);
189 * get service template by package id.
190 * @param packageId package id
191 * @return service template data
192 * @throws CatalogBadRequestException e1
193 * @throws CatalogResourceException e2
195 public ServiceTemplate getServiceTemplateByCsarId(String packageId)
196 throws CatalogBadRequestException, CatalogResourceException {
197 ServiceTemplateData std = getServiceTemplateDataByCsarId(packageId);
198 ServiceTemplate st = TemplateDataHelper.convert2ServiceTemplate(std);
203 * get service template parameters.
204 * @param serviceTemplateId service template id
205 * @return service template parameters
206 * @throws CatalogResourceException e
208 public Parameters getServiceTemplateParameters(String serviceTemplateId)
209 throws CatalogResourceException {
210 ServiceTemplate st = getServiceTemplateById(serviceTemplateId);
211 return new Parameters(st.getInputs(), st.getOutputs());
215 * get template operation.
216 * @param serviceTemplateId service template id
217 * @return service template operations
219 public ServiceTemplateOperation[] getTemplateOperations(String serviceTemplateId)
220 throws CatalogResourceException {
221 ServiceTemplate st = getServiceTemplateById(serviceTemplateId);
223 if (st.getOperations() == null) {
224 return new ServiceTemplateOperation[0];
226 return st.getOperations();
230 * get parameters by operation name.
231 * @param serviceTemplateId service template id
232 * @param operationName operation name
233 * @return InputParameter list
234 * @throws CatalogResourceException e
236 public InputParameter[] getParametersByOperationName(String serviceTemplateId,
237 String operationName) throws CatalogResourceException {
238 if (ToolUtil.isTrimedEmptyString(operationName)) {
239 throw new CatalogResourceException("Operation Name is null.");
242 ServiceTemplateOperation[] operations = getTemplateOperations(serviceTemplateId);
243 for (int i = 0; i < operations.length; i++) {
244 if (operationName.equals(operations[i].getName())) {
245 return operations[i].getInputs();
249 throw new CatalogResourceException("Can't find this operation.");
254 * get nodeTemplate by id.
255 * @param serviceTemplateId service template id
256 * @param nodeTemplateId node template id
257 * @return NodeTemplate
258 * @throws CatalogResourceException e1
260 public NodeTemplate getNodeTemplateById(String serviceTemplateId, String nodeTemplateId)
261 throws CatalogResourceException {
262 List<NodeTemplateData> ntdList =
263 TemplateManager.getInstance().queryNodeTemplateById(serviceTemplateId, nodeTemplateId);
265 if (ntdList == null || ntdList.isEmpty()) {
266 throw new CatalogResourceException("Can't find this node template.");
269 return TemplateDataHelper.convert2NodeTemplate(ntdList.get(0));
273 * get node templates.
274 * @param serviceTemplateId service template id
275 * @param types type list
276 * @return NodeTemplate list
277 * @throws CatalogResourceException e
279 public NodeTemplate[] getNodeTemplates(String serviceTemplateId, String[] types)
280 throws CatalogResourceException {
281 List<NodeTemplateData> ntdList =
282 TemplateManager.getInstance().queryNodeTemplateBySeriviceTemplateId(serviceTemplateId);
283 if (ntdList == null || ntdList.isEmpty()) {
284 return new NodeTemplate[0];
287 if (ToolUtil.isTrimedEmptyArray(types)) { // return all node templates
288 return TemplateDataHelper.convert2NodeTemplates(ntdList);
291 List<NodeTemplate> ntList = new ArrayList<>();
292 for (String type : types) {
293 if (!ToolUtil.isTrimedEmptyString(type)) {
294 List<NodeTemplateData> typedNtdList = filterNodeTemplateDataListByType(ntdList, type);
295 ntList.addAll(Arrays.asList(TemplateDataHelper.convert2NodeTemplates(typedNtdList)));
298 return ntList.toArray(new NodeTemplate[0]);
302 * filter node template data list by type.
303 * @param ntdList nodeTemplate list
304 * @param type node type
305 * @return node template data list
307 private List<NodeTemplateData> filterNodeTemplateDataListByType(List<NodeTemplateData> ntdList,
309 List<NodeTemplateData> retList = new ArrayList<>();
310 for (NodeTemplateData ntd : ntdList) {
311 if (type.equals(ntd.getType())) {
321 * @param serviceTemlateId service template id
322 * @return NfvTemplate
323 * @throws CatalogResourceException e
325 public NfvTemplate getNfvTemplate(String serviceTemlateId) throws CatalogResourceException {
326 NodeTemplate[] nts = getNodeTemplates(serviceTemlateId, null);
328 List<NodeTemplate> vduNodes = new ArrayList<>();
329 List<NodeTemplate> networkNodes = new ArrayList<>();
330 List<NodeTemplate> vnfcNodes = new ArrayList<>();
331 List<NodeTemplate> vnfNodes = new ArrayList<>();
332 for (NodeTemplate nt : nts) {
333 if (isVduNode(nt.getType())) {
338 if (isNetworkNode(nt.getType())) {
339 networkNodes.add(nt);
343 if (isVnfcNode(nt.getType())) {
348 if (isVnfNode(nt.getType())) {
354 return new NfvTemplate(vduNodes, networkNodes, vnfcNodes, vnfNodes);
357 private boolean isVnfNode(String type) {
358 return type.toUpperCase().indexOf(".VNF") > 0;
361 private boolean isVnfcNode(String type) {
362 return type.toUpperCase().indexOf(".VNFC") > 0;
365 private boolean isNetworkNode(String type) {
366 return type.toUpperCase().indexOf(".VL") > 0 || type.toUpperCase().indexOf(".VIRTUALLINK") > 0;
369 private boolean isVduNode(String type) {
370 return type.toUpperCase().indexOf(".VDU") > 0;