6863e04991bd4a3321bca4d432ebc1bb7d4efbaf
[sdc.git] / openecomp-be / lib / openecomp-sdc-model-lib / openecomp-sdc-model-core / src / main / java / org / openecomp / sdc / model / impl / AbstractServiceModelDao.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.model.impl;
22
23 import org.openecomp.core.model.dao.ServiceArtifactDaoInter;
24 import org.openecomp.core.model.dao.ServiceTemplateDaoInter;
25 import org.openecomp.core.model.types.ServiceArtifact;
26 import org.openecomp.core.model.types.ServiceElement;
27 import org.openecomp.core.model.types.ServiceTemplate;
28 import org.openecomp.core.utilities.file.FileContentHandler;
29 import org.openecomp.core.utilities.file.FileUtils;
30 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
31 import org.openecomp.sdc.tosca.datatypes.model.Import;
32 import org.openecomp.sdc.tosca.datatypes.model.Old1610ServiceTemplate;
33 import org.openecomp.sdc.tosca.services.yamlutil.ToscaExtensionYamlUtil;
34 import org.openecomp.sdc.versioning.dao.VersionableDao;
35 import org.openecomp.sdc.versioning.dao.types.Version;
36 import sun.misc.IOUtils;
37
38 import java.io.InputStream;
39 import java.util.ArrayList;
40 import java.util.Collection;
41 import java.util.HashMap;
42 import java.util.List;
43 import java.util.Map;
44 import java.util.stream.Collectors;
45
46 public class AbstractServiceModelDao implements VersionableDao {
47
48   protected ServiceTemplateDaoInter templateDao;
49   protected ServiceArtifactDaoInter artifactDao;
50
51   @Override
52   public void registerVersioning(String versionableEntityType) {
53     templateDao.registerVersioning(versionableEntityType);
54     artifactDao.registerVersioning(versionableEntityType);
55   }
56
57   /**
58    * Gets service model.
59    *
60    * @param vspId   the vsp id
61    * @param version the version
62    * @return the service model
63    */
64   public ToscaServiceModel getServiceModel(String vspId, Version version) {
65     if (vspId == null || version == null) {
66       throw new RuntimeException("missing service model key");
67     }
68
69     FileContentHandler artifactFiles = getArtifacts(vspId, version);
70
71     Map<String, org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate> serviceTemplates =
72         getTemplates(vspId,
73             version);
74     String entryDefinitionServiceTemplate = getServiceBase(vspId, version);
75     return new ToscaServiceModel(artifactFiles, serviceTemplates, entryDefinitionServiceTemplate);
76   }
77
78   public void storeExternalArtifact(ServiceArtifact serviceArtifact) {
79     artifactDao.create(serviceArtifact);
80   }
81
82
83   /**
84    * Store service model.
85    *
86    * @param vspId             the vsp id
87    * @param version           the version
88    * @param toscaServiceModel the tosca service model
89    */
90   public void storeServiceModel(String vspId, Version version,
91                                 ToscaServiceModel toscaServiceModel) {
92     ServiceArtifact entityArt;
93
94     for (String fileName : toscaServiceModel.getArtifactFiles().getFileList()) {
95       entityArt = new ServiceArtifact();
96       entityArt.setContentData(
97           FileUtils.toByteArray(toscaServiceModel.getArtifactFiles().getFileContent(fileName)));
98       entityArt.setVspId(vspId);
99       entityArt.setVersion(version);
100       entityArt.setName(fileName);
101
102       artifactDao.create(entityArt);
103     }
104
105     ServiceTemplate entityTmp;
106     String yaml;
107     for (Map.Entry<String, org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate>
108         entryTemplate : toscaServiceModel.getServiceTemplates().entrySet()) {
109       entityTmp = new ServiceTemplate();
110
111       yaml = new ToscaExtensionYamlUtil().objectToYaml(entryTemplate.getValue());
112       entityTmp.setContentData(yaml.getBytes());
113       entityTmp.setVspId(vspId);
114       entityTmp.setVersion(version);
115       entityTmp.setName(entryTemplate.getKey());
116       entityTmp.setBaseName(toscaServiceModel.getEntryDefinitionServiceTemplate());
117
118       templateDao.create(entityTmp);
119     }
120   }
121
122
123   /**
124    * Gets service model info.
125    *
126    * @param vspId   the vsp id
127    * @param version the version
128    * @param name    the name
129    * @return the service model info
130    */
131   public ServiceElement getServiceModelInfo(String vspId, Version version, String name) {
132     ServiceElement element = templateDao.getTemplateInfo(vspId, version, name);
133     if (element != null) {
134       return element;
135     }
136
137     element = artifactDao.getArtifactInfo(vspId, version, name);
138     if (element != null) {
139       return element;
140     }
141     return null;
142   }
143
144   public List<String> getServiceModelContentNames() {
145
146     return null;
147   }
148
149   private String getServiceBase(String vspId, Version version) {
150     return templateDao.getBase(vspId, version);
151   }
152
153   private Map<String, org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate> getTemplates(
154       String vspId,
155       Version version) {
156
157     Collection<ServiceTemplate> templates = templateDao.list(vspId, version);
158     if (templates == null) {
159       return null;
160     }
161     return templates.stream().collect(Collectors.toMap(template -> template.getName(),
162         template -> getServiceTemplate(template.getContent())));
163   }
164
165   private org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate getServiceTemplate(
166       InputStream content) {
167     String serviceTemplateContent = new String(FileUtils.toByteArray(content));
168
169     try{
170       return new ToscaExtensionYamlUtil().yamlToObject(serviceTemplateContent,
171           org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate.class);
172     }catch (Exception e){
173       System.out.println("Found vsp with old-versioned tosca service template");
174       Old1610ServiceTemplate old1610ServiceTemplate =
175           new ToscaExtensionYamlUtil().yamlToObject(serviceTemplateContent,
176               Old1610ServiceTemplate.class);
177
178       return mapOldSTToCurrentST(old1610ServiceTemplate);
179     }
180   }
181
182   private static org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate mapOldSTToCurrentST(Old1610ServiceTemplate oldServiceTemplate){
183     org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate
184         serviceTemplate = new org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate();
185
186     serviceTemplate.setArtifact_types(oldServiceTemplate.getArtifact_types());
187     serviceTemplate.setCapability_types(oldServiceTemplate.getCapability_types());
188     serviceTemplate.setData_types(oldServiceTemplate.getData_types());
189     serviceTemplate.setDescription(oldServiceTemplate.getDescription());
190     serviceTemplate.setGroup_types(oldServiceTemplate.getGroup_types());
191     serviceTemplate.setInterface_types(oldServiceTemplate.getInterface_types());
192     serviceTemplate.setMetadata(oldServiceTemplate.getMetadata());
193     serviceTemplate.setNode_types(oldServiceTemplate.getNode_types());
194     serviceTemplate.setPolicy_types(oldServiceTemplate.getPolicy_types());
195     serviceTemplate.setRelationship_types(oldServiceTemplate.getRelationship_types());
196     serviceTemplate.setTopology_template(oldServiceTemplate.getTopology_template());
197
198     List<Map<String, Import>> imports = new ArrayList<>();
199     for(Map.Entry<String, Import> importEntry : oldServiceTemplate.getImports().entrySet()){
200       Map<String, Import> importMap = new HashMap<>();
201       importMap.put(importEntry.getKey(), importEntry.getValue());
202       imports.add(importMap);
203     }
204     serviceTemplate.setImports(imports);
205
206     return serviceTemplate;
207
208   }
209
210   private FileContentHandler getArtifacts(String vspId, Version version) {
211     Collection<ServiceArtifact> templates = artifactDao.list(vspId, version);
212     if (templates == null) {
213       return null;
214     }
215
216     FileContentHandler fileContentHandler = new FileContentHandler();
217     templates.stream().forEach(
218         serviceArtifact -> fileContentHandler
219             .addFile(serviceArtifact.getName(), serviceArtifact.getContent()));
220
221     return fileContentHandler;
222   }
223 }