90d8f8639c8db10ba8036df6a4e9278deb962a26
[sdc.git] /
1 package org.openecomp.sdc.asdctool.impl.validator.tasks.artifacts;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.Optional;
8
9 import org.openecomp.sdc.asdctool.impl.validator.utils.ReportManager;
10 import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
11 import org.openecomp.sdc.be.dao.cassandra.CassandraOperationStatus;
12 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
13 import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition;
14 import org.openecomp.sdc.be.datatypes.elements.MapArtifactDataDefinition;
15 import org.openecomp.sdc.be.model.ComponentParametersView;
16 import org.openecomp.sdc.be.model.jsontitan.datamodel.TopologyTemplate;
17 import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
18 import org.openecomp.sdc.be.model.jsontitan.operations.TopologyTemplateOperation;
19 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
20 import org.springframework.beans.factory.annotation.Autowired;
21
22 import fj.data.Either;
23
24 /**
25  * Created by chaya on 7/6/2017.
26  */
27 public class ArtifactValidationUtils {
28
29     @Autowired
30     private ArtifactCassandraDao artifactCassandraDao;
31
32     @Autowired
33     private TopologyTemplateOperation topologyTemplateOperation;
34
35     public ArtifactsVertexResult validateArtifactsAreInCassandra(GraphVertex vertex, String taskName, List<ArtifactDataDefinition> artifacts) {
36         ArtifactsVertexResult result = new ArtifactsVertexResult(true);
37         for(ArtifactDataDefinition artifact:artifacts) {
38             boolean isArtifactExist = isArtifcatInCassandra(artifact.getEsId());
39             String status = isArtifactExist ? "Artifact " + artifact.getEsId() + " is in Cassandra" :
40                     "Artifact " + artifact.getEsId() + " doesn't exist in Cassandra";
41
42             ReportManager.writeReportLineToFile(status);
43             if (!isArtifactExist) {
44                 ReportManager.addFailedVertex(taskName, vertex.getUniqueId());
45                 result.setStatus(false);
46                 result.addNotFoundArtifact(artifact.getUniqueId());
47             }
48         }
49         return result;
50     }
51
52     public boolean isArtifcatInCassandra(String uniueId) {
53         Either<Long, CassandraOperationStatus> countOfArtifactsEither =
54                 artifactCassandraDao.getCountOfArtifactById(uniueId);
55         if (countOfArtifactsEither.isRight()) {
56             // print to console
57             System.out.print("Failed to retrieve artifact with id: "+uniueId+" from Cassandra" );
58             return false;
59         }
60         Long count = countOfArtifactsEither.left().value();
61         if (count <1) {
62             return false;
63         }
64         return true;
65     }
66
67     public List<ArtifactDataDefinition> addRelevantArtifacts(Map<String, ArtifactDataDefinition> artifactsMap) {
68         List<ArtifactDataDefinition> artifacts = new ArrayList<>();
69         Optional.ofNullable(artifactsMap).orElse(Collections.emptyMap()).forEach( (key, dataDef) -> {
70             if (dataDef.getEsId() != null && !dataDef.getEsId().isEmpty()) {
71                 artifacts.add(dataDef);
72             }
73         });
74         return artifacts;
75     }
76
77     public ArtifactsVertexResult validateTopologyTemplateArtifacts(GraphVertex vertex, String taskName) {
78         ArtifactsVertexResult result = new ArtifactsVertexResult();
79         ComponentParametersView paramView = new ComponentParametersView();
80         paramView.disableAll();
81         paramView.setIgnoreArtifacts(false);
82         paramView.setIgnoreComponentInstances(false);
83         Either<ToscaElement, StorageOperationStatus> toscaElementEither = topologyTemplateOperation.getToscaElement(vertex.getUniqueId(), paramView);
84         if (toscaElementEither.isRight()) {
85             result.setStatus(false);
86             return result;
87         }
88         TopologyTemplate element = (TopologyTemplate) toscaElementEither.left().value();
89         Map<String, ArtifactDataDefinition> deploymentArtifacts = element.getDeploymentArtifacts();
90         Map<String, ArtifactDataDefinition> artifacts = element.getArtifacts();
91         Map<String, ArtifactDataDefinition> apiArtifacts = element.getServiceApiArtifacts();
92         Map<String, MapArtifactDataDefinition> instanceArtifacts = element.getInstanceArtifacts();
93         Map<String, MapArtifactDataDefinition> instanceDeploymentArtifacts = element.getInstDeploymentArtifacts();
94
95         List<ArtifactDataDefinition> allArtifacts = new ArrayList<>();
96
97         allArtifacts.addAll(addRelevantArtifacts(deploymentArtifacts));
98         allArtifacts.addAll(addRelevantArtifacts(artifacts));
99         allArtifacts.addAll(addRelevantArtifacts(apiArtifacts));
100
101         if (instanceArtifacts != null) {
102             instanceArtifacts.forEach((key, artifactMap) -> {
103                 allArtifacts.addAll(addRelevantArtifacts(artifactMap.getMapToscaDataDefinition()));
104             });
105         }
106
107         if (instanceDeploymentArtifacts != null) {
108             instanceDeploymentArtifacts.forEach((key, artifactMap) -> {
109                 allArtifacts.addAll(addRelevantArtifacts(artifactMap.getMapToscaDataDefinition()));
110             });
111         }
112
113         return validateArtifactsAreInCassandra(vertex, taskName, allArtifacts);
114     }
115 }