Rename packages from openecomp to onap.
[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.logging.api.Logger;
31 import org.openecomp.sdc.logging.api.LoggerFactory;
32 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
33 import org.onap.sdc.tosca.datatypes.model.Import;
34 import org.openecomp.sdc.tosca.datatypes.model.Old1610ServiceTemplate;
35 import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
36 import org.openecomp.sdc.versioning.dao.VersionableDao;
37 import org.openecomp.sdc.versioning.dao.types.Version;
38
39 import java.io.InputStream;
40 import java.util.ArrayList;
41 import java.util.Collection;
42 import java.util.HashMap;
43 import java.util.List;
44 import java.util.Map;
45 import java.util.stream.Collectors;
46
47 public class AbstractServiceModelDao implements VersionableDao {
48
49   protected ServiceTemplateDaoInter templateDao;
50   protected ServiceArtifactDaoInter artifactDao;
51
52   private final Logger log = (Logger) LoggerFactory.getLogger(this.getClass().getName());
53
54   @Override
55   public void registerVersioning(String versionableEntityType) {
56     templateDao.registerVersioning(versionableEntityType);
57     artifactDao.registerVersioning(versionableEntityType);
58   }
59
60   /**
61    * Gets service model.
62    *
63    * @param vspId   the vsp id
64    * @param version the version
65    * @return the service model
66    */
67   public ToscaServiceModel getServiceModel(String vspId, Version version) {
68     if (vspId == null || version == null) {
69       throw new RuntimeException("missing service model key");
70     }
71
72     FileContentHandler artifactFiles = getArtifacts(vspId, version);
73
74     Map<String, org.onap.sdc.tosca.datatypes.model.ServiceTemplate> serviceTemplates =
75         getTemplates(vspId,
76             version);
77     String entryDefinitionServiceTemplate = getServiceBase(vspId, version);
78     return new ToscaServiceModel(artifactFiles, serviceTemplates, entryDefinitionServiceTemplate);
79   }
80
81   public void storeExternalArtifact(ServiceArtifact serviceArtifact) {
82     artifactDao.create(serviceArtifact);
83   }
84
85
86   /**
87    * Store service model.
88    *
89    * @param vspId             the vsp id
90    * @param version           the version
91    * @param toscaServiceModel the tosca service model
92    */
93   public void storeServiceModel(String vspId, Version version,
94                                 ToscaServiceModel toscaServiceModel) {
95     ServiceArtifact entityArt;
96
97     for (String fileName : toscaServiceModel.getArtifactFiles().getFileList()) {
98       entityArt = new ServiceArtifact();
99       entityArt.setContentData(
100           FileUtils.toByteArray(toscaServiceModel.getArtifactFiles().getFileContent(fileName)));
101       entityArt.setVspId(vspId);
102       entityArt.setVersion(version);
103       entityArt.setName(fileName);
104
105       artifactDao.create(entityArt);
106     }
107
108     ServiceTemplate entityTmp;
109     String yaml;
110     for (Map.Entry<String, org.onap.sdc.tosca.datatypes.model.ServiceTemplate>
111         entryTemplate : toscaServiceModel.getServiceTemplates().entrySet()) {
112       entityTmp = new ServiceTemplate();
113
114       yaml = new ToscaExtensionYamlUtil().objectToYaml(entryTemplate.getValue());
115       entityTmp.setContentData(yaml.getBytes());
116       entityTmp.setVspId(vspId);
117       entityTmp.setVersion(version);
118       entityTmp.setName(entryTemplate.getKey());
119       entityTmp.setBaseName(toscaServiceModel.getEntryDefinitionServiceTemplate());
120
121       templateDao.create(entityTmp);
122     }
123   }
124
125
126   /**
127    * Gets service model info.
128    *
129    * @param vspId   the vsp id
130    * @param version the version
131    * @param name    the name
132    * @return the service model info
133    */
134   public ServiceElement getServiceModelInfo(String vspId, Version version, String name) {
135     ServiceElement element = templateDao.getTemplateInfo(vspId, version, name);
136     if (element != null) {
137       return element;
138     }
139
140     element = artifactDao.getArtifactInfo(vspId, version, name);
141     if (element != null) {
142       return element;
143     }
144     return null;
145   }
146
147   public List<String> getServiceModelContentNames() {
148
149     return null;
150   }
151
152   private String getServiceBase(String vspId, Version version) {
153     return templateDao.getBase(vspId, version);
154   }
155
156   private Map<String, org.onap.sdc.tosca.datatypes.model.ServiceTemplate> getTemplates(
157       String vspId,
158       Version version) {
159
160     Collection<ServiceTemplate> templates = templateDao.list(vspId, version);
161     if (templates == null) {
162       return null;
163     }
164     return templates.stream().collect(Collectors.toMap(template -> template.getName(),
165         template -> getServiceTemplate(template.getContent())));
166   }
167
168   private org.onap.sdc.tosca.datatypes.model.ServiceTemplate getServiceTemplate(
169       InputStream content) {
170     String serviceTemplateContent = new String(FileUtils.toByteArray(content));
171
172     try{
173       return new ToscaExtensionYamlUtil().yamlToObject(serviceTemplateContent,
174           org.onap.sdc.tosca.datatypes.model.ServiceTemplate.class);
175     }catch (Exception e){
176       log.debug("",e);
177       System.out.println("Found vsp with old-versioned tosca service template");
178       Old1610ServiceTemplate old1610ServiceTemplate =
179           new ToscaExtensionYamlUtil().yamlToObject(serviceTemplateContent,
180               Old1610ServiceTemplate.class);
181
182       return mapOldSTToCurrentST(old1610ServiceTemplate);
183     }
184   }
185
186   private static org.onap.sdc.tosca.datatypes.model.ServiceTemplate mapOldSTToCurrentST(Old1610ServiceTemplate oldServiceTemplate){
187     org.onap.sdc.tosca.datatypes.model.ServiceTemplate
188         serviceTemplate = new org.onap.sdc.tosca.datatypes.model.ServiceTemplate();
189
190     serviceTemplate.setArtifact_types(oldServiceTemplate.getArtifact_types());
191     serviceTemplate.setCapability_types(oldServiceTemplate.getCapability_types());
192     serviceTemplate.setData_types(oldServiceTemplate.getData_types());
193     serviceTemplate.setDescription(oldServiceTemplate.getDescription());
194     serviceTemplate.setGroup_types(oldServiceTemplate.getGroup_types());
195     serviceTemplate.setInterface_types(oldServiceTemplate.getInterface_types());
196     serviceTemplate.setMetadata(oldServiceTemplate.getMetadata());
197     serviceTemplate.setNode_types(oldServiceTemplate.getNode_types());
198     serviceTemplate.setPolicy_types(oldServiceTemplate.getPolicy_types());
199     serviceTemplate.setRelationship_types(oldServiceTemplate.getRelationship_types());
200     serviceTemplate.setTopology_template(oldServiceTemplate.getTopology_template());
201
202     List<Map<String, Import>> imports = new ArrayList<>();
203     for(Map.Entry<String, Import> importEntry : oldServiceTemplate.getImports().entrySet()){
204       Map<String, Import> importMap = new HashMap<>();
205       importMap.put(importEntry.getKey(), importEntry.getValue());
206       imports.add(importMap);
207     }
208     serviceTemplate.setImports(imports);
209
210     return serviceTemplate;
211
212   }
213
214   private FileContentHandler getArtifacts(String vspId, Version version) {
215     Collection<ServiceArtifact> templates = artifactDao.list(vspId, version);
216     if (templates == null) {
217       return null;
218     }
219
220     FileContentHandler fileContentHandler = new FileContentHandler();
221     templates.stream().forEach(
222         serviceArtifact -> fileContentHandler
223             .addFile(serviceArtifact.getName(), serviceArtifact.getContent()));
224
225     return fileContentHandler;
226   }
227 }