Search in sources :

Example 11 with TTopologyTemplate

use of org.eclipse.winery.model.tosca.TTopologyTemplate in project winery by eclipse.

the class BackendUtils method clone.

/**
 * @param topologyTemplate which should be cloned
 * @return Copy od topologyTemplate
 */
public static TTopologyTemplate clone(TTopologyTemplate topologyTemplate) {
    TTopologyTemplate topologyTemplateClone = new TTopologyTemplate();
    List<TEntityTemplate> entityTemplate = topologyTemplate.getNodeTemplateOrRelationshipTemplate();
    topologyTemplateClone.getNodeTemplateOrRelationshipTemplate().addAll(entityTemplate);
    return topologyTemplateClone;
// Copy based on http://stackoverflow.com/a/3899882
/*try {
			JAXBContext sourceJAXBContext = JAXBSupport.context.newInstance(element.getClass());
			JAXBContext targetJAXBContext = JAXBSupport.context.newInstance(element.getClass());
			return (T) targetJAXBContext.createUnmarshaller().unmarshal(new JAXBSource(sourceJAXBContext, element));
		} catch (JAXBException e) {
			logger.error("Cannot clone object", e);
			return null;
		}*/
}
Also used : TEntityTemplate(org.eclipse.winery.model.tosca.TEntityTemplate) TTopologyTemplate(org.eclipse.winery.model.tosca.TTopologyTemplate)

Example 12 with TTopologyTemplate

use of org.eclipse.winery.model.tosca.TTopologyTemplate in project winery by eclipse.

the class BackendUtilsTest method relationshipTemplateIsSerializedAsRefInXml.

@Test
public void relationshipTemplateIsSerializedAsRefInXml() throws Exception {
    TTopologyTemplate minimalTopologyTemplate = new TTopologyTemplate();
    TNodeTemplate nt1 = new TNodeTemplate("nt1");
    minimalTopologyTemplate.addNodeTemplate(nt1);
    TNodeTemplate nt2 = new TNodeTemplate("nt2");
    minimalTopologyTemplate.addNodeTemplate(nt2);
    TRelationshipTemplate rt = new TRelationshipTemplate("rt");
    minimalTopologyTemplate.addRelationshipTemplate(rt);
    rt.setSourceNodeTemplate(nt1);
    rt.setTargetNodeTemplate(nt2);
    String minimalTopologyTemplateAsXmlString = "<TopologyTemplate xmlns=\"http://docs.oasis-open.org/tosca/ns/2011/12\" xmlns:ns3=\"http://www.eclipse.org/winery/model/selfservice\" xmlns:ns4=\"http://test.winery.opentosca.org\" xmlns:winery=\"http://www.opentosca.org/winery/extensions/tosca/2013/02/12\">\n" + "  <NodeTemplate id=\"nt1\"/>\n" + "  <NodeTemplate id=\"nt2\"/>\n" + "  <RelationshipTemplate id=\"rt\">\n" + "    <SourceElement ref=\"nt1\"/>\n" + "    <TargetElement ref=\"nt2\"/>\n" + "  </RelationshipTemplate>\n" + "</TopologyTemplate>";
    org.hamcrest.MatcherAssert.assertThat(BackendUtils.getXMLAsString(minimalTopologyTemplate), CompareMatcher.isIdenticalTo(minimalTopologyTemplateAsXmlString).ignoreWhitespace());
}
Also used : TTopologyTemplate(org.eclipse.winery.model.tosca.TTopologyTemplate) TRelationshipTemplate(org.eclipse.winery.model.tosca.TRelationshipTemplate) TNodeTemplate(org.eclipse.winery.model.tosca.TNodeTemplate) Test(org.junit.Test)

Example 13 with TTopologyTemplate

use of org.eclipse.winery.model.tosca.TTopologyTemplate in project winery by eclipse.

the class BackendUtilsTest method relationshipTemplateIsSerializedAsRefInJson.

