[SDC-29] Amdocs OnBoard 1707 initial commit.
[sdc.git] / openecomp-be / lib / openecomp-heat-lib / src / main / java / org / openecomp / sdc / heat / services / manifest / ManifestUtil.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.heat.services.manifest;
22
23
24 import org.apache.commons.collections4.CollectionUtils;
25 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
26 import org.openecomp.sdc.heat.datatypes.manifest.ManifestContent;
27
28 import java.util.HashMap;
29 import java.util.HashSet;
30 import java.util.List;
31 import java.util.Map;
32 import java.util.Set;
33
34
35 public class ManifestUtil {
36
37
38   /**
39    * Gets file and its env.
40    *
41    * @param manifestContent the manifest content
42    * @return the file and its env
43    */
44   public static Map<String, FileData> getFileAndItsEnv(ManifestContent manifestContent) {
45     Map<String, FileData> fileEnvMap = new HashMap<>();
46     scanFileEnvMap(null, manifestContent.getData(), fileEnvMap);
47     return fileEnvMap;
48   }
49
50
51   /**
52    * Scan file env map.
53    *
54    * @param fileData     the file data
55    * @param fileDataList the file data list
56    * @param fileEnvMap   the file env map
57    */
58   public static void scanFileEnvMap(FileData fileData, List<FileData> fileDataList,
59                                     Map<String, FileData> fileEnvMap) {
60
61     if (CollectionUtils.isEmpty(fileDataList)) {
62       return;
63     }
64
65     for (FileData childFileData : fileDataList) {
66       FileData.Type childType = childFileData.getType();
67       if (fileData != null) {
68         if (childType != null && childType.equals(FileData.Type.HEAT_ENV)) {
69           fileEnvMap.put(fileData.getFile(), childFileData);
70         }
71       }
72       scanFileEnvMap(childFileData, childFileData.getData(), fileEnvMap);
73     }
74   }
75
76
77   /**
78    * Gets file type map.
79    *
80    * @param manifestContent the manifest content
81    * @return the file type map
82    */
83   public static Map<String, FileData.Type> getFileTypeMap(ManifestContent manifestContent) {
84     Map<String, FileData.Type> fileTypeMap = new HashMap<>();
85     scanFileTypeMap(null, manifestContent.getData(), fileTypeMap);
86     return fileTypeMap;
87   }
88
89   private static FileData.Type scanFileTypeMap(FileData fileData, List<FileData> data,
90                                                Map<String, FileData.Type> fileTypeMap) {
91     if (fileData != null) {
92       fileTypeMap.put(fileData.getFile(), fileData.getType());
93     }
94     if (data == null) {
95       return null;
96     }
97
98     for (FileData chileFileData : data) {
99       FileData.Type type = scanFileTypeMap(chileFileData, chileFileData.getData(), fileTypeMap);
100       if (type != null) {
101         return type;
102       }
103     }
104     return null;
105   }
106
107
108   /**
109    * Gets artifacts.
110    *
111    * @param manifestContent the manifest content
112    * @return the artifacts
113    */
114   public static Set<String> getArtifacts(ManifestContent manifestContent) {
115     Set<String> artifacts = new HashSet<>();
116     scanArtifacts(null, manifestContent.getData(), artifacts);
117
118     return artifacts;
119   }
120
121
122   private static void scanArtifacts(FileData fileData, List<FileData> data, Set<String> artifacts) {
123     if (fileData != null && fileData.getType() != null) {
124       if (isArtifact(fileData)) {
125         artifacts.add(fileData.getFile());
126       }
127     }
128
129     if (data == null) {
130       return;
131     }
132
133     for (FileData chileFileData : data) {
134       scanArtifacts(chileFileData, chileFileData.getData(), artifacts);
135     }
136   }
137
138   private static boolean isArtifact(FileData fileData) {
139     if (FileData.Type.valueOf(fileData.getType().name()) != null
140         && !fileData.getType().equals(FileData.Type.HEAT)
141         && !fileData.getType().equals(FileData.Type.HEAT_ENV)
142         && !fileData.getType().equals(FileData.Type.HEAT_NET)
143         && !fileData.getType().equals(FileData.Type.HEAT_VOL)) {
144       return true;
145     }
146     return false;
147   }
148
149   /**
150    * Gets base files.
151    *
152    * @param manifestContent the manifest content
153    * @return the base files
154    */
155   public static Set<String> getBaseFiles(ManifestContent manifestContent) {
156     Set<String> baseFiles = new HashSet<>();
157     scanBase(null, manifestContent.getData(), baseFiles);
158     return baseFiles;
159   }
160
161   private static void scanBase(FileData fileData, List<FileData> data, Set<String> baseFiles) {
162     if (fileData != null && fileData.getBase() != null) {
163       if (fileData.getBase()) {
164         baseFiles.add(fileData.getFile());
165       }
166     }
167
168     if (data == null) {
169       return;
170     }
171
172     for (FileData chileFileData : data) {
173       scanBase(chileFileData, chileFileData.getData(), baseFiles);
174     }
175   }
176 }