dfdeec8c67caca0c4359f4cd2d75bf80b4f449b6
[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             ReportManager.writeReportLineToFile(status);
37             if (!isArtifactExist) {
38                 allArtifactsExist = false;
39             }
40         }
41         return allArtifactsExist;
42     }
43
44     public boolean isArtifcatInCassandra(String uniueId) {
45         Either<Long, CassandraOperationStatus> countOfArtifactsEither =
46                 artifactCassandraDao.getCountOfArtifactById(uniueId);
47         if (countOfArtifactsEither.isRight()) {
48             // print to console
49             System.out.print("Failed to retrieve artifact with id: "+uniueId+" from Cassandra" );
50             return false;
51         }
52         Long count = countOfArtifactsEither.left().value();
53         if (count <1) {
54             //System.out.print("Artifact "+uniueId+" count is: "+count);
55             return false;
56         }
57         return true;
58     }
59
60     public List<ArtifactDataDefinition> addRelevantArtifacts(Map<String, ArtifactDataDefinition> artifactsMap) {
61         List<ArtifactDataDefinition> artifacts = new ArrayList<>();
62         Optional.ofNullable(artifactsMap).orElse(Collections.emptyMap()).forEach( (key, dataDef) -> {
63             if (dataDef.getEsId() != null && !dataDef.getEsId().isEmpty()) {
64                 artifacts.add(dataDef);
65             }
66         });
67         return artifacts;
68     }
69
70     public boolean validateTopologyTemplateArtifacts(GraphVertex vertex, String taskName) {
71         ComponentParametersView paramView = new ComponentParametersView();
72         paramView.disableAll();
73         paramView.setIgnoreArtifacts(false);
74         paramView.setIgnoreComponentInstances(false);
75         Either<ToscaElement, StorageOperationStatus> toscaElementEither = topologyTemplateOperation.getToscaElement(vertex.getUniqueId(), paramView);
76         if (toscaElementEither.isRight()) {
77             return false;
78         }
79         TopologyTemplate element = (TopologyTemplate) toscaElementEither.left().value();
80         Map<String, ArtifactDataDefinition> deploymentArtifacts = element.getDeploymentArtifacts();
81         Map<String, ArtifactDataDefinition> artifacts = element.getArtifacts();
82         Map<String, ArtifactDataDefinition> apiArtifacts = element.getServiceApiArtifacts();
83         Map<String, MapArtifactDataDefinition> instanceArtifacts = element.getInstanceArtifacts();
84         Map<String, MapArtifactDataDefinition> instanceDeploymentArtifacts = element.getInstDeploymentArtifacts();
85
86         List<ArtifactDataDefinition> allArtifacts = new ArrayList<>();
87
88         allArtifacts.addAll(addRelevantArtifacts(deploymentArtifacts));
89         allArtifacts.addAll(addRelevantArtifacts(artifacts));
90         allArtifacts.addAll(addRelevantArtifacts(apiArtifacts));
91
92         if (instanceArtifacts != null) {
93             instanceArtifacts.forEach((key, artifactMap) -> {
94                 allArtifacts.addAll(addRelevantArtifacts(artifactMap.getMapToscaDataDefinition()));
95             });
96         }
97
98         if (instanceDeploymentArtifacts != null) {
99             instanceDeploymentArtifacts.forEach((key, artifactMap) -> {
100                 allArtifacts.addAll(addRelevantArtifacts(artifactMap.getMapToscaDataDefinition()));
101             });
102         }
103
104         return validateArtifactsAreInCassandra(vertex, taskName, allArtifacts);
105     }
106 }