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