Catalog alignment
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / info / MergedArtifactInfo.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.be.info;
22
23 import org.apache.commons.lang3.tuple.ImmutablePair;
24 import org.openecomp.sdc.be.model.ArtifactDefinition;
25
26 import java.util.ArrayList;
27 import java.util.HashSet;
28 import java.util.List;
29 import java.util.Optional;
30 import java.util.Set;
31
32 public class MergedArtifactInfo {
33
34     private List<ArtifactDefinition> createdArtifact;
35     private ArtifactTemplateInfo jsonArtifactTemplate;
36     private Set<String> parsetArtifactsNames;
37
38     public List<ArtifactDefinition> getCreatedArtifact() {
39         return createdArtifact;
40     }
41
42     public void setCreatedArtifact(List<ArtifactDefinition> createdArtifact) {
43         this.createdArtifact = createdArtifact;
44         parsetArtifactsNames = new HashSet<>();
45         parsetArtifactsNames.add(jsonArtifactTemplate.getFileName());
46         List<ArtifactTemplateInfo> relatedGroupTemplateList = jsonArtifactTemplate.getRelatedArtifactsInfo();
47         if (relatedGroupTemplateList != null && !relatedGroupTemplateList.isEmpty()) {
48             this.createArtifactsGroupSet(relatedGroupTemplateList, parsetArtifactsNames);
49         }
50     }
51
52     public ArtifactTemplateInfo getJsonArtifactTemplate() {
53         return jsonArtifactTemplate;
54     }
55
56     public void setJsonArtifactTemplate(ArtifactTemplateInfo jsonArtifactTemplate) {
57         this.jsonArtifactTemplate = jsonArtifactTemplate;
58     }
59
60     public List<ArtifactTemplateInfo> getListToAssociateArtifactToGroup() {
61         List<ArtifactTemplateInfo> resList = new ArrayList<>();
62         List<ArtifactTemplateInfo> relatedArtifacts = jsonArtifactTemplate.getRelatedArtifactsInfo();
63         if (relatedArtifacts != null && !relatedArtifacts.isEmpty()) {
64             getNewArtifactsInGroup(resList, relatedArtifacts);
65         }
66         return resList;
67     }
68
69     public List<ArtifactDefinition> getListToDissotiateArtifactFromGroup(List<ArtifactDefinition> deletedArtifacts) {
70         List<ArtifactDefinition> resList = new ArrayList<>();
71         for (ArtifactDefinition artifactDefinition : createdArtifact) {
72             boolean isDissotiate = true;
73             if(parsetArtifactsNames.contains(artifactDefinition.getArtifactName())){
74                 isDissotiate = false;
75             }else{
76                 if (artifactDefinition.getGeneratedFromId() != null && !artifactDefinition.getGeneratedFromId().isEmpty()){
77                     Optional<ArtifactDefinition> op = createdArtifact.stream().filter(p -> p.getUniqueId().equals(artifactDefinition.getGeneratedFromId())).findAny();
78                     if(op.isPresent()){
79                         ArtifactDefinition generatedFromArt = op.get();
80                         if(parsetArtifactsNames.contains(generatedFromArt.getArtifactName())){
81                             isDissotiate = false;
82                         }
83                     }
84                     else{
85                         isDissotiate = true;
86                     }
87
88                 }
89             }
90             if (isDissotiate) {
91                 boolean isDeleted = false;
92                 for (ArtifactDefinition deletedArtifact : deletedArtifacts) {
93                     if (artifactDefinition.getUniqueId().equalsIgnoreCase(deletedArtifact.getUniqueId())) {
94                         isDeleted = true;
95                         break;
96                     }
97
98                 }
99                 if (!isDeleted)
100                     resList.add(artifactDefinition);
101             }
102
103         }
104
105         return resList;
106     }
107
108     public List<ImmutablePair<ArtifactDefinition, ArtifactTemplateInfo>> getListToUpdateArtifactInGroup() {
109         List<ImmutablePair<ArtifactDefinition, ArtifactTemplateInfo>> resList = new ArrayList<>();
110         for (ArtifactDefinition artifactDefinition : createdArtifact) {
111             if (artifactDefinition.getArtifactName().equalsIgnoreCase(jsonArtifactTemplate.getFileName())) {
112                 resList.add(new ImmutablePair<>(artifactDefinition, jsonArtifactTemplate));
113             }
114         }
115         List<ArtifactTemplateInfo> relatedArtifacts = jsonArtifactTemplate.getRelatedArtifactsInfo();
116         if (relatedArtifacts != null && !relatedArtifacts.isEmpty()) {
117             getUpdateArtifactsInGroup(resList, relatedArtifacts);
118         }
119         return resList;
120     }
121
122     private void getUpdateArtifactsInGroup(List<ImmutablePair<ArtifactDefinition, ArtifactTemplateInfo>> resList, List<ArtifactTemplateInfo> jsonArtifacts) {
123
124         for (ArtifactTemplateInfo artifactTemplateInfo : jsonArtifacts) {
125
126             for (ArtifactDefinition artifactDefinition : createdArtifact) {
127                 if (artifactDefinition.getArtifactName().equalsIgnoreCase(artifactTemplateInfo.getFileName())) {
128                     resList.add(new ImmutablePair<>(artifactDefinition, artifactTemplateInfo));
129                 }
130             }
131
132             List<ArtifactTemplateInfo> relatedArtifacts = artifactTemplateInfo.getRelatedArtifactsInfo();
133             if (relatedArtifacts != null && !relatedArtifacts.isEmpty()) {
134                 getUpdateArtifactsInGroup(resList, relatedArtifacts);
135             }
136         }
137     }
138
139     private void getNewArtifactsInGroup(List<ArtifactTemplateInfo> resList, List<ArtifactTemplateInfo> jsonArtifacts) {
140
141         for (ArtifactTemplateInfo artifactTemplateInfo : jsonArtifacts) {
142             boolean isNewArtifact = true;
143             for (ArtifactDefinition artifactDefinition : createdArtifact) {
144                 if (artifactDefinition.getArtifactName().equalsIgnoreCase(artifactTemplateInfo.getFileName())) {
145                     isNewArtifact = false;
146                 }
147             }
148             if (isNewArtifact)
149                 resList.add(artifactTemplateInfo);
150             List<ArtifactTemplateInfo> relatedArtifacts = artifactTemplateInfo.getRelatedArtifactsInfo();
151             if (relatedArtifacts != null && !relatedArtifacts.isEmpty()) {
152                 getNewArtifactsInGroup(resList, relatedArtifacts);
153             }
154         }
155     }
156
157     private void createArtifactsGroupSet(List<ArtifactTemplateInfo> parsedGroupTemplateList, Set<String> parsedArtifactsName) {
158
159         for (ArtifactTemplateInfo parsedGroupTemplate : parsedGroupTemplateList) {
160             parsedArtifactsName.add(parsedGroupTemplate.getFileName());
161             List<ArtifactTemplateInfo> relatedArtifacts = parsedGroupTemplate.getRelatedArtifactsInfo();
162             if (relatedArtifacts != null && !relatedArtifacts.isEmpty()) {
163                 createArtifactsGroupSet(relatedArtifacts, parsedArtifactsName);
164             }
165         }
166     }
167
168 }