@Test
public void relationshipTemplateIsSerializedAsRefInJson() throws Exception {
    TTopologyTemplate minimalTopologyTemplate = new TTopologyTemplate();
    TNodeTemplate nt1 = new TNodeTemplate("nt1");
    minimalTopologyTemplate.addNodeTemplate(nt1);
    TNodeTemplate nt2 = new TNodeTemplate("nt2");
    minimalTopologyTemplate.addNodeTemplate(nt2);
    TRelationshipTemplate rt = new TRelationshipTemplate("rt");
    minimalTopologyTemplate.addRelationshipTemplate(rt);
    rt.setSourceNodeTemplate(nt1);
    rt.setTargetNodeTemplate(nt2);
    String minimalTopologyTemplateAsJsonString = "{\"documentation\":[],\"any\":[],\"otherAttributes\":{},\"nodeTemplates\":[{\"id\":\"nt1\",\"documentation\":[],\"any\":[],\"otherAttributes\":{},\"minInstances\":1,\"maxInstances\":\"1\"},{\"id\":\"nt2\",\"documentation\":[],\"any\":[],\"otherAttributes\":{},\"minInstances\":1,\"maxInstances\":\"1\"}],\"relationshipTemplates\":[{\"documentation\":[],\"any\":[],\"otherAttributes\":{},\"id\":\"rt\",\"sourceElement\":{\"ref\":\"nt1\"},\"targetElement\":{\"ref\":\"nt2\"}}]}";
    JSONAssert.assertEquals(minimalTopologyTemplateAsJsonString, BackendUtils.Object2JSON(minimalTopologyTemplate), true);
}
Also used : TTopologyTemplate(org.eclipse.winery.model.tosca.TTopologyTemplate) TRelationshipTemplate(org.eclipse.winery.model.tosca.TRelationshipTemplate) TNodeTemplate(org.eclipse.winery.model.tosca.TNodeTemplate) Test(org.junit.Test)

Example 14 with TTopologyTemplate

use of org.eclipse.winery.model.tosca.TTopologyTemplate in project winery by eclipse.

the class TOSCAGraphIsomorphismTest method testTOSCAComplianceRuleChecker.

