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