Search in sources :

Example 1 with MappingEntity

use of io.github.edmm.core.parser.MappingEntity in project winery by eclipse.

the class EdmmConverterTest method transformProperties.

@Test
void transformProperties() {
    // region *** build the TopologyTemplate ***
    TTopologyTemplate.Builder topology = new TTopologyTemplate.Builder();
    topology.addNodeTemplate(nodeTemplates.get("test_node_3"));
    // endregion
    TServiceTemplate serviceTemplate = new TServiceTemplate();
    serviceTemplate.setTopologyTemplate(topology.build());
    EdmmConverter edmmConverter = new EdmmConverter(nodeTypes, relationshipTypes, nodeTypeImplementations, relationshipTypeImplementations, artifactTemplates, edmmTypeExtendsMapping, edmm1to1Mapping);
    EntityGraph transform = edmmConverter.transform(serviceTemplate);
    assertNotNull(transform);
    assertTrue(transform.vertexSet().stream().anyMatch(entity -> entity instanceof MappingEntity && entity.getName().equals("properties")));
    Stream.of("os_family", "public_key", "ssh_port").forEach(key -> {
        assertTrue(transform.vertexSet().stream().anyMatch(entity -> entity instanceof MappingEntity && entity.getName().equals(key) && entity.getParent().isPresent() && entity.getParent().get().getName().equals("properties") && entity.getChildren().size() == 1));
    });
    Stream.of("os_family", "public_key", "ssh_port").forEach(key -> {
        assertTrue(transform.vertexSet().stream().anyMatch(entity -> entity instanceof ScalarEntity && entity.getName().equals(key) && !((ScalarEntity) entity).getValue().isEmpty() && entity.getParent().isPresent() && entity.getParent().get().getName().equals("properties")));
    });
}
Also used : EntityGraph(io.github.edmm.core.parser.EntityGraph) Assertions.assertNotNull(org.junit.jupiter.api.Assertions.assertNotNull) Arrays(java.util.Arrays) StringWriter(java.io.StringWriter) TTopologyTemplate(org.eclipse.winery.model.tosca.TTopologyTemplate) TServiceTemplate(org.eclipse.winery.model.tosca.TServiceTemplate) Test(org.junit.jupiter.api.Test) EdmmDependantTest(org.eclipse.winery.edmm.EdmmDependantTest) Entity(io.github.edmm.core.parser.Entity) MappingEntity(io.github.edmm.core.parser.MappingEntity) Stream(java.util.stream.Stream) EntityGraph(io.github.edmm.core.parser.EntityGraph) Assertions.assertTrue(org.junit.jupiter.api.Assertions.assertTrue) Optional(java.util.Optional) ScalarEntity(io.github.edmm.core.parser.ScalarEntity) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) UnsupportedEncodingException(java.io.UnsupportedEncodingException) TTopologyTemplate(org.eclipse.winery.model.tosca.TTopologyTemplate) ScalarEntity(io.github.edmm.core.parser.ScalarEntity) MappingEntity(io.github.edmm.core.parser.MappingEntity) TServiceTemplate(org.eclipse.winery.model.tosca.TServiceTemplate) Test(org.junit.jupiter.api.Test) EdmmDependantTest(org.eclipse.winery.edmm.EdmmDependantTest)

Example 2 with MappingEntity

use of io.github.edmm.core.parser.MappingEntity in project winery by eclipse.

the class EdmmConverter method createNode.

private void createNode(TNodeTemplate nodeTemplate, EntityGraph entityGraph) {
    // create the component inside the topology.
    EntityId componentNodeId = EntityGraph.COMPONENTS.extend(nodeTemplate.getId());
    entityGraph.addEntity(new MappingEntity(componentNodeId, entityGraph));
    // add the type to the model
    EntityId nodeTypeEntityId = this.createType(nodeTypes.get(nodeTemplate.getType()), EntityGraph.COMPONENT_TYPES, entityGraph);
    entityGraph.addEntity(new ScalarEntity(nodeTypeEntityId.getName(), componentNodeId.extend(DefaultKeys.TYPE), entityGraph));
    createProperties(nodeTemplate, componentNodeId, entityGraph);
    createArtifact(nodeTemplate, componentNodeId, entityGraph);
    createOperations(nodeTypes.get(nodeTemplate.getType()), componentNodeId, entityGraph);
}
Also used : EntityId(io.github.edmm.core.parser.EntityId) ScalarEntity(io.github.edmm.core.parser.ScalarEntity) MappingEntity(io.github.edmm.core.parser.MappingEntity)

Example 3 with MappingEntity

use of io.github.edmm.core.parser.MappingEntity in project winery by eclipse.

the class EdmmConverter method createPropertiesDefinition.

