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;