Controller Blueprints MS
[ccsdk/cds.git] / ms / controllerblueprints / modules / service / src / main / java / org / onap / ccsdk / apps / controllerblueprints / service / utils / ConfigModelUtils.java
1 /*\r
2  * Copyright © 2017-2018 AT&T Intellectual Property.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package org.onap.ccsdk.apps.controllerblueprints.service.utils;\r
18 \r
19 import com.google.common.base.Preconditions;\r
20 import org.apache.commons.collections.CollectionUtils;\r
21 import org.apache.commons.io.FileUtils;\r
22 import org.apache.commons.io.FilenameUtils;\r
23 import org.apache.commons.io.filefilter.DirectoryFileFilter;\r
24 import org.apache.commons.lang3.StringUtils;\r
25 import org.onap.ccsdk.apps.controllerblueprints.core.ConfigModelConstant;\r
26 import org.onap.ccsdk.apps.controllerblueprints.core.data.ToscaMetaData;\r
27 import org.onap.ccsdk.apps.controllerblueprints.core.utils.BluePrintMetadataUtils;\r
28 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ConfigModel;\r
29 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ConfigModelContent;\r
30 import org.slf4j.Logger;\r
31 import org.slf4j.LoggerFactory;\r
32 \r
33 import java.io.File;\r
34 import java.io.IOException;\r
35 import java.nio.charset.Charset;\r
36 import java.util.ArrayList;\r
37 import java.util.Arrays;\r
38 import java.util.List;\r
39 \r
40 public class ConfigModelUtils {\r
41 \r
42     private ConfigModelUtils(){\r
43 \r
44     }\r
45     private static Logger log = LoggerFactory.getLogger(ConfigModelUtils.class);\r
46 \r
47     public static ConfigModel getConfigModel(String blueprintPath) throws Exception {\r
48         Preconditions.checkArgument(StringUtils.isNotBlank(blueprintPath), "Blueprint Path is missing");\r
49         ToscaMetaData toscaMetaData = BluePrintMetadataUtils.toscaMetaData(blueprintPath);\r
50 \r
51         Preconditions.checkNotNull(toscaMetaData, "failed to get Blueprint Metadata information");\r
52         Preconditions.checkArgument(StringUtils.isNotBlank(toscaMetaData.getEntityDefinitions()), "failed to get Blueprint Definition file");\r
53         Preconditions.checkArgument(StringUtils.isNotBlank(toscaMetaData.getCreatedBy()), "failed to get Blueprint created by");\r
54         Preconditions.checkArgument(StringUtils.isNotBlank(toscaMetaData.getToscaMetaFileVersion()), "failed to get Blueprint package version");\r
55 \r
56         String bluePrintName = FilenameUtils.getBaseName(toscaMetaData.getEntityDefinitions());\r
57         Preconditions.checkArgument(StringUtils.isNotBlank(bluePrintName), "failed to get Blueprint Definition Name");\r
58 \r
59         // TODO - Update Rest of the Model\r
60         ConfigModel configModel = new ConfigModel();\r
61         configModel.setUpdatedBy(toscaMetaData.getCreatedBy());\r
62         configModel.setArtifactName(bluePrintName);\r
63         configModel.setArtifactVersion(toscaMetaData.getToscaMetaFileVersion());\r
64         configModel.setTags(toscaMetaData.getTemplateTags());\r
65         configModel.setArtifactType("SDNC_MODEL");\r
66 \r
67         String blueprintContent =\r
68                 getPathContent(blueprintPath + "/" + toscaMetaData.getEntityDefinitions());\r
69 \r
70         Preconditions.checkArgument(StringUtils.isNotBlank(blueprintPath), "failed to get Blueprint content");\r
71 \r
72         List<ConfigModelContent> configModelContents = new ArrayList<>();\r
73         ConfigModelContent stConfigModelContent = new ConfigModelContent();\r
74         stConfigModelContent.setName(configModel.getArtifactName());\r
75         stConfigModelContent.setContentType(ConfigModelConstant.MODEL_CONTENT_TYPE_TOSCA_JSON);\r
76         stConfigModelContent.setContent(blueprintContent);\r
77         configModelContents.add(stConfigModelContent);\r
78 \r
79         String velocityDir = blueprintPath + "/Templates";\r
80         List<File> velocityTemplateFiles = getFileOfExtension(velocityDir, new String[]{"vtl"});\r
81 \r
82         if (CollectionUtils.isNotEmpty(velocityTemplateFiles)) {\r
83             for (File velocityTemplateFile : velocityTemplateFiles) {\r
84                 if (velocityTemplateFile != null) {\r
85                     String contentName = velocityTemplateFile.getName().replace(".vtl", "");\r
86                     ConfigModelContent velocityConfigModelContent = new ConfigModelContent();\r
87                     String velocityConfigContent = getPathContent(velocityTemplateFile);\r
88                     velocityConfigModelContent.setName(contentName);\r
89                     velocityConfigModelContent\r
90                             .setContentType(ConfigModelConstant.MODEL_CONTENT_TYPE_TEMPLATE);\r
91                     velocityConfigModelContent.setContent(velocityConfigContent);\r
92                     configModelContents.add(velocityConfigModelContent);\r
93                     log.info("Loaded blueprint template successfully: {}", velocityTemplateFile.getName());\r
94                 }\r
95             }\r
96         }\r
97         configModel.setConfigModelContents(configModelContents);\r
98 \r
99         return configModel;\r
100 \r
101     }\r
102 \r
103     public static String getPathContent(String path) throws IOException {\r
104         Preconditions.checkArgument(StringUtils.isNotBlank(path), "Path is missing");\r
105         return FileUtils.readFileToString(new File(path), Charset.defaultCharset());\r
106     }\r
107 \r
108     public static String getPathContent(File file) throws IOException {\r
109         Preconditions.checkNotNull(file, "File is missing");\r
110         return FileUtils.readFileToString(file, Charset.defaultCharset());\r
111     }\r
112 \r
113     public static List<File> getFileOfExtension(String basePath, String[] extensions) {\r
114         Preconditions.checkArgument(StringUtils.isNotBlank(basePath), "Path is missing");\r
115         Preconditions.checkNotNull(extensions, "Extensions is missing");\r
116         return (List<File>) FileUtils.listFiles(new File(basePath), extensions, true);\r
117     }\r
118 \r
119     public static List<String> getBlueprintNames(String pathName) {\r
120         File blueprintDir = new File(pathName);\r
121         Preconditions.checkNotNull(blueprintDir, "failed to find the blueprint pathName file");\r
122         return  Arrays.asList(blueprintDir.list(DirectoryFileFilter.INSTANCE));\r
123     }\r
124 }\r