@Test
public void testTOSCAComplianceRuleChecker() throws IOException, ComplianceCheckingException {
    HashMap<DefinitionsChildId, TExtensibleElements> allEntities = new HashMap<>();
    TOSCAModelPropertiesBuilder bldr = new TOSCAModelPropertiesBuilder(TEST_TARGET_NAMESPACE, "MyProperties");
    bldr.addProperty("key1", "value1");
    bldr.addProperty("key2", "value2");
    // create NodeTypes A B
    String idNodeTypeA = "idA";
    TNodeType nodeTypeA = TOSCAModelHelper.createTNodeType(idNodeTypeA, TEST_TARGET_NAMESPACE);
    String idNodeTypeB = "idB";
    TNodeType nodeTypeB = TOSCAModelHelper.createTNodeType(idNodeTypeB, TEST_TARGET_NAMESPACE);
    String idNodeTypeC = "idC";
    TNodeType nodeTypeC = TOSCAModelHelper.createTNodeType(idNodeTypeC, TEST_TARGET_NAMESPACE);
    NodeTypeId idA = TOSCAModelHelper.createNodeTypeId(idNodeTypeA);
    NodeTypeId idB = TOSCAModelHelper.createNodeTypeId(idNodeTypeB);
    NodeTypeId idC = TOSCAModelHelper.createNodeTypeId(idNodeTypeC);
    allEntities.put(idA, nodeTypeA);
    allEntities.put(idB, nodeTypeB);
    allEntities.put(idC, nodeTypeC);
    // createRelationshipTypes
    String relTypeIdAString = "adRelA";
    RelationshipTypeId relTypeIdA = new RelationshipTypeId(new QName(TEST_TARGET_NAMESPACE, relTypeIdAString));
    TRelationshipType relTypeA = TOSCAModelHelper.createTRelationshipType(relTypeIdAString, TEST_TARGET_NAMESPACE);
    allEntities.put(relTypeIdA, relTypeA);
    // createNodeTemplates
    TNodeTemplate nodeTemplate1 = TOSCAModelHelper.createTNodeTemplate("01");
    nodeTemplate1.setType(idA.getQName());
    TNodeTemplate nodeTemplate2 = TOSCAModelHelper.createTNodeTemplate("02");
    nodeTemplate2.setType(idB.getQName());
    TNodeTemplate nodeTemplate3 = TOSCAModelHelper.createTNodeTemplate("03");
    nodeTemplate3.setType(idA.getQName());
    nodeTemplate3.setProperties(bldr.build());
    TNodeTemplate nodeTemplate4 = TOSCAModelHelper.createTNodeTemplate("04");
    nodeTemplate4.setType(idB.getQName());
    TNodeTemplate nodeTemplate5 = TOSCAModelHelper.createTNodeTemplate("05");
    nodeTemplate5.setType(idA.getQName());
    TNodeTemplate nodeTemplate6 = TOSCAModelHelper.createTNodeTemplate("06");
    nodeTemplate6.setType(idB.getQName());
    TNodeTemplate nodeTemplate7 = TOSCAModelHelper.createTNodeTemplate("07");
    nodeTemplate7.setType(idA.getQName());
    nodeTemplate7.setProperties(bldr.build());
    TNodeTemplate nodeTemplate8 = TOSCAModelHelper.createTNodeTemplate("08");
    nodeTemplate8.setType(idB.getQName());
    TNodeTemplate nodeTemplate9 = TOSCAModelHelper.createTNodeTemplate("CompletelyUnrelated");
    nodeTemplate9.setType(idC.getQName());
    // create RelationshipTemplates
    TRelationshipTemplate relTemplate1 = TOSCAModelHelper.createTRelationshipTemplate("1");
    relTemplate1.setSourceNodeTemplate(nodeTemplate1);
    relTemplate1.setTargetNodeTemplate(nodeTemplate2);
    relTemplate1.setType(relTypeIdA.getQName());
    TRelationshipTemplate relTemplate2 = TOSCAModelHelper.createTRelationshipTemplate("2");
    relTemplate2.setSourceNodeTemplate(nodeTemplate3);
    relTemplate2.setTargetNodeTemplate(nodeTemplate4);
    relTemplate2.setType(relTypeIdA.getQName());
    TRelationshipTemplate relTemplate3 = TOSCAModelHelper.createTRelationshipTemplate("3");
    relTemplate3.setSourceNodeTemplate(nodeTemplate5);
    relTemplate3.setTargetNodeTemplate(nodeTemplate6);
    relTemplate3.setType(relTypeIdA.getQName());
    TRelationshipTemplate relTemplate4 = TOSCAModelHelper.createTRelationshipTemplate("4");
    relTemplate4.setSourceNodeTemplate(nodeTemplate7);
    relTemplate4.setTargetNodeTemplate(nodeTemplate8);
    relTemplate4.setType(relTypeIdA.getQName());
    // create TopologyTemplates
    List<TNodeTemplate> nodeTemplates = new ArrayList<>();
    List<TRelationshipTemplate> relationshipTemplates = new ArrayList<>();
    // create identifier
    nodeTemplates.add(nodeTemplate1);
    nodeTemplates.add(nodeTemplate2);
    relationshipTemplates.add(relTemplate1);
    TTopologyTemplate identifier = TOSCAModelHelper.createTTopologyTemplate(nodeTemplates, relationshipTemplates);
    identifier.setNodeTemplates(nodeTemplates);
    identifier.setRelationshipTemplates(relationshipTemplates);
    nodeTemplates.clear();
    relationshipTemplates.clear();
    // create required structure
    nodeTemplates.add(nodeTemplate3);
    nodeTemplates.add(nodeTemplate4);
    relationshipTemplates.add(relTemplate2);
    TTopologyTemplate requiredStructure = TOSCAModelHelper.createTTopologyTemplate(nodeTemplates, relationshipTemplates);
    requiredStructure.setNodeTemplates(nodeTemplates);
    requiredStructure.setRelationshipTemplates(relationshipTemplates);
    nodeTemplates.clear();
    relationshipTemplates.clear();
    // create topologyToSearchIn
    nodeTemplates.add(nodeTemplate5);
    nodeTemplates.add(nodeTemplate6);
    nodeTemplates.add(nodeTemplate7);
    nodeTemplates.add(nodeTemplate8);
    relationshipTemplates.add(relTemplate3);
    relationshipTemplates.add(relTemplate4);
    TTopologyTemplate topologyTemplateToSearchIn = TOSCAModelHelper.createTTopologyTemplate(nodeTemplates, relationshipTemplates);
    topologyTemplateToSearchIn.setNodeTemplates(nodeTemplates);
    topologyTemplateToSearchIn.setRelationshipTemplates(relationshipTemplates);
    nodeTemplates.clear();
    relationshipTemplates.clear();
    // create unrelated topology
    nodeTemplates.add(nodeTemplate9);
    TTopologyTemplate unrelatedTopology = TOSCAModelHelper.createTTopologyTemplate(nodeTemplates, relationshipTemplates);
    unrelatedTopology.setNodeTemplates(nodeTemplates);
    unrelatedTopology.setRelationshipTemplates(relationshipTemplates);
    nodeTemplates.clear();
    relationshipTemplates.clear();
    persist(allEntities);
    // **************** //
    // Test starts here //
    // **************** //
    ComplianceRuleChecker checker;
    // test null topologyTemplateToCheck
    checker = new ComplianceRuleChecker(null, null, null);
    ComplianceCheckingException expected = null;
    try {
        checker.checkComplianceRule();
    } catch (ComplianceCheckingException e) {
        expected = e;
    }
    assertNotNull(expected);
    assertTrue(StringUtils.equals(ComplianceCheckingException.NO_TEMPLATE_TO_CHECK, expected.getMessage()));
    checker.setToCheckTemplate(topologyTemplateToSearchIn);
    // test empty rule
    expected = null;
    try {
        checker.checkComplianceRule();
    } catch (ComplianceCheckingException e) {
        expected = e;
    }
    assertNotNull(expected);
    assertTrue(StringUtils.equals(ComplianceCheckingException.EMPTY_COMPLIANCE_RULE, expected.getMessage()));
    // test Whitelist
    checker.setRequiredStructureTemplate(requiredStructure);
    expected = null;
    try {
        checker.checkComplianceRule();
    } catch (ComplianceCheckingException e) {
        expected = e;
    }
    assertNotNull(expected);
    assertTrue(StringUtils.equals(ComplianceCheckingException.WHITELISTING_NOT_YET_IMPLEMENTED, expected.getMessage()));
    // test blacklist
    checker.setRequiredStructureTemplate(null);
    checker.setIdentifierTemplate(identifier);
    List<GraphMapping> blacklistResult = checker.checkComplianceRule();
    assertEquals(2, blacklistResult.size());
    // test completeRule
    // invalid Rule: identifier and required structure have no mapping
    checker.setIdentifierTemplate(unrelatedTopology);
    checker.setRequiredStructureTemplate(requiredStructure);
    expected = null;
    try {
        checker.checkComplianceRule();
    } catch (ComplianceCheckingException e) {
        expected = e;
    }
    assertNotNull(expected);
    assertTrue(StringUtils.equals(ComplianceCheckingException.IDENTIFIER_NOT_IN_REQUIREDSTRUCTURE, expected.getMessage()));
    // valid Rule: identifier in required structure
    // finds one violation
    checker.setIdentifierTemplate(identifier);
    checker.setRequiredStructureTemplate(requiredStructure);
    List<GraphMapping> violatingMappings = checker.checkComplianceRule();
    assertEquals(1, violatingMappings.size());
    // check the mapping.
    // must contain nodesTemplates 5 & 6 and relTemplate3
    TOSCANode identifierNode1 = checker.getIdentifierGraph().getNode("01");
    TOSCANode identifierNode2 = checker.getIdentifierGraph().getNode("02");
    TOSCAEdge identifierEdge = checker.getIdentifierGraph().getEdge(identifierNode1, identifierNode2);
    GraphMapping violatingMapping = violatingMappings.stream().findFirst().get();
    assertNotNull(violatingMapping);
    Map<TOSCANode, TOSCANode> resultMap = checker.getSubGraphMappingAsMap(violatingMapping, checker.getIdentifierGraph());
    assertTrue(resultMap.get(identifierNode1).getId().matches("05"));
    assertTrue(resultMap.get(identifierNode2).getId().matches("06"));
    assertTrue(((TOSCAEdge) violatingMapping.getEdgeCorrespondence(identifierEdge, false)).getId().matches("3"));
    // finds no violation
    checker.setRequiredStructureTemplate(identifier);
    assertEquals(0, checker.checkComplianceRule().size());
    TComplianceRule rule = new TComplianceRule();
    rule.setName("test");
    rule.setTargetNamespace(TEST_TARGET_NAMESPACE);
    rule.setIdentifier(identifier);
    rule.setRequiredStructure(requiredStructure);
}
Also used : DefinitionsChildId(org.eclipse.winery.common.ids.definitions.DefinitionsChildId) HashMap(java.util.HashMap) Lists.newArrayList(com.google.common.collect.Lists.newArrayList) ArrayList(java.util.ArrayList) TOSCAEdge(org.eclipse.winery.compliance.model.TOSCAEdge) TComplianceRule(org.eclipse.winery.model.tosca.TComplianceRule) TOSCAModelHelper.createTComplianceRule(org.eclipse.winery.compliance.TOSCAModelHelper.createTComplianceRule) TRelationshipTemplate(org.eclipse.winery.model.tosca.TRelationshipTemplate) TOSCAModelHelper.createTTopologyTemplate(org.eclipse.winery.compliance.TOSCAModelHelper.createTTopologyTemplate) TTopologyTemplate(org.eclipse.winery.model.tosca.TTopologyTemplate) TOSCANode(org.eclipse.winery.compliance.model.TOSCANode) TOSCAModelHelper.createTNodeTemplate(org.eclipse.winery.compliance.TOSCAModelHelper.createTNodeTemplate) TNodeTemplate(org.eclipse.winery.model.tosca.TNodeTemplate) ComplianceRuleChecker(org.eclipse.winery.compliance.checking.ComplianceRuleChecker) RelationshipTypeId(org.eclipse.winery.common.ids.definitions.RelationshipTypeId) QName(javax.xml.namespace.QName) TExtensibleElements(org.eclipse.winery.model.tosca.TExtensibleElements) TOSCAModelHelper.createTNodeType(org.eclipse.winery.compliance.TOSCAModelHelper.createTNodeType) TNodeType(org.eclipse.winery.model.tosca.TNodeType) ComplianceCheckingException(org.eclipse.winery.compliance.checking.ComplianceCheckingException) TRelationshipType(org.eclipse.winery.model.tosca.TRelationshipType) TOSCAModelHelper.createNodeTypeId(org.eclipse.winery.compliance.TOSCAModelHelper.createNodeTypeId) NodeTypeId(org.eclipse.winery.common.ids.definitions.NodeTypeId) GraphMapping(org.jgrapht.GraphMapping) Test(org.junit.Test)

