diff --git a/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TInterfaces.java b/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TInterfaces.java new file mode 100644 index 0000000000..84835a96ca --- /dev/null +++ b/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TInterfaces.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2018 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ + +package org.eclipse.winery.model.tosca; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + +import org.eclipse.jdt.annotation.NonNull; + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "_interface" +}) +public class TInterfaces { + + @XmlElement(name = "Interface", required = true) + protected List _interface; + + @NonNull + public List getInterface() { + if (_interface == null) { + _interface = new ArrayList(); + } + return this._interface; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TInterfaces that = (TInterfaces) o; + return Objects.equals(_interface, that._interface); + } + + @Override + public int hashCode() { + return Objects.hash(_interface); + } +} diff --git a/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TNodeType.java b/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TNodeType.java index 42af3bc1c7..21bb4ebac9 100644 --- a/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TNodeType.java +++ b/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TNodeType.java @@ -43,7 +43,7 @@ public class TNodeType extends TEntityType { @XmlElement(name = "InstanceStates") protected TTopologyElementInstanceStates instanceStates; @XmlElement(name = "Interfaces") - protected TNodeType.Interfaces interfaces; + protected TInterfaces interfaces; public TNodeType() { } @@ -98,11 +98,11 @@ public void setInstanceStates(@Nullable TTopologyElementInstanceStates value) { this.instanceStates = value; } - public TNodeType.@Nullable Interfaces getInterfaces() { + public @Nullable TInterfaces getInterfaces() { return interfaces; } - public void setInterfaces(TNodeType.@Nullable Interfaces value) { + public void setInterfaces(@Nullable TInterfaces value) { this.interfaces = value; } @@ -142,56 +142,6 @@ public int hashCode() { } } - - /** - *

Java class for anonymous complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <sequence>
-     *         <element name="Interface" type="{http://docs.oasis-open.org/tosca/ns/2011/12}tInterface"
-     * maxOccurs="unbounded"/>
-     *       </sequence>
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "_interface" - }) - public static class Interfaces { - - @XmlElement(name = "Interface", required = true) - protected List _interface; - - @NonNull - public List getInterface() { - if (_interface == null) { - _interface = new ArrayList(); - } - return this._interface; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Interfaces that = (Interfaces) o; - return Objects.equals(_interface, that._interface); - } - - @Override - public int hashCode() { - return Objects.hash(_interface); - } - } - @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "requirementDefinition" @@ -227,7 +177,7 @@ public static class Builder extends TEntityType.Builder { private RequirementDefinitions requirementDefinitions; private CapabilityDefinitions capabilityDefinitions; private TTopologyElementInstanceStates instanceStates; - private Interfaces interfaces; + private TInterfaces interfaces; public Builder(String name) { super(name); @@ -252,7 +202,7 @@ public Builder setInstanceStates(TTopologyElementInstanceStates instanceStates) return this; } - public Builder setInterfaces(TNodeType.Interfaces interfaces) { + public Builder setInterfaces(TInterfaces interfaces) { this.interfaces = interfaces; return this; } @@ -323,7 +273,7 @@ public Builder addCapabilityDefinitions(TCapabilityDefinition capabilityDefiniti return addCapabilityDefinitions(tmp); } - public Builder addInterfaces(TNodeType.Interfaces interfaces) { + public Builder addInterfaces(TInterfaces interfaces) { if (interfaces == null || interfaces.getInterface().isEmpty()) { return this; } @@ -341,7 +291,7 @@ public Builder addInterfaces(List interfaces) { return this; } - TNodeType.Interfaces tmp = new TNodeType.Interfaces(); + TInterfaces tmp = new TInterfaces(); tmp.getInterface().addAll(interfaces); return addInterfaces(tmp); } @@ -351,7 +301,7 @@ public Builder addInterfaces(TInterface interfaces) { return this; } - TNodeType.Interfaces tmp = new TNodeType.Interfaces(); + TInterfaces tmp = new TInterfaces(); tmp.getInterface().add(interfaces); return addInterfaces(tmp); } diff --git a/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TRelationshipType.java b/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TRelationshipType.java index c2c3c39abb..cfbc26f9fe 100644 --- a/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TRelationshipType.java +++ b/org.eclipse.winery.model.tosca/src/main/java/org/eclipse/winery/model/tosca/TRelationshipType.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca; -import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -25,6 +24,7 @@ import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; +import org.eclipse.winery.model.tosca.constants.Namespaces; import org.eclipse.winery.model.tosca.visitor.Visitor; import org.eclipse.jdt.annotation.NonNull; @@ -33,6 +33,7 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tRelationshipType", propOrder = { "instanceStates", + "interfaces", "sourceInterfaces", "targetInterfaces", "validSource", @@ -41,10 +42,12 @@ public class TRelationshipType extends TEntityType { @XmlElement(name = "InstanceStates") protected TTopologyElementInstanceStates instanceStates; + @XmlElement(name = "Interfaces", namespace = Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE) + protected TInterfaces interfaces; @XmlElement(name = "SourceInterfaces") - protected TRelationshipType.SourceInterfaces sourceInterfaces; + protected TInterfaces sourceInterfaces; @XmlElement(name = "TargetInterfaces") - protected TRelationshipType.TargetInterfaces targetInterfaces; + protected TInterfaces targetInterfaces; @XmlElement(name = "ValidSource") protected TRelationshipType.ValidSource validSource; @XmlElement(name = "ValidTarget") @@ -56,6 +59,7 @@ public TRelationshipType() { public TRelationshipType(Builder builder) { super(builder); this.instanceStates = builder.instanceStates; + this.interfaces = builder.interfaces; this.sourceInterfaces = builder.sourceInterfaces; this.targetInterfaces = builder.targetInterfaces; this.validSource = builder.validSource; @@ -69,6 +73,7 @@ public boolean equals(Object o) { if (!super.equals(o)) return false; TRelationshipType that = (TRelationshipType) o; return Objects.equals(instanceStates, that.instanceStates) && + Objects.equals(interfaces, that.interfaces) && Objects.equals(sourceInterfaces, that.sourceInterfaces) && Objects.equals(targetInterfaces, that.targetInterfaces) && Objects.equals(validSource, that.validSource) && @@ -77,7 +82,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(super.hashCode(), instanceStates, sourceInterfaces, targetInterfaces, validSource, validTarget); + return Objects.hash(super.hashCode(), instanceStates, interfaces, sourceInterfaces, targetInterfaces, validSource, validTarget); } @Nullable @@ -89,19 +94,28 @@ public void setInstanceStates(@Nullable TTopologyElementInstanceStates value) { this.instanceStates = value; } - public TRelationshipType.@Nullable SourceInterfaces getSourceInterfaces() { + @Nullable + public TInterfaces getInterfaces() { + return interfaces; + } + + public void setInterfaces(@Nullable TInterfaces interfaces) { + this.interfaces = interfaces; + } + + public @Nullable TInterfaces getSourceInterfaces() { return sourceInterfaces; } - public void setSourceInterfaces(TRelationshipType.@Nullable SourceInterfaces value) { + public void setSourceInterfaces(@Nullable TInterfaces value) { this.sourceInterfaces = value; } - public TRelationshipType.@Nullable TargetInterfaces getTargetInterfaces() { + public @Nullable TInterfaces getTargetInterfaces() { return targetInterfaces; } - public void setTargetInterfaces(TRelationshipType.@Nullable TargetInterfaces value) { + public void setTargetInterfaces(@Nullable TInterfaces value) { this.targetInterfaces = value; } @@ -126,68 +140,6 @@ public void accept(Visitor visitor) { visitor.visit(this); } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "_interface" - }) - public static class SourceInterfaces { - - @XmlElement(name = "Interface", required = true) - protected List _interface; - - @NonNull - public List getInterface() { - if (_interface == null) { - _interface = new ArrayList(); - } - return this._interface; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - SourceInterfaces that = (SourceInterfaces) o; - return Objects.equals(_interface, that._interface); - } - - @Override - public int hashCode() { - return Objects.hash(_interface); - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "_interface" - }) - public static class TargetInterfaces { - - @XmlElement(name = "Interface", required = true) - protected List _interface; - - @NonNull - public List getInterface() { - if (_interface == null) { - _interface = new ArrayList(); - } - return this._interface; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - TargetInterfaces that = (TargetInterfaces) o; - return Objects.equals(_interface, that._interface); - } - - @Override - public int hashCode() { - return Objects.hash(_interface); - } - } - @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "") public static class ValidSource { @@ -252,8 +204,9 @@ public int hashCode() { public static class Builder extends TEntityType.Builder { private TTopologyElementInstanceStates instanceStates; - private SourceInterfaces sourceInterfaces; - private TargetInterfaces targetInterfaces; + private TInterfaces interfaces; + private TInterfaces sourceInterfaces; + private TInterfaces targetInterfaces; private ValidSource validSource; private ValidTarget validTarget; @@ -270,12 +223,12 @@ public Builder setInstanceStates(TTopologyElementInstanceStates instanceStates) return this; } - public Builder setSourceInterfaces(TRelationshipType.SourceInterfaces sourceInterfaces) { + public Builder setSourceInterfaces(TInterfaces sourceInterfaces) { this.sourceInterfaces = sourceInterfaces; return this; } - public Builder setTargetInterfaces(TRelationshipType.TargetInterfaces targetInterfaces) { + public Builder setTargetInterfaces(TInterfaces targetInterfaces) { this.targetInterfaces = targetInterfaces; return this; } @@ -310,7 +263,40 @@ public Builder setValidTarget(QName validTarget) { return setValidTarget(tmp); } - public Builder addSourceInterfaces(TRelationshipType.SourceInterfaces sourceInterfaces) { + public Builder addInterfaces(TInterfaces interfaces) { + if (interfaces == null || interfaces.getInterface().isEmpty()) { + return this; + } + + if (this.interfaces == null) { + this.interfaces = interfaces; + } else { + this.interfaces.getInterface().addAll(interfaces.getInterface()); + } + return this; + } + + public Builder addInterfaces(List interfaces) { + if (interfaces == null) { + return this; + } + + TInterfaces tmp = new TInterfaces(); + tmp.getInterface().addAll(interfaces); + return addInterfaces(tmp); + } + + public Builder addInterfaces(TInterface interfaces) { + if (interfaces == null) { + return this; + } + + TInterfaces tmp = new TInterfaces(); + tmp.getInterface().add(interfaces); + return addInterfaces(tmp); + } + + public Builder addSourceInterfaces(TInterfaces sourceInterfaces) { if (sourceInterfaces == null || sourceInterfaces.getInterface().isEmpty()) { return this; } @@ -328,7 +314,7 @@ public Builder addSourceInterfaces(List sourceInterfaces) { return this; } - TRelationshipType.SourceInterfaces tmp = new TRelationshipType.SourceInterfaces(); + TInterfaces tmp = new TInterfaces(); tmp.getInterface().addAll(sourceInterfaces); return addSourceInterfaces(tmp); } @@ -338,12 +324,12 @@ public Builder addSourceInterfaces(TInterface sourceInterfaces) { return this; } - TRelationshipType.SourceInterfaces tmp = new TRelationshipType.SourceInterfaces(); + TInterfaces tmp = new TInterfaces(); tmp.getInterface().add(sourceInterfaces); return addSourceInterfaces(tmp); } - public Builder addTargetInterfaces(TRelationshipType.TargetInterfaces targetInterfaces) { + public Builder addTargetInterfaces(TInterfaces targetInterfaces) { if (targetInterfaces == null || targetInterfaces.getInterface().isEmpty()) { return this; } @@ -361,7 +347,7 @@ public Builder addTargetInterfaces(List targetInterfaces) { return this; } - TRelationshipType.TargetInterfaces tmp = new TRelationshipType.TargetInterfaces(); + TInterfaces tmp = new TInterfaces(); tmp.getInterface().addAll(targetInterfaces); return addTargetInterfaces(tmp); } @@ -371,7 +357,7 @@ public Builder addTargetInterfaces(TInterface targetInterfaces) { return this; } - TRelationshipType.TargetInterfaces tmp = new TRelationshipType.TargetInterfaces(); + TInterfaces tmp = new TInterfaces(); tmp.getInterface().add(targetInterfaces); return addTargetInterfaces(tmp); } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/GenericArtifactsResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/GenericArtifactsResource.java index 7ab868aad9..5c18018f0d 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/GenericArtifactsResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/GenericArtifactsResource.java @@ -49,6 +49,7 @@ import org.eclipse.winery.common.ids.definitions.EntityTypeId; import org.eclipse.winery.common.ids.definitions.NodeTypeId; import org.eclipse.winery.common.ids.definitions.RelationshipTypeId; +import org.eclipse.winery.common.version.VersionUtils; import org.eclipse.winery.generators.ia.Generator; import org.eclipse.winery.model.tosca.TArtifactTemplate; import org.eclipse.winery.model.tosca.TArtifactType; @@ -299,7 +300,7 @@ private String generateName(EntityTypeId typeId, String interfaceName) { // Winery already ensures that this is a valid NCName // getName() returns the id of the nodeType: A nodeType carries the "id" attribute only (and no name attribute) - name += typeId.getXmlId().getDecoded(); + name += VersionUtils.getNameWithoutVersion(typeId.getXmlId().getDecoded()); // Two separators to distinguish node type and interface part name += Util.FORBIDDEN_CHARACTER_REPLACEMENT; @@ -397,6 +398,9 @@ private Optional findInterface(EntityTypeId id, String interfaceName if (relationshipType.getTargetInterfaces() != null) { interfaces.addAll(relationshipType.getTargetInterfaces().getInterface()); } + if (relationshipType.getInterfaces() != null) { + interfaces.addAll(relationshipType.getInterfaces().getInterface()); + } } Iterator it = interfaces.iterator(); do { diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactsResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactsResource.java index c9c7838fc8..bdbfd1bbe9 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactsResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactsResource.java @@ -13,6 +13,17 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.artifacts; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.xml.namespace.QName; + import org.eclipse.winery.model.tosca.TImplementationArtifacts.ImplementationArtifact; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.INodeTypeImplementationResourceOrRelationshipTypeImplementationResource; @@ -22,16 +33,6 @@ import org.eclipse.winery.repository.rest.resources.entitytypes.relationshiptypes.RelationshipTypeResource; import org.eclipse.winery.repository.rest.resources.entitytypes.relationshiptypes.RelationshipTypesResource; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.xml.namespace.QName; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - /** * ImplementationArtifact instead of TImplementationArtifact has to be used because of difference in the XSD at * tImplementationArtifacts vs. tDeploymentArtifacts @@ -71,10 +72,11 @@ public List getInterfacesOfAssociatedType() { List interfaces = new ArrayList<>(); if (isNodeTypeImplementation) { - NodeTypeResource typeResource = (NodeTypeResource) new NodeTypesResource().getComponentInstanceResource(type); + NodeTypeResource typeResource = new NodeTypesResource().getComponentInstanceResource(type); interfaces.addAll(typeResource.getInterfaces().onGet("true")); } else { - RelationshipTypeResource typeResource = (RelationshipTypeResource) new RelationshipTypesResource().getComponentInstanceResource(type); + RelationshipTypeResource typeResource = new RelationshipTypesResource().getComponentInstanceResource(type); + interfaces.addAll(typeResource.getInterfaces().onGet("true")); interfaces.addAll(typeResource.getSourceInterfaces().onGet("true")); interfaces.addAll(typeResource.getTargetInterfaces().onGet("true")); } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResource.java index 2a63b07512..cb0858e4d5 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResource.java @@ -13,11 +13,18 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.entitytypes.nodetypes; +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + import org.eclipse.winery.common.ids.definitions.NodeTypeId; import org.eclipse.winery.common.ids.definitions.NodeTypeImplementationId; import org.eclipse.winery.model.tosca.TExtensibleElements; +import org.eclipse.winery.model.tosca.TInterfaces; import org.eclipse.winery.model.tosca.TNodeType; -import org.eclipse.winery.model.tosca.TNodeType.Interfaces; import org.eclipse.winery.model.tosca.TNodeType.RequirementDefinitions; import org.eclipse.winery.model.tosca.TTopologyElementInstanceStates; import org.eclipse.winery.repository.rest.RestUtils; @@ -28,12 +35,6 @@ import org.eclipse.winery.repository.rest.resources.entitytypes.nodetypes.reqandcapdefs.RequirementDefinitionsResource; import org.eclipse.winery.repository.rest.resources.interfaces.InterfacesResource; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import java.util.List; - public class NodeTypeResource extends TopologyGraphElementEntityTypeResource { public NodeTypeResource(NodeTypeId id) { @@ -70,9 +71,9 @@ public InstanceStatesResource getInstanceStatesResource() { @Path("interfaces/") public InterfacesResource getInterfaces() { - Interfaces interfaces = this.getNodeType().getInterfaces(); + TInterfaces interfaces = this.getNodeType().getInterfaces(); if (interfaces == null) { - interfaces = new Interfaces(); + interfaces = new TInterfaces(); this.getNodeType().setInterfaces(interfaces); } return new InterfacesResource(this, interfaces.getInterface(), "nodeType"); diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/relationshiptypes/RelationshipTypeResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/relationshiptypes/RelationshipTypeResource.java index b57bb6a8a2..64e913db58 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/relationshiptypes/RelationshipTypeResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/relationshiptypes/RelationshipTypeResource.java @@ -13,12 +13,22 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.entitytypes.relationshiptypes; +import java.util.List; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.xml.namespace.QName; + import org.eclipse.winery.common.ids.definitions.NodeTypeImplementationId; import org.eclipse.winery.common.ids.definitions.RelationshipTypeId; import org.eclipse.winery.model.tosca.TExtensibleElements; +import org.eclipse.winery.model.tosca.TInterfaces; import org.eclipse.winery.model.tosca.TRelationshipType; -import org.eclipse.winery.model.tosca.TRelationshipType.SourceInterfaces; -import org.eclipse.winery.model.tosca.TRelationshipType.TargetInterfaces; import org.eclipse.winery.model.tosca.TRelationshipType.ValidSource; import org.eclipse.winery.model.tosca.TRelationshipType.ValidTarget; import org.eclipse.winery.model.tosca.TTopologyElementInstanceStates; @@ -30,15 +40,10 @@ import org.eclipse.winery.repository.rest.resources.entitytypes.InstanceStatesResource; import org.eclipse.winery.repository.rest.resources.entitytypes.TopologyGraphElementEntityTypeResource; import org.eclipse.winery.repository.rest.resources.interfaces.InterfacesResource; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.xml.namespace.QName; -import java.util.List; - public class RelationshipTypeResource extends TopologyGraphElementEntityTypeResource { private static final Logger LOGGER = LoggerFactory.getLogger(RelationshipTypeResource.class); @@ -70,11 +75,21 @@ public InstanceStatesResource getInstanceStatesResource() { return new InstanceStatesResource(this.getRelationshipType().getInstanceStates(), this); } + @Path("interfaces/") + public InterfacesResource getInterfaces() { + TInterfaces interfaces = this.getRelationshipType().getInterfaces(); + if (interfaces == null) { + interfaces = new TInterfaces(); + this.getRelationshipType().setInterfaces(interfaces); + } + return new InterfacesResource(this, interfaces.getInterface(), "yaml"); + } + @Path("sourceinterfaces/") public InterfacesResource getSourceInterfaces() { - SourceInterfaces interfaces = this.getRelationshipType().getSourceInterfaces(); + TInterfaces interfaces = this.getRelationshipType().getSourceInterfaces(); if (interfaces == null) { - interfaces = new SourceInterfaces(); + interfaces = new TInterfaces(); this.getRelationshipType().setSourceInterfaces(interfaces); } return new InterfacesResource(this, interfaces.getInterface(), "source"); @@ -82,9 +97,9 @@ public InterfacesResource getSourceInterfaces() { @Path("targetinterfaces/") public InterfacesResource getTargetInterfaces() { - TargetInterfaces interfaces = this.getRelationshipType().getTargetInterfaces(); + TInterfaces interfaces = this.getRelationshipType().getTargetInterfaces(); if (interfaces == null) { - interfaces = new TargetInterfaces(); + interfaces = new TInterfaces(); this.getRelationshipType().setTargetInterfaces(interfaces); } return new InterfacesResource(this, interfaces.getInterface(), "target"); diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResource.java index 81ad2eae42..5bfa048a0a 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResource.java @@ -13,7 +13,19 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.interfaces; +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + import org.eclipse.winery.model.tosca.TInterface; +import org.eclipse.winery.model.tosca.TInterfaces; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TOperation; import org.eclipse.winery.model.tosca.TRelationshipType; @@ -23,12 +35,6 @@ import org.eclipse.winery.repository.rest.resources.entitytypes.nodetypes.NodeTypeResource; import org.eclipse.winery.repository.rest.resources.entitytypes.relationshiptypes.RelationshipTypeResource; -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.List; - public class InterfacesResource { private TopologyGraphElementEntityTypeResource res; @@ -61,28 +67,23 @@ public Response onPost(List interfaceApiData) { } } + TInterfaces interfaces = new TInterfaces(); + interfaces.getInterface().clear(); + interfaces.getInterface().addAll(interfaceApiData); if (this.res instanceof RelationshipTypeResource) { TRelationshipType relationshipType = (TRelationshipType) this.res.getElement(); switch (this.interfaceType) { case "source": - TRelationshipType.SourceInterfaces sourceInterfaces = new TRelationshipType.SourceInterfaces(); - sourceInterfaces.getInterface().clear(); - sourceInterfaces.getInterface().addAll(interfaceApiData); - relationshipType.setSourceInterfaces(sourceInterfaces); + relationshipType.setSourceInterfaces(interfaces); break; - default: - // it will be target - TRelationshipType.TargetInterfaces targetInterfaces = new TRelationshipType.TargetInterfaces(); - targetInterfaces.getInterface().clear(); - targetInterfaces.getInterface().addAll(interfaceApiData); - relationshipType.setTargetInterfaces(targetInterfaces); + case "target": + relationshipType.setTargetInterfaces(interfaces); break; + default: + relationshipType.setInterfaces(interfaces); } } else if (this.res instanceof NodeTypeResource) { TNodeType nodeType = (TNodeType) this.res.getElement(); - TNodeType.Interfaces interfaces = new TNodeType.Interfaces(); - interfaces.getInterface().clear(); - interfaces.getInterface().addAll(interfaceApiData); nodeType.setInterfaces(interfaces); } else { throw new IllegalStateException("Interfaces are not supported for this element type!"); @@ -92,7 +93,7 @@ public Response onPost(List interfaceApiData) { } @GET - @Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) + @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public List onGet(@QueryParam("selectData") String selectData) { if (selectData == null) { return this.interfaces; @@ -109,5 +110,4 @@ public List onGet(@QueryParam("selectData") String selectData) { return list; } - } diff --git a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResourceTest.java b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResourceTest.java new file mode 100644 index 0000000000..fbbac26106 --- /dev/null +++ b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResourceTest.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2018 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ + +package org.eclipse.winery.repository.rest.resources.interfaces; + +import org.eclipse.winery.repository.rest.resources.AbstractResourceTest; + +import org.junit.Test; + +public class InterfacesResourceTest extends AbstractResourceTest { + + @Test + public void createConfigureInterface() throws Exception { + this.setRevisionTo("origin/plain"); + this.assertNoContentPost("relationshiptypes/http%253A%252F%252Fplain.winery.opentosca.org%252Frelationshiptypes/RelationshipTypeWithoutProperties/interfaces/", + "entitytypes/interfaces/create_configure_interface.json"); + this.assertGet("relationshiptypes/http%253A%252F%252Fplain.winery.opentosca.org%252Frelationshiptypes/RelationshipTypeWithoutProperties/interfaces/", + "entitytypes/interfaces/create_configure_interface_result.json"); + this.assertGet("relationshiptypes/http%253A%252F%252Fplain.winery.opentosca.org%252Frelationshiptypes/RelationshipTypeWithoutProperties", + "entitytypes/interfaces/create_configure_interface_result.xml"); + } +} diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface.json new file mode 100644 index 0000000000..a00156bc50 --- /dev/null +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface.json @@ -0,0 +1,19 @@ +[ + { + "operation": [ + { + "name": "pre_configure_source" + }, + { + "name": "pre_configure_target" + }, + { + "name": "post_configure_source" + }, + { + "name": "post_configure_target" + } + ], + "name": "http://opentosca.org/interfaces/relationship/configure" + } +] \ No newline at end of file diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface_result.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface_result.json new file mode 100644 index 0000000000..3c12efec24 --- /dev/null +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface_result.json @@ -0,0 +1,43 @@ +[ + { + "operation": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "pre_configure_source" + }, + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "pre_configure_target" + }, + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "post_configure_source" + }, + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "post_configure_target" + } + ], + "name": "http://opentosca.org/interfaces/relationship/configure" + } +] \ No newline at end of file diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface_result.xml b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface_result.xml new file mode 100644 index 0000000000..f85ba18439 --- /dev/null +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface_result.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/org.eclipse.winery.repository.ui/src/app/instance/instance.service.ts b/org.eclipse.winery.repository.ui/src/app/instance/instance.service.ts index a480714a60..33861f54b9 100644 --- a/org.eclipse.winery.repository.ui/src/app/instance/instance.service.ts +++ b/org.eclipse.winery.repository.ui/src/app/instance/instance.service.ts @@ -52,8 +52,8 @@ export class InstanceService { 'Boundary Definitions', 'Tags', 'Constraint Checking', 'Documentation', 'XML']; break; case ToscaTypes.RelationshipType: - subMenu = ['README', 'LICENSE', 'Visual Appearance', 'Instance States', 'Source Interfaces', 'Target Interfaces', - 'Valid Sources and Targets', 'Implementations', 'Properties Definition', + subMenu = ['README', 'LICENSE', 'Visual Appearance', 'Instance States', 'Source Interfaces', 'Interfaces', + 'Target Interfaces', 'Valid Sources and Targets', 'Implementations', 'Properties Definition', 'Inheritance', 'Documentation', 'XML']; break; case ToscaTypes.ArtifactType: diff --git a/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.component.ts b/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.component.ts index e922b74c50..20af32b858 100644 --- a/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.component.ts +++ b/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.component.ts @@ -30,8 +30,8 @@ import { Utils } from '../../../wineryUtils/utils'; import { SelectableListComponent } from './selectableList/selectableList.component'; import { WineryVersion } from '../../../model/wineryVersion'; import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; -import { LifecycleInterface } from './lifecycle'; import { Router } from '@angular/router'; +import { Interfaces } from './interfaces'; @Component({ selector: 'winery-instance-interfaces', @@ -260,19 +260,21 @@ export class InterfacesComponent implements OnInit { // region ########## Generate Lifecycle Interface ########## generateLifecycleInterface(): void { const lifecycle = new InterfacesApiData(); - lifecycle.name = LifecycleInterface.INTERFACE; - if (this.toscaType === ToscaTypes.RelationshipType) { - if (this.route.url.endsWith('sourceinterfaces')) { - lifecycle.name = LifecycleInterface.INTERFACE + '/source'; - } else if (this.route.url.endsWith('targetinterfaces')) { - lifecycle.name = LifecycleInterface.INTERFACE + '/target'; - } + if (this.toscaType === ToscaTypes.RelationshipType && this.route.url.endsWith('/interfaces')) { + lifecycle.name = Interfaces.RELATIONSHIP_CONFIGURE; + lifecycle.operation.push(new InterfaceOperationApiData(Interfaces.RELATIONSHIP_CONFIGURE_PRE_CONFIGURE_SOURCE)); + lifecycle.operation.push(new InterfaceOperationApiData(Interfaces.RELATIONSHIP_CONFIGURE_PRE_CONFIGURE_TARGET)); + lifecycle.operation.push(new InterfaceOperationApiData(Interfaces.RELATIONSHIP_CONFIGURE_POST_CONFIGURE_SOURCE)); + lifecycle.operation.push(new InterfaceOperationApiData(Interfaces.RELATIONSHIP_CONFIGURE_POST_CONFIGURE_TARGET)); + } else { + // Node Types and Relationship Types (Source and Target Interface) + lifecycle.name = Interfaces.LIFECYCLE_STANDARD; + lifecycle.operation.push(new InterfaceOperationApiData(Interfaces.LIFECYCLE_STANDARD_INSTALL)); + lifecycle.operation.push(new InterfaceOperationApiData(Interfaces.LIFECYCLE_STANDARD_CONFIGURE)); + lifecycle.operation.push(new InterfaceOperationApiData(Interfaces.LIFECYCLE_STANDARD_START)); + lifecycle.operation.push(new InterfaceOperationApiData(Interfaces.LIFECYCLE_STANDARD_STOP)); + lifecycle.operation.push(new InterfaceOperationApiData(Interfaces.LIFECYCLE_STANDARD_UNINSTALL)); } - lifecycle.operation.push(new InterfaceOperationApiData(LifecycleInterface.INSTALL)); - lifecycle.operation.push(new InterfaceOperationApiData(LifecycleInterface.CONFIGURE)); - lifecycle.operation.push(new InterfaceOperationApiData(LifecycleInterface.START)); - lifecycle.operation.push(new InterfaceOperationApiData(LifecycleInterface.STOP)); - lifecycle.operation.push(new InterfaceOperationApiData(LifecycleInterface.UNINSTALL)); this.interfacesData.push(lifecycle); this.interfaceComponent.selectItem(lifecycle); } @@ -283,7 +285,8 @@ export class InterfacesComponent implements OnInit { return false; } const lifecycleId = this.interfacesData.findIndex((value) => { - return value.name.startsWith(LifecycleInterface.INTERFACE); + return value.name.startsWith(Interfaces.LIFECYCLE_STANDARD) + || value.name.startsWith(Interfaces.RELATIONSHIP_CONFIGURE); }); return lifecycleId !== -1; } diff --git a/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.service.ts b/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.service.ts index b2092cfa00..182353cebd 100644 --- a/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.service.ts +++ b/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.service.ts @@ -84,6 +84,7 @@ export class InterfacesService { getRelationshipInterfaces(url: string): Observable { return forkJoin( + this.get(backendBaseURL + url + '/interfaces/'), this.get(backendBaseURL + url + '/targetinterfaces/'), this.get(backendBaseURL + url + '/sourceinterfaces/') ).pipe(map(res => { diff --git a/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.ts b/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.ts new file mode 100644 index 0000000000..cbd9bf229c --- /dev/null +++ b/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/interfaces.ts @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2018 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ +export enum Interfaces { + + LIFECYCLE_STANDARD = 'http://opentosca.org/interfaces/lifecycle', + LIFECYCLE_STANDARD_INSTALL = 'install', + LIFECYCLE_STANDARD_CONFIGURE = 'configure', + LIFECYCLE_STANDARD_START = 'start', + LIFECYCLE_STANDARD_STOP = 'stop', + LIFECYCLE_STANDARD_UNINSTALL = 'uninstall', + + RELATIONSHIP_CONFIGURE = 'http://docs.oasis-open.org/tosca/ns/2011/12/interfaces/relationship/configure', + RELATIONSHIP_CONFIGURE_PRE_CONFIGURE_SOURCE = 'preConfigureSource', + RELATIONSHIP_CONFIGURE_PRE_CONFIGURE_TARGET = 'preConfigureTarget', + RELATIONSHIP_CONFIGURE_POST_CONFIGURE_SOURCE = 'postConfigureSource', + RELATIONSHIP_CONFIGURE_POST_CONFIGURE_TARGET = 'postConfigureTarget' +} diff --git a/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/lifecycle.ts b/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/lifecycle.ts deleted file mode 100644 index 77120e1efe..0000000000 --- a/org.eclipse.winery.repository.ui/src/app/instance/sharedComponents/interfaces/lifecycle.ts +++ /dev/null @@ -1,22 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2018 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -export enum LifecycleInterface { - INTERFACE = 'http://opentosca.org/interfaces/lifecycle', - INSTALL = 'install', - CONFIGURE = 'configure', - START = 'start', - STOP = 'stop', - UNINSTALL = 'uninstall' -} diff --git a/org.eclipse.winery.repository.ui/src/app/wineryMainModules/relationshipTypes/relationshipTypeRouter.module.ts b/org.eclipse.winery.repository.ui/src/app/wineryMainModules/relationshipTypes/relationshipTypeRouter.module.ts index dffef09dc8..b07c7220e0 100644 --- a/org.eclipse.winery.repository.ui/src/app/wineryMainModules/relationshipTypes/relationshipTypeRouter.module.ts +++ b/org.eclipse.winery.repository.ui/src/app/wineryMainModules/relationshipTypes/relationshipTypeRouter.module.ts @@ -45,6 +45,7 @@ const relationshipTypeRoutes: Routes = [ {path: 'visualappearance', component: VisualAppearanceComponent}, {path: 'instancestates', component: InstanceStatesComponent}, {path: 'sourceinterfaces', component: InterfacesComponent}, + {path: 'interfaces', component: InterfacesComponent}, {path: 'targetinterfaces', component: InterfacesComponent}, {path: 'validsourcesandtargets', component: ValidSourcesAndTargetsComponent}, {path: 'implementations', component: ImplementationsComponent}, diff --git a/org.eclipse.winery.repository.ui/src/assets/img/containers/rt/rt-FrameTopLarge.jpg b/org.eclipse.winery.repository.ui/src/assets/img/containers/rt/rt-FrameTopLarge.jpg index c0875c9906..d09885ac94 100644 Binary files a/org.eclipse.winery.repository.ui/src/assets/img/containers/rt/rt-FrameTopLarge.jpg and b/org.eclipse.winery.repository.ui/src/assets/img/containers/rt/rt-FrameTopLarge.jpg differ diff --git a/org.eclipse.winery.repository.ui/src/css/wineryRepository.css b/org.eclipse.winery.repository.ui/src/css/wineryRepository.css index 69e28ae5a4..9616ffcf83 100644 --- a/org.eclipse.winery.repository.ui/src/css/wineryRepository.css +++ b/org.eclipse.winery.repository.ui/src/css/wineryRepository.css @@ -295,6 +295,9 @@ div.serviceTemplate div.bottom { div.mainContentContainer.relationshipType div.top { background: url('../assets/img/containers/rt/rt-FrameTopLarge.jpg'); } +div.mainContentContainer.relationshipType div.top.twolines { + height: 208px; +} div.mainContentContainer.relationshipType div.middle { background: url('../assets/img/containers/rt/rt-FrameMiddle.jpg'); diff --git a/org.eclipse.winery.yaml.converter/src/main/java/org/eclipse/winery/yaml/converter/xml/X2YConverter.java b/org.eclipse.winery.yaml.converter/src/main/java/org/eclipse/winery/yaml/converter/xml/X2YConverter.java index f7f8aa4ff9..46d577d2ab 100644 --- a/org.eclipse.winery.yaml.converter/src/main/java/org/eclipse/winery/yaml/converter/xml/X2YConverter.java +++ b/org.eclipse.winery.yaml.converter/src/main/java/org/eclipse/winery/yaml/converter/xml/X2YConverter.java @@ -13,25 +13,84 @@ *******************************************************************************/ package org.eclipse.winery.yaml.converter.xml; -import org.eclipse.collections.impl.bimap.mutable.HashBiMap; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.winery.common.ids.definitions.*; -import org.eclipse.winery.model.tosca.*; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.TreeSet; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.xml.namespace.QName; + +import org.eclipse.winery.common.ids.definitions.ArtifactTemplateId; +import org.eclipse.winery.common.ids.definitions.ArtifactTypeId; +import org.eclipse.winery.common.ids.definitions.CapabilityTypeId; +import org.eclipse.winery.common.ids.definitions.DefinitionsChildId; +import org.eclipse.winery.common.ids.definitions.NodeTypeId; +import org.eclipse.winery.common.ids.definitions.NodeTypeImplementationId; +import org.eclipse.winery.common.ids.definitions.PolicyTemplateId; +import org.eclipse.winery.common.ids.definitions.PolicyTypeId; +import org.eclipse.winery.common.ids.definitions.RelationshipTypeId; +import org.eclipse.winery.common.ids.definitions.RelationshipTypeImplementationId; +import org.eclipse.winery.common.ids.definitions.RequirementTypeId; +import org.eclipse.winery.model.tosca.Definitions; +import org.eclipse.winery.model.tosca.TArtifactTemplate; +import org.eclipse.winery.model.tosca.TBoolean; +import org.eclipse.winery.model.tosca.TBoundaryDefinitions; +import org.eclipse.winery.model.tosca.TCapability; +import org.eclipse.winery.model.tosca.TDeploymentArtifacts; +import org.eclipse.winery.model.tosca.TDocumentation; +import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TEntityType; +import org.eclipse.winery.model.tosca.TImplementationArtifact; +import org.eclipse.winery.model.tosca.TImplementationArtifacts; +import org.eclipse.winery.model.tosca.TInterface; +import org.eclipse.winery.model.tosca.TInterfaces; +import org.eclipse.winery.model.tosca.TNodeTypeImplementation; +import org.eclipse.winery.model.tosca.TOperation; +import org.eclipse.winery.model.tosca.TParameter; +import org.eclipse.winery.model.tosca.TPolicy; +import org.eclipse.winery.model.tosca.TPolicyTemplate; +import org.eclipse.winery.model.tosca.TRelationshipTypeImplementation; +import org.eclipse.winery.model.tosca.TRequirement; +import org.eclipse.winery.model.tosca.TRequirementType; +import org.eclipse.winery.model.tosca.TTag; +import org.eclipse.winery.model.tosca.TTags; +import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.kvproperties.PropertyDefinitionKV; import org.eclipse.winery.model.tosca.kvproperties.WinerysPropertiesDefinition; import org.eclipse.winery.model.tosca.utils.ModelUtilities; -import org.eclipse.winery.model.tosca.yaml.*; +import org.eclipse.winery.model.tosca.yaml.TArtifactDefinition; import org.eclipse.winery.model.tosca.yaml.TArtifactType; +import org.eclipse.winery.model.tosca.yaml.TCapabilityAssignment; import org.eclipse.winery.model.tosca.yaml.TCapabilityDefinition; import org.eclipse.winery.model.tosca.yaml.TCapabilityType; +import org.eclipse.winery.model.tosca.yaml.TImplementation; +import org.eclipse.winery.model.tosca.yaml.TImportDefinition; +import org.eclipse.winery.model.tosca.yaml.TInterfaceDefinition; import org.eclipse.winery.model.tosca.yaml.TNodeTemplate; import org.eclipse.winery.model.tosca.yaml.TNodeType; +import org.eclipse.winery.model.tosca.yaml.TOperationDefinition; +import org.eclipse.winery.model.tosca.yaml.TPolicyDefinition; import org.eclipse.winery.model.tosca.yaml.TPolicyType; +import org.eclipse.winery.model.tosca.yaml.TPropertyAssignment; +import org.eclipse.winery.model.tosca.yaml.TPropertyAssignmentOrDefinition; +import org.eclipse.winery.model.tosca.yaml.TPropertyDefinition; import org.eclipse.winery.model.tosca.yaml.TRelationshipTemplate; import org.eclipse.winery.model.tosca.yaml.TRelationshipType; +import org.eclipse.winery.model.tosca.yaml.TRequirementAssignment; import org.eclipse.winery.model.tosca.yaml.TRequirementDefinition; import org.eclipse.winery.model.tosca.yaml.TServiceTemplate; +import org.eclipse.winery.model.tosca.yaml.TSubstitutionMappings; +import org.eclipse.winery.model.tosca.yaml.TTopologyTemplateDefinition; import org.eclipse.winery.model.tosca.yaml.support.Defaults; import org.eclipse.winery.model.tosca.yaml.support.Metadata; import org.eclipse.winery.model.tosca.yaml.support.TMapRequirementAssignment; @@ -43,18 +102,12 @@ import org.eclipse.winery.yaml.common.writer.yaml.Writer; import org.eclipse.winery.yaml.converter.xml.support.TypeConverter; import org.eclipse.winery.yaml.converter.xml.support.ValueConverter; + +import org.eclipse.collections.impl.bimap.mutable.HashBiMap; +import org.eclipse.jdt.annotation.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.xml.namespace.QName; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - public class X2YConverter { public final static Logger LOGGER = LoggerFactory.getLogger(X2YConverter.class); @@ -302,23 +355,7 @@ public Map convert(org.eclipse.winery.model.tosca.TRe ); } - public Map convert(org.eclipse.winery.model.tosca.TRelationshipType.SourceInterfaces node, TRelationshipTypeImplementation implementation) { - if (Objects.isNull(node)) return null; - return node.getInterface().stream() - .filter(Objects::nonNull) - .map(entry -> convert( - entry, - Optional.ofNullable(implementation.getImplementationArtifacts()).orElse(new TImplementationArtifacts()) - .getImplementationArtifact().stream() - .filter(impl -> Objects.nonNull(impl) && impl.getInterfaceName().equals(entry.getName())) - .collect(Collectors.toList()) - ) - ) - .flatMap(entry -> entry.entrySet().stream()) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - - public Map convert(org.eclipse.winery.model.tosca.TRelationshipType.TargetInterfaces node, TRelationshipTypeImplementation implementation) { + public Map convert(TInterfaces node, TRelationshipTypeImplementation implementation) { if (Objects.isNull(node)) return null; return node.getInterface().stream() .filter(Objects::nonNull) @@ -425,7 +462,7 @@ public Metadata convert(TTags node) { Metadata::new)); } - public Map convert(org.eclipse.winery.model.tosca.TNodeType.Interfaces node, TNodeTypeImplementation implementation) { + public Map convert(TInterfaces node, TNodeTypeImplementation implementation) { if (Objects.isNull(node)) return null; return node.getInterface().stream() .filter(Objects::nonNull) @@ -619,26 +656,13 @@ public QName convert(QName node, DefinitionsChildId id) { ); } - public Map convert(org.eclipse.winery.model.tosca.TRelationshipType.SourceInterfaces node) { - if (Objects.isNull(node)) return null; - return node.getInterface().stream() - .filter(Objects::nonNull) - .collect(Collectors.toMap( - TInterface::getName, - entry -> new TInterfaceDefinition.Builder() - .addOperations(convertOperations(entry.getOperation(), new ArrayList<>())) - .build() - )); - } - - public Map convert(org.eclipse.winery.model.tosca.TRelationshipType.TargetInterfaces node) { + public Map convert(TInterfaces node) { if (Objects.isNull(node)) return null; return node.getInterface().stream() .filter(Objects::nonNull) .collect(Collectors.toMap( TInterface::getName, entry -> new TInterfaceDefinition.Builder() - .addOperations(convert(entry.getOperation())) .addOperations(convertOperations(entry.getOperation(), new ArrayList<>())) .build() ));