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.common;
 
  18 import org.openo.commontosca.catalog.common.ToolUtil;
 
  19 import org.openo.commontosca.catalog.db.entity.NodeTemplateData;
 
  20 import org.openo.commontosca.catalog.db.entity.ServiceTemplateData;
 
  21 import org.openo.commontosca.catalog.db.entity.ServiceTemplateMappingData;
 
  22 import org.openo.commontosca.catalog.db.entity.TemplateData;
 
  23 import org.openo.commontosca.catalog.db.exception.CatalogResourceException;
 
  24 import org.openo.commontosca.catalog.entity.response.CsarFileUriResponse;
 
  25 import org.openo.commontosca.catalog.model.entity.NodeTemplate;
 
  26 import org.openo.commontosca.catalog.model.entity.Parameters;
 
  27 import org.openo.commontosca.catalog.model.entity.RelationShip;
 
  28 import org.openo.commontosca.catalog.model.entity.ServiceTemplate;
 
  29 import org.openo.commontosca.catalog.model.entity.ServiceTemplateOperation;
 
  30 import org.openo.commontosca.catalog.model.entity.SubstitutionMapping;
 
  31 import org.openo.commontosca.catalog.wrapper.PackageWrapper;
 
  33 import com.google.gson.Gson;
 
  34 import com.google.gson.JsonElement;
 
  35 import com.google.gson.JsonObject;
 
  36 import com.google.gson.JsonPrimitive;
 
  38 import java.util.ArrayList;
 
  39 import java.util.Arrays;
 
  40 import java.util.HashMap;
 
  41 import java.util.Iterator;
 
  42 import java.util.List;
 
  44 import java.util.Map.Entry;
 
  46 public class TemplateDataHelper {
 
  49    * convert to template data.
 
  50    * @param st ServiceTemplate
 
  51    * @param ntList NodeTemplate list
 
  52    * @return TemplateData
 
  54   public static TemplateData convert2TemplateData(ServiceTemplate st, String rawData,
 
  55       List<NodeTemplate> ntList) {
 
  56     TemplateData td = new TemplateData();
 
  57     td.setServiceTemplate(convert2ServiceTemplateData(st, rawData));
 
  58     td.setNodeTemplates(convert2NodeTemplateDataList(ntList, st.getServiceTemplateId()));
 
  63    * convert to service template data.
 
  64    * @param st ServiceTemplate
 
  65    * @return ServiceTemplateData
 
  67   private static ServiceTemplateData convert2ServiceTemplateData(ServiceTemplate st,
 
  69     ServiceTemplateData std = new ServiceTemplateData();
 
  70     std.setServiceTemplateId(st.getServiceTemplateId());
 
  71     std.setTemplateName(st.getTemplateName());
 
  72     std.setVendor(st.getVendor());
 
  73     std.setVersion(st.getVersion());
 
  74     std.setCsarId(st.getCsarid());
 
  75     std.setType(st.getType());
 
  76     std.setDownloadUri(st.getDownloadUri());
 
  77     Parameters parameters = new Parameters(st.getInputs(), st.getOutputs());
 
  78     std.setInputs(ToolUtil.toJson(parameters));
 
  79     std.setOperations(ToolUtil.toJson(st.getOperations()));
 
  80     std.setRowData(rawData);
 
  85    * convert to nodeTemplate data list.
 
  86    * @param ntList NodeTemplate list
 
  87    * @param serviceTemplateId service template id
 
  88    * @return NodeTemplateData list
 
  90   private static ArrayList<NodeTemplateData> convert2NodeTemplateDataList(List<NodeTemplate> ntList,
 
  91       String serviceTemplateId) {
 
  92     ArrayList<NodeTemplateData> ntdList = new ArrayList<>();
 
  93     for (NodeTemplate nt : ntList) {
 
  94       ntdList.add(convert2NodeTemplateData(nt, serviceTemplateId));
 
 102    * convert to nodeTemplate data.
 
 103    * @param nt NodeTemplate
 
 104    * @param serviceTemplateId service template id
 
 105    * @return NodeTemplateData
 
 107   private static NodeTemplateData convert2NodeTemplateData(NodeTemplate nt,
 
 108       String serviceTemplateId) {
 
 109     NodeTemplateData ntd = new NodeTemplateData();
 
 111     ntd.setNodeTemplateId(nt.getId());
 
 112     ntd.setName(nt.getName());
 
 113     ntd.setType(nt.getType());
 
 114     ntd.setServiceTemplateId(serviceTemplateId);
 
 115     ntd.setProperties(ToolUtil.toJson(nt.getProperties()));
 
 116     ntd.setRelationShips(ToolUtil.toJson(nt.getRelationShips()));
 
 123    * convert to service templates.
 
 124    * @param stdList ServiceTemplateData list
 
 125    * @return ServiceTemplate list
 
 126    * @throws CatalogResourceException 
 
 128   public static ServiceTemplate[] convert2ServiceTemplates(List<ServiceTemplateData> stdList) throws CatalogResourceException {
 
 129     List<ServiceTemplate> stList = new ArrayList<>();
 
 130     for (ServiceTemplateData std : stdList) {
 
 131       stList.add(convert2ServiceTemplate(std));
 
 134     return stList.toArray(new ServiceTemplate[0]);
 
 138    * covert to service template.
 
 139    * @param std ServiceTemplateData
 
 140    * @return ServiceTemplate
 
 141    * @throws CatalogResourceException 
 
 143   public static ServiceTemplate convert2ServiceTemplate(ServiceTemplateData std) throws CatalogResourceException {
 
 144     Parameters parameters = ToolUtil.fromJson(std.getInputs(), Parameters.class);
 
 145     ServiceTemplateOperation[] operations =
 
 146         ToolUtil.fromJson(std.getOperations(), ServiceTemplateOperation[].class);
 
 147     String downloadUri = buildSTDownloadUri(std.getCsarId(), std.getDownloadUri());
 
 149     return new ServiceTemplate(std.getServiceTemplateId(), std.getTemplateName(), std.getVendor(),
 
 150         std.getVersion(), std.getCsarId(), std.getType(), downloadUri,
 
 151         parameters.getInputs(), parameters.getOutputs(), operations);
 
 154   private static String buildSTDownloadUri(String packageId, String stFileName)
 
 155       throws CatalogResourceException {
 
 156     CsarFileUriResponse stDownloadUri =
 
 157         PackageWrapper.getInstance().getCsarFileDownloadUri(packageId, stFileName);
 
 158     return stDownloadUri.getDownloadUri();
 
 162    * covert to nodeTemplates.
 
 163    * @param ntdList NodeTemplateData list
 
 164    * @return NodeTemplate list
 
 166   public static NodeTemplate[] convert2NodeTemplates(List<NodeTemplateData> ntdList) {
 
 167     List<NodeTemplate> ntList = new ArrayList<>();
 
 168     for (NodeTemplateData ntd : ntdList) {
 
 169       ntList.add(convert2NodeTemplate(ntd));
 
 171     return ntList.toArray(new NodeTemplate[0]);
 
 175    * covert to nodeTemplate.
 
 176    * @param ntd NodeTemplateData
 
 177    * @return NodeTemplate
 
 179   public static NodeTemplate convert2NodeTemplate(NodeTemplateData ntd) {
 
 180     List<RelationShip> relationShips = convert2RelationShipList(ntd.getRelationShips());
 
 181     return new NodeTemplate(ntd.getNodeTemplateId(), ntd.getName(), ntd.getType(),
 
 182         convert2Property(ntd.getProperties()), relationShips);
 
 186    * covert to relationship list.
 
 187    * @param sRelationShips relationships
 
 188    * @return RelationShip list
 
 190   private static List<RelationShip> convert2RelationShipList(String srelationShips) {
 
 191     RelationShip[] relationShips = ToolUtil.fromJson(srelationShips, RelationShip[].class);
 
 192     return Arrays.asList(relationShips);
 
 196    * convert to propterty.
 
 197    * @param properties properties to covert 
 
 200   private static Map<String, Object> convert2Property(String properties) {
 
 201     JsonObject jsonObject = new Gson().fromJson(properties, JsonObject.class);
 
 202     return parseMapValue(jsonObject);
 
 205   private static Map<String, Object> parseMapValue(JsonObject jsonObject) {
 
 206     Map<String, Object> map = new HashMap<>();
 
 208     Iterator<Entry<String, JsonElement>> iterator = jsonObject.entrySet().iterator();
 
 209     while (iterator.hasNext()) {
 
 210       Entry<String, JsonElement> next = iterator.next();
 
 211       if (next.getValue() instanceof JsonPrimitive) {
 
 212         map.put(next.getKey(), next.getValue().getAsString());
 
 216       if (next.getValue() instanceof JsonObject) {
 
 217         map.put(next.getKey(), parseMapValue((JsonObject) next.getValue()));
 
 226    * covert to template mapping data.
 
 227    * @param stm data to convert
 
 228    * @return ServiceTemplateMappingData
 
 230   public static ServiceTemplateMappingData convert2TemplateMappingData(SubstitutionMapping stm) {
 
 231     ServiceTemplateMappingData stmd = new ServiceTemplateMappingData();
 
 233     stmd.setMappingId(ToolUtil.generateId());
 
 234     stmd.setServiceTemplateId(stm.getServiceTemplateId());
 
 235     stmd.setNodeType(stm.getNodeType());
 
 236     stmd.setRequirements(ToolUtil.toJson(stm.getRequirements()));
 
 237     stmd.setCapabilities(ToolUtil.toJson(stm.getCapabilities()));
 
 243    * convert to substitution mapping.
 
 244    * @param stmData data to covert
 
 245    * @return SubstitutionMapping
 
 247   public static SubstitutionMapping convert2SubstitutionMapping(
 
 248       ServiceTemplateMappingData stmData) {
 
 249     return new SubstitutionMapping(stmData.getServiceTemplateId(), stmData.getNodeType());