Example 15 with TTopologyTemplate

use of org.eclipse.winery.model.tosca.TTopologyTemplate in project winery by eclipse.

the class BackendUtils method getAllNestedNodeTemplates.

/**
 * Returns a list of the topology template nested in the given service template
 */
public static List<TNodeTemplate> getAllNestedNodeTemplates(TServiceTemplate serviceTemplate) {
    List<TNodeTemplate> l = new ArrayList<>();
    TTopologyTemplate topologyTemplate = serviceTemplate.getTopologyTemplate();
    if (topologyTemplate == null) {
        return Collections.emptyList();
    }
    for (TEntityTemplate t : topologyTemplate.getNodeTemplateOrRelationshipTemplate()) {
        if (t instanceof TNodeTemplate) {
            l.add((TNodeTemplate) t);
        }
    }
    return l;
}
Also used : TEntityTemplate(org.eclipse.winery.model.tosca.TEntityTemplate) TTopologyTemplate(org.eclipse.winery.model.tosca.TTopologyTemplate) ArrayList(java.util.ArrayList) TNodeTemplate(org.eclipse.winery.model.tosca.TNodeTemplate)

Aggregations

TTopologyTemplate (org.eclipse.winery.model.tosca.TTopologyTemplate)21 TNodeTemplate (org.eclipse.winery.model.tosca.TNodeTemplate)10 Test (org.junit.Test)8 TRelationshipTemplate (org.eclipse.winery.model.tosca.TRelationshipTemplate)7 ArrayList (java.util.ArrayList)6 TEntityTemplate (org.eclipse.winery.model.tosca.TEntityTemplate)6 ServiceTemplateId (org.eclipse.winery.common.ids.definitions.ServiceTemplateId)5 TDeploymentArtifact (org.eclipse.winery.model.tosca.TDeploymentArtifact)4 IOException (java.io.IOException)3 List (java.util.List)3 QName (javax.xml.namespace.QName)3 TRequirement (org.eclipse.winery.model.tosca.TRequirement)3 ClientResponse (com.sun.jersey.api.client.ClientResponse)2 WebResource (com.sun.jersey.api.client.WebResource)2 URI (java.net.URI)2 Path (javax.ws.rs.Path)2 Produces (javax.ws.rs.Produces)2 JAXBException (javax.xml.bind.JAXBException)2 TDocumentation (org.eclipse.winery.model.tosca.TDocumentation)2 Splitting (org.eclipse.winery.repository.splitting.Splitting)2