private void createPropertiesDefinition(TEntityType toscaType, EntityId typeEntityId, EntityGraph entityGraph) {
    if (Objects.nonNull(toscaType.getWinerysPropertiesDefinition())) {
        EntityId propertiesEntityId = typeEntityId.extend(DefaultKeys.PROPERTIES);
        entityGraph.addEntity(new MappingEntity(propertiesEntityId, entityGraph));
        toscaType.getWinerysPropertiesDefinition().getPropertyDefinitions().forEach(propertyDef -> {
            EntityId propertyEntityId = propertiesEntityId.extend(propertyDef.getKey());
            entityGraph.addEntity(new MappingEntity(propertyEntityId, entityGraph));
            String normalizedType = propertyDef.getType().replace("xsd:", "");
            EntityId propertyTypeEntityId = propertyEntityId.extend(DefaultKeys.TYPE);
            entityGraph.addEntity(new ScalarEntity(normalizedType, propertyTypeEntityId, entityGraph));
        });
    }
}
Also used : EntityId(io.github.edmm.core.parser.EntityId) ScalarEntity(io.github.edmm.core.parser.ScalarEntity) MappingEntity(io.github.edmm.core.parser.MappingEntity)

Example 4 with MappingEntity

use of io.github.edmm.core.parser.MappingEntity in project winery by eclipse.

the class EdmmConverter method createOperations.

private void createOperations(TEntityType type, EntityId nodeTypeEntityId, EntityGraph entityGraph) {
    if (type instanceof TNodeType && Objects.nonNull(((TNodeType) type).getInterfaces())) {
        List<TInterface> interfaces = ((TNodeType) type).getInterfaces();
        interfaces.forEach(anInterface -> {
            anInterface.getOperations().forEach(operation -> {
                EntityId operationsEntityId = nodeTypeEntityId.extend(DefaultKeys.OPERATIONS);
                entityGraph.addEntity(new MappingEntity(operationsEntityId, entityGraph));
                TNodeTypeImplementation implementation = nodeTypeImplementations.values().stream().filter(impl -> impl.getNodeType().equals(type.getQName())).findFirst().orElse(null);
                String path = getImplementationForOperation(implementation, anInterface.getName(), operation.getName());
                EntityId operationId = operationsEntityId.extend(operation.getName());
                createPathReferenceEntity(entityGraph, path, operationId);
            });
        });
    }
}
Also used : EntityId(io.github.edmm.core.parser.EntityId) TInterface(org.eclipse.winery.model.tosca.TInterface) TNodeTypeImplementation(org.eclipse.winery.model.tosca.TNodeTypeImplementation) MappingEntity(io.github.edmm.core.parser.MappingEntity) TNodeType(org.eclipse.winery.model.tosca.TNodeType)

Example 5 with MappingEntity

use of io.github.edmm.core.parser.MappingEntity in project winery by eclipse.

the class EdmmConverter method createTechnologyMapping.

private void createTechnologyMapping(List<TNodeTemplate> nodeTemplates, EntityGraph entityGraph) {
    Map<String, List<TNodeTemplate>> deploymentTechnologyMapping = new HashMap<>();
    for (TNodeTemplate nodeTemplate : nodeTemplates) {
        Map<QName, String> attributes = nodeTemplate.getOtherAttributes();
        String key = attributes.get(new QName(TOSCA_WINERY_EXTENSIONS_NAMESPACE, "deployment-technology"));
        if (key != null) {
            deploymentTechnologyMapping.computeIfAbsent(key, k -> new ArrayList<>());
            deploymentTechnologyMapping.get(key).add(nodeTemplate);
        }
    }
    if (!deploymentTechnologyMapping.isEmpty()) {
        entityGraph.addEntity(new MappingEntity(EntityGraph.ORCHESTRATION_TECHNOLOGY, entityGraph));
        deploymentTechnologyMapping.forEach((key, nodes) -> {
            EntityId entity = EntityGraph.ORCHESTRATION_TECHNOLOGY.extend(key);
            entityGraph.addEntity(new SequenceEntity(entity, entityGraph));
            for (TNodeTemplate nodeTemplate : nodes) {
                EntityId valueEntity = entity.extend(nodeTemplate.getId());
                entityGraph.addEntity(new ScalarEntity(nodeTemplate.getId(), valueEntity, entityGraph));
            }
        });
    }
}
Also used : EntityId(io.github.edmm.core.parser.EntityId) SequenceEntity(io.github.edmm.core.parser.SequenceEntity) HashMap(java.util.HashMap) QName(javax.xml.namespace.QName) ScalarEntity(io.github.edmm.core.parser.ScalarEntity) ArrayList(java.util.ArrayList) List(java.util.List) TNodeTemplate(org.eclipse.winery.model.tosca.TNodeTemplate) MappingEntity(io.github.edmm.core.parser.MappingEntity)

Aggregations

MappingEntity (io.github.edmm.core.parser.MappingEntity)11 EntityId (io.github.edmm.core.parser.EntityId)9 ScalarEntity (io.github.edmm.core.parser.ScalarEntity)9 SequenceEntity (io.github.edmm.core.parser.SequenceEntity)4 QName (javax.xml.namespace.QName)3 TNodeTemplate (org.eclipse.winery.model.tosca.TNodeTemplate)3 Entity (io.github.edmm.core.parser.Entity)2 EntityGraph (io.github.edmm.core.parser.EntityGraph)2 TNodeType (org.eclipse.winery.model.tosca.TNodeType)2 StringWriter (java.io.StringWriter)1 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Optional (java.util.Optional)1 Stream (java.util.stream.Stream)1 EdmmDependantTest (org.eclipse.winery.edmm.EdmmDependantTest)1 TEntityType (org.eclipse.winery.model.tosca.TEntityType)1 TInterface (org.eclipse.winery.model.tosca.TInterface)1