use of org.eclipse.winery.topologygraph.model.ToscaNode in project winery by eclipse.
the class ToscaModelHelper method createTOSCANodeOnlyTypes.
public static ToscaNode createTOSCANodeOnlyTypes(TNodeTemplate nodeTemplate) {
ToscaNode node = new ToscaNode();
ToscaTransformer.addTEntityTypes(nodeTemplate.getType(), node, TNodeType.class);
return node;
}
use of org.eclipse.winery.topologygraph.model.ToscaNode in project winery by eclipse.
the class ToscaModelHelper method createTOSCANode.
public static ToscaNode createTOSCANode(String id, String name) {
TNodeTemplate template = new TNodeTemplate();
template.setName(name);
ToscaNode node = new ToscaNode();
node.setNodeTemplate(template);
node.setId(id);
return node;
}
use of org.eclipse.winery.topologygraph.model.ToscaNode in project winery by eclipse.
the class ComplianceRuleChecker method extractViolatingMappings.
public List<GraphMapping> extractViolatingMappings(ToscaGraph identifierGraph, List<GraphMapping> identifierMappings, List<GraphMapping> requiredStructureMappings) {
List<GraphMapping> violatingMappings = new ArrayList<>();
// for all mappings in identifierMappings, we need to find the corresponding required Structure Mappings
for (GraphMapping identifierMapping : identifierMappings) {
boolean foundCorrespondence = false;
for (GraphMapping requiredStructureMapping : requiredStructureMappings) {
// get the corresponding ToscaNode from the searchInGraph
ToscaNode identifierVertexCorrespondence = (ToscaNode) identifierMapping.getVertexCorrespondence(identifierGraph.getReferenceNode(), false);
foundCorrespondence = (requiredStructureMapping.getVertexCorrespondence(identifierVertexCorrespondence, true) != null) ? true : false;
}
if (!foundCorrespondence) {
violatingMappings.add(identifierMapping);
}
}
return violatingMappings;
}
use of org.eclipse.winery.topologygraph.model.ToscaNode in project winery by eclipse.
the class ToscaComponentPatternMatcherTest method isCompatible.
@Test
public void isCompatible() {
// same type
TNodeTemplate refinementTemplate = new TNodeTemplate(new TNodeTemplate.Builder("d", new QName("type1")));
ToscaNode refinement = new ToscaNode();
refinement.addTEntityType(new TNodeType(new TNodeType.Builder("type1")));
refinement.setNodeTemplate(refinementTemplate);
TNodeTemplate candidateTemplate = new TNodeTemplate(new TNodeTemplate.Builder("c", new QName("type1")));
ToscaNode candidate = new ToscaNode();
candidate.addTEntityType(new TNodeType(new TNodeType.Builder("type1")));
candidate.setNodeTemplate(candidateTemplate);
OTPatternRefinementModel prm = new OTPatternRefinementModel(new OTPatternRefinementModel.Builder().setRefinementStructure(new TTopologyTemplate(new TTopologyTemplate.Builder().addNodeTemplate(refinementTemplate))));
// needs to be swapped manually as only prms retrieved from repo are swapped automatically
PatternDetectionUtils.swapDetectorWithRefinement(prm);
NamespaceManager namespaceManager = new MockNamespaceManager() {
@Override
public boolean isPatternNamespace(String namespace) {
return namespace.equals("patternNs");
}
};
ToscaComponentPatternMatcher matcher = new ToscaComponentPatternMatcher(prm, namespaceManager, new ArrayList<>(), new HashMap<>());
assertTrue(matcher.isCompatible(refinement, candidate));
// different type
refinementTemplate.setType(new QName("type1"));
refinement.getTypes().clear();
refinement.addTEntityType(new TNodeType(new TNodeType.Builder("type1")));
candidateTemplate.setType(new QName("type2"));
candidate.getTypes().clear();
candidate.addTEntityType(new TNodeType(new TNodeType.Builder("type2")));
assertFalse(matcher.isCompatible(refinement, candidate));
// share supertype
refinement.addTEntityType(new TNodeType(new TNodeType.Builder("super")));
candidate.addTEntityType(new TNodeType(new TNodeType.Builder("super")));
assertTrue(matcher.isCompatible(refinement, candidate));
// stay mapping exists
OTStayMapping stayMapping = new OTStayMapping(new OTStayMapping.Builder().setDetectorElement(null).setRefinementElement(refinementTemplate));
List<OTStayMapping> stayMappings = new ArrayList<>();
stayMappings.add((OTStayMapping) PatternDetectionUtils.swapDetectorWithRefinement(stayMapping));
prm.setStayMappings(stayMappings);
assertFalse(matcher.isCompatible(refinement, candidate));
assertNotNull(prm.getStayMappings());
prm.getStayMappings().clear();
assertTrue(matcher.isCompatible(refinement, candidate));
// component pattern mapping exists
List<OTPermutationMapping> componentPatternMappings = new ArrayList<>();
OTPermutationMapping componentPatternMapping = new OTPermutationMapping(new OTPermutationMapping.Builder().setDetectorElement(new TNodeTemplate.Builder("detector", QName.valueOf("{ns}type")).build()).setRefinementElement(refinementTemplate));
componentPatternMappings.add((OTPermutationMapping) PatternDetectionUtils.swapDetectorWithRefinement(componentPatternMapping));
prm.setPermutationMappings(componentPatternMappings);
assertFalse(matcher.isCompatible(refinement, candidate));
prm.getPermutationMappings().clear();
assertTrue(matcher.isCompatible(refinement, candidate));
// different behavior patterns
List<TPolicy> refinementPolicies = new ArrayList<>();
refinementPolicies.add(new TPolicy.Builder(QName.valueOf("{patternNs}type1")).build());
refinementTemplate.setPolicies(refinementPolicies);
List<TPolicy> candidatePolicies = new ArrayList<>();
candidateTemplate.setPolicies(candidatePolicies);
// detector has behavior pattern, candidate doesn't
assertFalse(matcher.isCompatible(refinement, candidate));
candidatePolicies.add(new TPolicy.Builder(QName.valueOf("{patternNs}type1")).build());
// detector and candidate have same behavior pattern
assertTrue(matcher.isCompatible(refinement, candidate));
refinementPolicies.clear();
// candidate has behavior pattern, detector doesn't
assertFalse(matcher.isCompatible(refinement, candidate));
candidatePolicies.clear();
assertTrue(matcher.isCompatible(refinement, candidate));
// detector supertype of candidate
refinementTemplate.setType(new QName("super"));
refinement.getTypes().clear();
refinement.addTEntityType(new TNodeType(new TNodeType.Builder("super")));
candidateTemplate.setType(new QName("type"));
candidate.getTypes().clear();
candidate.addTEntityType(new TNodeType(new TNodeType.Builder("type")));
candidate.addTEntityType(new TNodeType(new TNodeType.Builder("super")));
assertTrue(matcher.isCompatible(refinement, candidate));
// candidate supertype of detector
refinementTemplate.setType(new QName("type"));
refinement.getTypes().clear();
refinement.addTEntityType(new TNodeType(new TNodeType.Builder("type")));
refinement.addTEntityType(new TNodeType(new TNodeType.Builder("super")));
candidateTemplate.setType(new QName("super"));
candidate.getTypes().clear();
candidate.addTEntityType(new TNodeType(new TNodeType.Builder("super")));
assertTrue(matcher.isCompatible(refinement, candidate));
// different supertypes
refinementTemplate.setType(new QName("type1"));
refinement.getTypes().clear();
refinement.addTEntityType(new TNodeType(new TNodeType.Builder("type1")));
refinement.addTEntityType(new TNodeType(new TNodeType.Builder("super1")));
candidateTemplate.setType(new QName("type2"));
candidate.getTypes().clear();
candidate.addTEntityType(new TNodeType(new TNodeType.Builder("type2")));
candidate.addTEntityType(new TNodeType(new TNodeType.Builder("super2")));
assertFalse(matcher.isCompatible(refinement, candidate));
}
use of org.eclipse.winery.topologygraph.model.ToscaNode in project winery by eclipse.
the class AbstractRefinementTest method setUp.
protected static void setUp() {
// region *** topology ***
TNodeTemplate nt1 = new TNodeTemplate.Builder("1", QName.valueOf("{http://ex.org}nodeType_1")).setX("10").setY("10").build();
TNodeTemplate nt2 = new TNodeTemplate.Builder("2", QName.valueOf("{http://ex.org}nodeType_2")).setX("110").setY("10").build();
TNodeTemplate nt3 = new TNodeTemplate.Builder("3", QName.valueOf("{http://ex.org}nodeType_3")).setX("210").setY("10").build();
TNodeTemplate nt4 = new TNodeTemplate.Builder("4", QName.valueOf("{http://ex.org}nodeType_4")).setX("110").setY("110").build();
TRelationshipTemplate rt21 = new TRelationshipTemplate.Builder("21", QName.valueOf("{http://ex.org}relType_1"), nt2, nt1).build();
TRelationshipTemplate rt32 = new TRelationshipTemplate.Builder("32", QName.valueOf("{http://ex.org}relType_1"), nt3, nt2).build();
TRelationshipTemplate rt24 = new TRelationshipTemplate.Builder("24", QName.valueOf("{http://ex.org}relType_2"), nt2, nt4).build();
/*
####### (1) ####### (1) #######
# (1) # <----- # (2) # <----- # (3) #
####### ####### #######
| (2)
\/
#######
# (4) #
#######
*/
topology = new TTopologyTemplate.Builder().addNodeTemplate(nt1).addNodeTemplate(nt2).addNodeTemplate(nt3).addNodeTemplate(nt4).addRelationshipTemplate(rt21).addRelationshipTemplate(rt32).addRelationshipTemplate(rt24).build();
// endregion
// region *** topology2 ***
/*
####### (1) #######
# (1) # <----- # (2) #
####### #######
| (2)
\/
#######
# (4) #
#######
*/
topology2 = new TTopologyTemplate.Builder().addNodeTemplate(nt1).addNodeTemplate(nt2).addNodeTemplate(nt4).addRelationshipTemplate(rt21).addRelationshipTemplate(rt24).build();
// endregion
// region *** topology 3 ***
/*
####### (1) #######
# (1) # <----- # (2) #
####### #######
| (2)
\/
#######----|
# (4) # DA |
#######----|
*/
QName artifactTypeFile = new QName("file", "http://example.org/tosca/at");
QName test_da = new QName("test_da", "http://example.org/tosca/atemp/das");
TNodeTemplate nt30 = new TNodeTemplate.Builder("30", QName.valueOf("{http://ex.org}nodeType_4")).setX("110").setY("110").build();
TRelationshipTemplate rt230 = new TRelationshipTemplate.Builder("302", QName.valueOf("{http://ex.org}relType_2"), nt2, nt30).build();
TDeploymentArtifact da = new TDeploymentArtifact.Builder("test_da", artifactTypeFile).setArtifactRef(test_da).build();
nt30.setDeploymentArtifacts(new ArrayList<>(Collections.singletonList(da)));
topology3 = new TTopologyTemplate.Builder().addNodeTemplate(nt1).addNodeTemplate(nt2).addNodeTemplate(nt30).addRelationshipTemplate(rt21).addRelationshipTemplate(rt230).build();
// endregion
// region *** topology4 ***
TRelationshipTemplate rt14 = new TRelationshipTemplate.Builder("14", QName.valueOf("{http://ex.org}relType_1"), nt1, nt4).build();
/*
####### (1) #######
# (3) # -----># (2) #
####### #######
| (2)
\/
####### (1) #######
# (1) # -----># (4) #
####### #######
*/
topology4 = new TTopologyTemplate.Builder().addNodeTemplate(nt1).addNodeTemplate(nt2).addNodeTemplate(nt3).addNodeTemplate(nt4).addRelationshipTemplate(rt32).addRelationshipTemplate(rt14).addRelationshipTemplate(rt24).build();
// endregion
// region *** matching PRM ***
// region *** detector ***
TNodeTemplate nt7 = new TNodeTemplate.Builder("7", QName.valueOf("{http://ex.org}nodeType_2")).build();
TNodeTemplate nt8 = new TNodeTemplate.Builder("8", QName.valueOf("{http://ex.org}nodeType_4")).build();
TRelationshipTemplate rt78 = new TRelationshipTemplate.Builder("78", QName.valueOf("{http://ex.org}relType_2"), nt7, nt8).build();
/*
#######
# (2) #
#######
| (2)
\/
#######
# (4) #
#######
*/
TTopologyTemplate detector = new TTopologyTemplate.Builder().addNodeTemplate(nt7).addNodeTemplate(nt8).addRelationshipTemplate(rt78).build();
// endregion
// region *** refinement structure
TNodeTemplate nt10 = new TNodeTemplate.Builder("10", QName.valueOf("{http://ex.org}nodeType_10")).setX("5").setY("10").build();
TNodeTemplate nt11 = new TNodeTemplate.Builder("11", QName.valueOf("{http://ex.org}nodeType_11")).setX("105").setY("5").build();
TNodeTemplate nt12 = new TNodeTemplate.Builder("12", QName.valueOf("{http://ex.org}nodeType_12")).setX("55").setY("105").build();
TNodeTemplate nt13 = new TNodeTemplate.Builder("13", QName.valueOf("{http://ex.org}nodeType_13")).setX("55").setY("205").build();
TRelationshipTemplate rt1012 = new TRelationshipTemplate.Builder("1012", QName.valueOf("{http://ex.org}relType_2"), nt10, nt12).build();
TRelationshipTemplate rt1112 = new TRelationshipTemplate.Builder("1112", QName.valueOf("{http://ex.org}relType_2"), nt11, nt12).build();
TRelationshipTemplate rt1213 = new TRelationshipTemplate.Builder("1213", QName.valueOf("{http://ex.org}relType_2"), nt12, nt13).build();
/*
######## ########
# (10) # # (11) #
######## ########
| (2) | (2)
+-------|------+
\/
########
# (12) #
########
| (2)
\/
########
# (13) #
########
*/
TTopologyTemplate refinementStructure = new TTopologyTemplate.Builder().addNodeTemplate(nt10).addNodeTemplate(nt11).addNodeTemplate(nt12).addNodeTemplate(nt13).addRelationshipTemplate(rt1012).addRelationshipTemplate(rt1112).addRelationshipTemplate(rt1213).build();
// endregion
// region *** relation mapping ***
OTRelationMapping rm1 = new OTRelationMapping(new OTRelationMapping.Builder());
rm1.setDetectorElement(nt7);
rm1.setRelationType(QName.valueOf("{http://ex.org}relType_1"));
rm1.setDirection(OTRelationDirection.INGOING);
rm1.setValidSourceOrTarget(QName.valueOf("{http://ex.org}nodeType_3"));
rm1.setRefinementElement(nt11);
OTRelationMapping rm2 = new OTRelationMapping(new OTRelationMapping.Builder());
rm2.setDetectorElement(nt7);
rm2.setRelationType(QName.valueOf("{http://ex.org}relType_1"));
rm2.setDirection(OTRelationDirection.OUTGOING);
rm2.setValidSourceOrTarget(QName.valueOf("{http://ex.org}nodeType_1"));
rm2.setRefinementElement(nt10);
// endregion
OTPatternRefinementModel prmWithNt2HostedOnNt4AndIngoingRt1AtNt2AndOutgoingRt1AtNt2 = new OTPatternRefinementModel(new OTPatternRefinementModel.Builder());
prmWithNt2HostedOnNt4AndIngoingRt1AtNt2AndOutgoingRt1AtNt2.setDetector(detector);
prmWithNt2HostedOnNt4AndIngoingRt1AtNt2AndOutgoingRt1AtNt2.setRefinementTopology(refinementStructure);
ToscaGraph topologyGraph = ToscaTransformer.createTOSCAGraph(topology);
ToscaGraph detectorGraph = ToscaTransformer.createTOSCAGraph(detector);
ToscaIsomorphismMatcher matcher = new ToscaIsomorphismMatcher();
Iterator<GraphMapping<ToscaNode, ToscaEdge>> mappings = matcher.findMatches(detectorGraph, topologyGraph, new ToscaTypeMatcher());
GraphMapping<ToscaNode, ToscaEdge> detectorWithTopologyMapping = mappings.next();
List<OTRelationMapping> relationMappings = new ArrayList<>();
relationMappings.add(rm1);
relationMappings.add(rm2);
prmWithNt2HostedOnNt4AndIngoingRt1AtNt2AndOutgoingRt1AtNt2.setRelationMappings(relationMappings);
candidateForTopology = new RefinementCandidate(prmWithNt2HostedOnNt4AndIngoingRt1AtNt2AndOutgoingRt1AtNt2, detectorWithTopologyMapping, detectorGraph, 1);
// endregion
// region *** invalidCandidateForTopology **
OTPatternRefinementModel prmWithNt2HostedOnNt4AndOutgoingRt1AtNt2 = new OTPatternRefinementModel(new OTPatternRefinementModel.Builder());
prmWithNt2HostedOnNt4AndOutgoingRt1AtNt2.setDetector(detector);
List<OTRelationMapping> relationMappingsNonMatchingPrm = new ArrayList<>();
relationMappingsNonMatchingPrm.add(rm2);
prmWithNt2HostedOnNt4AndOutgoingRt1AtNt2.setRelationMappings(relationMappingsNonMatchingPrm);
invalidCandidateForTopology = new RefinementCandidate(prmWithNt2HostedOnNt4AndOutgoingRt1AtNt2, detectorWithTopologyMapping, detectorGraph, 2);
// endregion
// region *** Candidates for Topology 2 ***
ToscaGraph topology2Graph = ToscaTransformer.createTOSCAGraph(topology2);
GraphMapping<ToscaNode, ToscaEdge> detectorWithTopology2Mapping = matcher.findMatches(detectorGraph, topology2Graph, new ToscaTypeMatcher()).next();
candidateForTopology2 = new RefinementCandidate(prmWithNt2HostedOnNt4AndIngoingRt1AtNt2AndOutgoingRt1AtNt2, detectorWithTopology2Mapping, detectorGraph, 3);
secondValidCandidateForTopology2 = new RefinementCandidate(prmWithNt2HostedOnNt4AndOutgoingRt1AtNt2, detectorWithTopology2Mapping, detectorGraph, 4);
// endregion
// region *** Candidates for Topology 3 ***
ToscaGraph topologyGraph3 = ToscaTransformer.createTOSCAGraph(topology3);
GraphMapping<ToscaNode, ToscaEdge> detectorToTopology3Mapping = new ToscaIsomorphismMatcher().findMatches(detectorGraph, topologyGraph3, new ToscaTypeMatcher()).next();
OTDeploymentArtifactMapping deploymentArtifactMapping1 = new OTDeploymentArtifactMapping(new OTDeploymentArtifactMapping.Builder());
deploymentArtifactMapping1.setId("daMap-1");
deploymentArtifactMapping1.setArtifactType(artifactTypeFile);
deploymentArtifactMapping1.setDetectorElement(nt8);
deploymentArtifactMapping1.setRefinementElement(nt13);
OTPatternRefinementModel matchingPrmWithDa = new OTPatternRefinementModel(new OTPatternRefinementModel.Builder());
matchingPrmWithDa.setDetector(detector);
matchingPrmWithDa.setRefinementTopology(refinementStructure);
matchingPrmWithDa.setDeploymentArtifactMappings(Collections.singletonList(deploymentArtifactMapping1));
matchingPrmWithDa.setRelationMappings(relationMappings);
candidateForTopology3WithDa = new RefinementCandidate(matchingPrmWithDa, detectorToTopology3Mapping, detectorGraph, 5);
QName artifactTypeZip = new QName("zip", "http://example.org/tosca/at");
OTDeploymentArtifactMapping deploymentArtifactMapping2 = new OTDeploymentArtifactMapping(new OTDeploymentArtifactMapping.Builder());
deploymentArtifactMapping2.setId("daMap-1");
deploymentArtifactMapping2.setArtifactType(artifactTypeZip);
deploymentArtifactMapping2.setDetectorElement(nt7);
deploymentArtifactMapping2.setRefinementElement(nt11);
OTPatternRefinementModel nonMatchingPrmWithDa = new OTPatternRefinementModel(new OTPatternRefinementModel.Builder());
nonMatchingPrmWithDa.setDetector(detector);
nonMatchingPrmWithDa.setRefinementTopology(refinementStructure);
nonMatchingPrmWithDa.setDeploymentArtifactMappings(Collections.singletonList(deploymentArtifactMapping2));
nonMatchingPrmWithDa.setRelationMappings(relationMappings);
candidateForTopology3WithNotMatchingDa = new RefinementCandidate(nonMatchingPrmWithDa, detectorToTopology3Mapping, detectorGraph, 6);
// endregion
// region *** Candidates for Topology 4 ***
ToscaGraph topology4Graph = ToscaTransformer.createTOSCAGraph(topology4);
GraphMapping<ToscaNode, ToscaEdge> detectorWithTopology4Mapping = matcher.findMatches(detectorGraph, topology4Graph, new ToscaTypeMatcher()).next();
OTRelationMapping rm3 = new OTRelationMapping(new OTRelationMapping.Builder());
rm3.setRelationType(QName.valueOf("{http://ex.org}relType_1"));
rm3.setDirection(OTRelationDirection.INGOING);
rm3.setDetectorElement(nt7);
rm3.setRefinementElement(nt11);
OTPatternRefinementModel prmWithNT2HostedOnNT4AndIngoingRT1AtNT2 = new OTPatternRefinementModel(new OTPatternRefinementModel.Builder());
prmWithNT2HostedOnNT4AndIngoingRT1AtNT2.setDetector(detector);
prmWithNT2HostedOnNT4AndIngoingRT1AtNT2.setRefinementTopology(refinementStructure);
prmWithNT2HostedOnNT4AndIngoingRT1AtNT2.setRelationMappings(Collections.singletonList(rm3));
invalidCandidateForTopology4 = new RefinementCandidate(prmWithNT2HostedOnNT4AndIngoingRT1AtNT2, detectorWithTopology4Mapping, detectorGraph, 7);
OTRelationMapping rm4 = new OTRelationMapping(new OTRelationMapping.Builder());
rm4.setRelationType(QName.valueOf("{http://ex.org}relType_1"));
rm4.setDirection(OTRelationDirection.INGOING);
rm4.setDetectorElement(nt8);
rm4.setRefinementElement(nt13);
OTPatternRefinementModel prmWithNT2HostedOnNT4AndIngoingRT1AtNT2AndIngoingRT1AtNT4 = new OTPatternRefinementModel(new OTPatternRefinementModel.Builder());
prmWithNT2HostedOnNT4AndIngoingRT1AtNT2AndIngoingRT1AtNT4.setDetector(detector);
prmWithNT2HostedOnNT4AndIngoingRT1AtNT2AndIngoingRT1AtNT4.setRefinementTopology(refinementStructure);
prmWithNT2HostedOnNT4AndIngoingRT1AtNT2AndIngoingRT1AtNT4.setRelationMappings(Arrays.asList(rm3, rm4));
validCandidateForTopology4 = new RefinementCandidate(prmWithNT2HostedOnNT4AndIngoingRT1AtNT2AndIngoingRT1AtNT4, detectorWithTopology4Mapping, detectorGraph, 8);
// endregion
}
Aggregations