re base code
[sdc.git] / asdctool / src / main / java / org / openecomp / sdc / asdctool / impl / validator / tasks / artifacts / ArtifactValidationUtils.java
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 ArtifactsVertexResult validateArtifactsAreInCassandra(GraphVertex vertex, String taskName, List<ArtifactDataDefinition> artifacts) {
31         ArtifactsVertexResult result = new ArtifactsVertexResult(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
37             ReportManager.writeReportLineToFile(status);
38             if (!isArtifactExist) {
39                 ReportManager.addFailedVertex(taskName, vertex.getUniqueId());
40                 result.setStatus(false);
41                 result.addNotFoundArtifact(artifact.getUniqueId());
42             }
43         }
44         return result;
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             return false;
58         }
59         return true;
60     }
61
62     public List<ArtifactDataDefinition> addRelevantArtifacts(Map<String, ArtifactDataDefinition> artifactsMap) {
63         List<ArtifactDataDefinition> artifacts = new ArrayList<>();
64         Optional.ofNullable(artifactsMap).orElse(Collections.emptyMap()).forEach( (key, dataDef) -> {
65             if (dataDef.getEsId() != null && !dataDef.getEsId().isEmpty()) {
66                 artifacts.add(dataDef);
67             }
68         });
69         return artifacts;
70     }
71
72     public ArtifactsVertexResult validateTopologyTemplateArtifacts(GraphVertex vertex, String taskName) {
73         ArtifactsVertexResult result = new ArtifactsVertexResult();
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             result.setStatus(false);
81             return result;
82         }
83         TopologyTemplate element = (TopologyTemplate) toscaElementEither.left().value();
84         Map<String, ArtifactDataDefinition> deploymentArtifacts = element.getDeploymentArtifacts();
85         Map<String, ArtifactDataDefinition> artifacts = element.getArtifacts();
86         Map<String, ArtifactDataDefinition> apiArtifacts = element.getServiceApiArtifacts();
87         Map<String, MapArtifactDataDefinition> instanceArtifacts = element.getInstanceArtifacts();
88         Map<String, MapArtifactDataDefinition> instanceDeploymentArtifacts = element.getInstDeploymentArtifacts();
89
90         List<ArtifactDataDefinition> allArtifacts = new ArrayList<>();
91
92         allArtifacts.addAll(addRelevantArtifacts(deploymentArtifacts));
93         allArtifacts.addAll(addRelevantArtifacts(artifacts));
94         allArtifacts.addAll(addRelevantArtifacts(apiArtifacts));
95
96         if (instanceArtifacts != null) {
97             instanceArtifacts.forEach((key, artifactMap) -> {
98                 allArtifacts.addAll(addRelevantArtifacts(artifactMap.getMapToscaDataDefinition()));
99             });
100         }
101
102         if (instanceDeploymentArtifacts != null) {
103             instanceDeploymentArtifacts.forEach((key, artifactMap) -> {
104                 allArtifacts.addAll(addRelevantArtifacts(artifactMap.getMapToscaDataDefinition()));
105             });
106         }
107
108         return validateArtifactsAreInCassandra(vertex, taskName, allArtifacts);
109     }
110 }