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