From 900ac42b0ce9931945b27c7b50e966b732671432 Mon Sep 17 00:00:00 2001 From: Lukas Harzenetter Date: Tue, 27 Jul 2021 18:00:03 +0200 Subject: [PATCH] fix test cases Signed-off-by: Lukas Harzenetter --- .../compliance/ToscaGraphIsomorphismTest.java | 9 +- .../adaptation/enhance/EnhancementUtils.java | 2 +- .../adaptation/placement/PlacementUtils.java | 8 +- .../winery/model/tosca/HasIdAndTags.java | 101 ++++++++++++ .../eclipse/winery/model/tosca/HasTags.java | 4 +- .../winery/model/tosca/TEntityType.java | 79 ++------- .../tosca/TEntityTypeImplementation.java | 68 +------- .../tosca/TExtensibleElementWithTags.java | 104 ++++++++++++ .../winery/model/tosca/TServiceTemplate.java | 58 +------ .../org/eclipse/winery/model/tosca/TTag.java | 11 +- .../org/eclipse/winery/model/tosca/TTags.java | 153 ------------------ .../tosca/extensions/OTComplianceRule.java | 38 +---- .../model/tosca/utils/ModelUtilities.java | 57 ++++--- .../winery/model/tosca/visitor/Visitor.java | 5 +- .../winery/model/tosca/xml/XHasIdAndTags.java | 101 ++++++++++++ .../winery/model/tosca/xml/XHasTags.java | 4 +- .../model/tosca/xml/XTEntityTemplate.java | 4 +- .../winery/model/tosca/xml/XTEntityType.java | 76 +-------- .../tosca/xml/XTEntityTypeImplementation.java | 69 +------- .../xml/XTExtensibleElementWithTags.java | 104 ++++++++++++ .../tosca/xml/XTImplementationArtifact.java | 18 +-- .../model/tosca/xml/XTServiceTemplate.java | 63 +------- .../eclipse/winery/model/tosca/xml/XTTag.java | 7 +- .../winery/model/tosca/xml/XTTags.java | 153 ------------------ .../xml/extensions/XOTComplianceRule.java | 39 +---- .../model/tosca/xml/visitor/Visitor.java | 5 +- .../winery/repository/rest/RestUtils.java | 32 ++-- .../AbstractComponentInstanceResource.java | 45 +++--- .../ComplianceRuleResource.java | 4 +- .../dataflowmodels/DataFlowResource.java | 5 +- .../ServiceTemplateResource.java | 116 +++++++------ .../ServiceTemplatesResource.java | 46 +++--- .../TopologyTemplateResource.java | 2 +- .../xml/converter/FromCanonical.java | 18 +-- .../repository/xml/converter/ToCanonical.java | 31 +++- .../yaml/converter/FromCanonical.java | 66 ++------ .../yaml/converter/ToCanonical.java | 33 ++-- .../xml/XmlRepositoryIntegrationTests.java | 12 +- .../DeployableComponentsToscaConverter.java | 28 ++-- 39 files changed, 727 insertions(+), 1051 deletions(-) create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasIdAndTags.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElementWithTags.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTags.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasIdAndTags.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElementWithTags.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTags.java diff --git a/org.eclipse.winery.compliance/src/test/java/org/eclipse/winery/compliance/ToscaGraphIsomorphismTest.java b/org.eclipse.winery.compliance/src/test/java/org/eclipse/winery/compliance/ToscaGraphIsomorphismTest.java index b496e2ad38..3527f27931 100644 --- a/org.eclipse.winery.compliance/src/test/java/org/eclipse/winery/compliance/ToscaGraphIsomorphismTest.java +++ b/org.eclipse.winery.compliance/src/test/java/org/eclipse/winery/compliance/ToscaGraphIsomorphismTest.java @@ -29,10 +29,10 @@ import org.eclipse.winery.compliance.checking.ServiceTemplateCheckingResult; import org.eclipse.winery.compliance.checking.ServiceTemplateComplianceRuleRuleChecker; import org.eclipse.winery.compliance.checking.ToscaComplianceRuleMatcher; -import org.eclipse.winery.model.ids.extensions.ComplianceRuleId; import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; import org.eclipse.winery.model.ids.definitions.NodeTypeId; import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; +import org.eclipse.winery.model.ids.extensions.ComplianceRuleId; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeType; @@ -75,9 +75,10 @@ private void persist(HashMap allEntitie @Test public void testTComplianceRulePersistence() throws Exception { - OTComplianceRule rule = new OTComplianceRule(new OTComplianceRule.Builder()); - rule.setName("test"); - rule.setTargetNamespace(TEST_TARGET_NAMESPACE); + OTComplianceRule rule = new OTComplianceRule.Builder("test") + .setName("test") + .setTargetNamespace(TEST_TARGET_NAMESPACE) + .build(); ComplianceRuleId id = new ComplianceRuleId(new QName(TEST_TARGET_NAMESPACE, "test")); BackendUtils.persist(repository, id, rule); diff --git a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtils.java b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtils.java index 15f23b9971..d81c60fd8f 100644 --- a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtils.java +++ b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtils.java @@ -72,7 +72,7 @@ public static TTopologyTemplate determineStatefulComponents(TTopologyTemplate to .filter(nodeTemplate -> { TNodeType type = nodeTypes.get(nodeTemplate.getType()); if (Objects.nonNull(type.getTags())) { - return type.getTags().getTag() + return type.getTags() .stream() .anyMatch( tag -> "stateful".equalsIgnoreCase(tag.getName()) diff --git a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/placement/PlacementUtils.java b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/placement/PlacementUtils.java index b4f8a1cc42..43831378d4 100644 --- a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/placement/PlacementUtils.java +++ b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/placement/PlacementUtils.java @@ -139,7 +139,7 @@ private static TTopologyTemplate completeModel(ServiceTemplateId serviceTemplate placementServiceTemplate.setId(placementServiceTemplate.getName()); // resolve open requirements until the topology is completed - while (!splitting.getOpenRequirements(topology).isEmpty()) { + while (topology != null && !splitting.getOpenRequirements(topology).isEmpty()) { // add a target label to the topology based on the provider and location assignment assignNodesToTargetLabels(topology); placementServiceTemplate.setTopologyTemplate(topology); @@ -563,7 +563,7 @@ private static List getServiceTemplatesWithTags() { */ private static boolean isUnsuitedProvider(TServiceTemplate template, TNodeTemplate node, String location, Map> blackList) { - List tags = template.getTags().getTag(); + List tags = template.getTags(); TTag providerTag = getTag(tags, TAG_NAME_PROVIDER); TTag locationTag = getTag(tags, TAG_NAME_LOCATION); @@ -614,13 +614,13 @@ private static List getViableProviders(TNodeTemplate node, String locati if (Objects.nonNull(node.getPolicies())) { for (TPolicy policy : node.getPolicies().getPolicy()) { // check the tags of the provider for the policy name - if (Objects.isNull(getTag(template.getTags().getTag(), policy.getPolicyType().toString()))) { + if (Objects.isNull(getTag(template.getTags(), policy.getPolicyType().toString()))) { continue template; } } } - providers.add(getTag(template.getTags().getTag(), TAG_NAME_PROVIDER).getValue()); + providers.add(getTag(template.getTags(), TAG_NAME_PROVIDER).getValue()); } return providers; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasIdAndTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasIdAndTags.java new file mode 100644 index 0000000000..82161853e1 --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasIdAndTags.java @@ -0,0 +1,101 @@ +/******************************************************************************* + * Copyright (c) 2021 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 javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlTransient; + +import io.github.adr.embedded.ADR; +import org.eclipse.jdt.annotation.Nullable; + +@XmlTransient +@XmlAccessorType(XmlAccessType.FIELD) +public abstract class HasIdAndTags extends HasId implements HasTags { + + @XmlElementWrapper(name = "Tags") + @XmlElement(name = "Tag", required = true) + protected List tags; + + public HasIdAndTags(Builder builder) { + super(builder); + this.tags = builder.tags; + } + + @Deprecated + public HasIdAndTags() { + } + + public List getTags() { + return tags; + } + + public void setTags(@Nullable List value) { + this.tags = value; + } + + @ADR(11) + public abstract static class Builder> extends HasId.Builder { + + private List tags; + + public Builder(String id) { + super(id); + } + + public Builder(TExtensibleElements extensibleElements) { + this.addDocumentation(extensibleElements.getDocumentation()); + this.addAny(extensibleElements.getAny()); + this.addOtherAttributes(extensibleElements.getOtherAttributes()); + } + + public T addTags(List tags) { + if (tags == null || tags.isEmpty()) { + return self(); + } + + if (this.tags == null) { + this.tags = tags; + } else { + this.tags.addAll(tags); + } + return self(); + } + + public T addTag(TTag tag) { + if (tag == null) { + return self(); + } + + ArrayList tmp = new ArrayList<>(); + tmp.add(tag); + return addTags(tmp); + } + + public T addTag(String key, String value) { + if (value == null) { + return self(); + } + + TTag tag = new TTag.Builder(key, value).build(); + return addTag(tag); + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasTags.java index a6ade4ee75..8945f68045 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasTags.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasTags.java @@ -14,7 +14,9 @@ package org.eclipse.winery.model.tosca; +import java.util.List; + public interface HasTags { - TTags getTags(); + List getTags(); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityType.java index 5ead121e50..19f4d2a496 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityType.java @@ -68,13 +68,10 @@ TPolicyType.class, TDataType.class, }) -public abstract class TEntityType extends TExtensibleElements implements HasName, HasInheritance, HasTargetNamespace { +public abstract class TEntityType extends TExtensibleElementWithTags implements HasName, HasInheritance, HasTargetNamespace { public static final String NS_SUFFIX_PROPERTIES_DEFINITION_WINERY = "propertiesdefinition/winery"; - @XmlElement(name = "Tags") - protected TTags tags; - @XmlElement(name = "DerivedFrom") protected TEntityType.DerivedFrom derivedFrom; @@ -115,7 +112,6 @@ public TEntityType() { public TEntityType(Builder builder) { super(builder); - this.tags = builder.tags; this.derivedFrom = builder.derivedFrom; this.properties = builder.properties; this.name = builder.name; @@ -153,15 +149,6 @@ public void setAttributeDefinitions(List attributeDefinitio this.attributeDefinitions = attributeDefinitions; } - @Nullable - public TTags getTags() { - return tags; - } - - public void setTags(@Nullable TTags value) { - this.tags = value; - } - public TEntityType.@Nullable DerivedFrom getDerivedFrom() { return derivedFrom; } @@ -245,13 +232,13 @@ public WinerysPropertiesDefinition getWinerysPropertiesDefinition() { return null; } WinerysPropertiesDefinition res = (WinerysPropertiesDefinition) properties; - // we put defaults if elementname and namespace have not been set + // we put defaults if element name and namespace have not been set if (res.getElementName() == null) { res.setElementName("Properties"); } if (res.getNamespace() == null) { - // we use the targetnamespace of the original element + // we use the target namespace of the original element String ns = this.getTargetNamespace(); if (!ns.endsWith("/")) { ns += "/"; @@ -313,14 +300,18 @@ public int hashCode() { @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "") public static class YamlPropertyDefinition { + private String name; + @XmlAttribute(name = "type", required = true) private QName type; private String description; private Boolean required; + @XmlElement(name = "default") private Object defaultValue; private YamlPropertyDefinition.Status status; + @XmlElement private List constraints; @@ -329,6 +320,7 @@ public static class YamlPropertyDefinition { @XmlElement(name = "key_schema") private TSchema keySchema; + @SuppressWarnings("unused") public YamlPropertyDefinition() { // added for xml serialization! } @@ -345,7 +337,7 @@ private YamlPropertyDefinition(Builder builder) { this.entrySchema = builder.entrySchema; } - @XmlEnum(String.class) + @XmlEnum() public enum Status { supported, unsupported, @@ -601,11 +593,10 @@ public void setType(QName type) { } @ADR(11) - public abstract static class Builder> extends TExtensibleElements.Builder { + public abstract static class Builder> extends TExtensibleElementWithTags.Builder { private final String name; - private TTags tags; private TEntityType.DerivedFrom derivedFrom; private PropertiesDefinition properties; private boolean abstractValue; @@ -621,7 +612,6 @@ public Builder(TEntityType entityType) { super(entityType); this.name = entityType.getName(); this.derivedFrom = entityType.getDerivedFrom(); - this.addTags(entityType.getTags()); this.abstractValue = entityType.getAbstract(); this.finalValue = entityType.getFinal(); this.targetNamespace = entityType.getTargetNamespace(); @@ -629,11 +619,6 @@ public Builder(TEntityType entityType) { this.attributeDefinitions = entityType.getAttributeDefinitions(); } - public T setTags(TTags tags) { - this.tags = tags; - return self(); - } - public T setDerivedFrom(TEntityType.DerivedFrom derivedFrom) { this.derivedFrom = derivedFrom; return self(); @@ -682,50 +667,6 @@ public T setTargetNamespace(String targetNamespace) { return self(); } - public T addTags(TTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return self(); - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return self(); - } - - public T addTags(List tags) { - if (tags == null) { - return self(); - } - - TTags tmp = new TTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public T addTags(TTag tags) { - if (tags == null) { - return self(); - } - - TTags tmp = new TTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - - public T addTags(String key, String value) { - if (value == null) { - return self(); - } - - TTag tag = new TTag(); - tag.setName(key); - tag.setValue(value); - return addTags(tag); - } - public T setAttributeDefinitions(List attributeDefinitions) { this.attributeDefinitions = attributeDefinitions; return self(); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTypeImplementation.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTypeImplementation.java index 334d94b321..93097840f7 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTypeImplementation.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTypeImplementation.java @@ -48,10 +48,7 @@ TRelationshipTypeImplementation.class, }) @JsonInclude(JsonInclude.Include.NON_NULL) -public abstract class TEntityTypeImplementation extends TExtensibleElements implements HasName, HasType, HasInheritance, HasTargetNamespace { - - @XmlElement(name = "Tags") - protected TTags tags; +public abstract class TEntityTypeImplementation extends TExtensibleElementWithTags implements HasName, HasType, HasInheritance, HasTargetNamespace { @XmlElement(name = "RequiredContainerFeatures") protected TRequiredContainerFeatures requiredContainerFeatures; @@ -96,7 +93,6 @@ public TEntityTypeImplementation(Builder builder) { this.targetNamespace = builder.targetNamespace; this.name = builder.name; this.implementedType = builder.implementedType; - this.tags = builder.tags; this.requiredContainerFeatures = builder.requiredContainerFeatures; this.implementationArtifacts = builder.implementationArtifacts; this._abstract = builder._abstract; @@ -128,15 +124,6 @@ public QName getQName() { return QName.valueOf("{" + this.targetNamespace + "}" + this.name); } - @Nullable - public TTags getTags() { - return tags; - } - - public void setTags(TTags value) { - this.tags = value; - } - @Nullable public TRequiredContainerFeatures getRequiredContainerFeatures() { return requiredContainerFeatures; @@ -210,11 +197,11 @@ public void setType(QName type) { this.implementedType = type; } - public static abstract class Builder> extends TExtensibleElements.Builder { + public static abstract class Builder> extends TExtensibleElementWithTags.Builder { + private final QName implementedType; private String name; private String targetNamespace; - private TTags tags; private TRequiredContainerFeatures requiredContainerFeatures; private List implementationArtifacts; private boolean _abstract; @@ -242,11 +229,6 @@ public T setTargetNamespace(String targetNamespace) { return self(); } - public T setTags(TTags tags) { - this.tags = tags; - return self(); - } - public T setRequiredContainerFeatures(TRequiredContainerFeatures requiredContainerFeatures) { this.requiredContainerFeatures = requiredContainerFeatures; return self(); @@ -272,50 +254,6 @@ public T setFinal(boolean _final) { return self(); } - public T addTags(TTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return self(); - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return self(); - } - - public T addTags(List tags) { - if (tags == null) { - return self(); - } - - TTags tmp = new TTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public T addTags(TTag tags) { - if (tags == null) { - return self(); - } - - TTags tmp = new TTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - - public T addTags(String name, String value) { - if (name == null || name.isEmpty()) { - return self(); - } - - TTag tmp = new TTag(); - tmp.setName(name); - tmp.setValue(value); - return addTags(tmp); - } - public T addRequiredContainerFeatures(TRequiredContainerFeatures requiredContainerFeatures) { if (requiredContainerFeatures == null || requiredContainerFeatures.getRequiredContainerFeature().isEmpty()) { return self(); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElementWithTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElementWithTags.java new file mode 100644 index 0000000000..2dafd91939 --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElementWithTags.java @@ -0,0 +1,104 @@ +/******************************************************************************* + * Copyright (c) 2021 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 javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlTransient; + +import io.github.adr.embedded.ADR; +import org.eclipse.jdt.annotation.Nullable; + +@XmlTransient +@XmlAccessorType(XmlAccessType.FIELD) +public abstract class TExtensibleElementWithTags extends TExtensibleElements implements HasTags { + + @XmlElementWrapper(name = "Tags") + @XmlElement(name = "Tag", required = true) + protected List tags; + + public TExtensibleElementWithTags(Builder builder) { + super(builder); + this.tags = builder.tags; + } + + @Deprecated + public TExtensibleElementWithTags() { + } + + public List getTags() { + return tags; + } + + public void setTags(@Nullable List value) { + this.tags = value; + } + + @ADR(11) + public abstract static class Builder> extends TExtensibleElements.Builder { + + private List tags; + + public Builder() { + } + + public Builder(TExtensibleElements.Builder builder) { + super(builder); + } + + public Builder(TExtensibleElements extensibleElements) { + this.addDocumentation(extensibleElements.getDocumentation()); + this.addAny(extensibleElements.getAny()); + this.addOtherAttributes(extensibleElements.getOtherAttributes()); + } + + public T addTags(List tags) { + if (tags == null || tags.isEmpty()) { + return self(); + } + + if (this.tags == null) { + this.tags = tags; + } else { + this.tags.addAll(tags); + } + return self(); + } + + public T addTag(TTag tag) { + if (tag == null) { + return self(); + } + + ArrayList tmp = new ArrayList<>(); + tmp.add(tag); + return addTags(tmp); + } + + public T addTag(String key, String value) { + if (value == null) { + return self(); + } + + TTag tag = new TTag.Builder(key, value).build(); + return addTag(tag); + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TServiceTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TServiceTemplate.java index 0ddc164e80..bad9589cf6 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TServiceTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TServiceTemplate.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca; -import java.util.List; import java.util.Objects; import javax.xml.bind.annotation.XmlAccessType; @@ -37,10 +36,7 @@ "topologyTemplate", "plans" }) -public class TServiceTemplate extends HasId implements HasName, HasTargetNamespace, HasTags { - - @XmlElement(name = "Tags") - protected TTags tags; +public class TServiceTemplate extends HasIdAndTags implements HasName, HasTargetNamespace { @XmlElement(name = "BoundaryDefinitions") protected TBoundaryDefinitions boundaryDefinitions; @@ -67,7 +63,6 @@ public TServiceTemplate() { public TServiceTemplate(Builder builder) { super(builder); - this.tags = builder.tags; this.boundaryDefinitions = builder.boundaryDefinitions; this.topologyTemplate = builder.topologyTemplate; this.plans = builder.plans; @@ -100,16 +95,6 @@ public int hashCode() { ); } - @Nullable - @Override - public TTags getTags() { - return tags; - } - - public void setTags(@Nullable TTags value) { - this.tags = value; - } - @Nullable public TBoundaryDefinitions getBoundaryDefinitions() { return boundaryDefinitions; @@ -175,10 +160,9 @@ public void accept(Visitor visitor) { visitor.visit(this); } - public static class Builder extends HasId.Builder { + public static class Builder extends HasIdAndTags.Builder { private final TTopologyTemplate topologyTemplate; - private TTags tags; private TBoundaryDefinitions boundaryDefinitions; private TPlans plans; private String name; @@ -195,11 +179,6 @@ public Builder(String id, TTopologyTemplate topologyTemplate) { this.topologyTemplate = topologyTemplate; } - public Builder setTags(TTags tags) { - this.tags = tags; - return this; - } - public Builder setBoundaryDefinitions(TBoundaryDefinitions boundaryDefinitions) { this.boundaryDefinitions = boundaryDefinitions; return this; @@ -225,39 +204,6 @@ public Builder setSubstitutableNodeType(QName substitutableNodeType) { return this; } - public Builder addTags(TTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return this; - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return this; - } - - public Builder addTags(List tags) { - if (tags == null) { - return this; - } - - TTags tmp = new TTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public Builder addTags(TTag tags) { - if (tags == null) { - return this; - } - - TTags tmp = new TTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - @Override public Builder self() { return this; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTag.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTag.java index 6f5ad30285..4ece15bf43 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTag.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTag.java @@ -38,7 +38,8 @@ public class TTag implements Serializable { protected String value; @Deprecated // used for XML deserialization of API request content - public TTag() { } + public TTag() { + } public TTag(Builder builder) { this.name = Objects.requireNonNull(builder.name); @@ -84,17 +85,13 @@ public void accept(Visitor visitor) { } public static class Builder { + private String name; private String value; - public Builder setName(String name) { + public Builder(String name, String value) { this.name = name; - return this; - } - - public Builder setValue(String value) { this.value = value; - return this; } public TTag build() { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTags.java deleted file mode 100644 index fed8e7ea91..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTags.java +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 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.io.Serializable; -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; - -/** - *

Java class for tTags complex type. - *

- *

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

- *

- * <complexType name="tTags">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Tag" type="{http://docs.oasis-open.org/tosca/ns/2011/12}tTag" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tTags", propOrder = { - "tag" -}) -public class TTags implements Serializable { - - @XmlElement(name = "Tag", required = true) - protected List tag; - - @Deprecated // used for XML deserialization of API request content - public TTags() { } - - public TTags(Builder builder) { - this.tag = builder.tag; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TTags)) return false; - TTags tTags = (TTags) o; - return Objects.equals(tag, tTags.tag); - } - - @Override - public int hashCode() { - return Objects.hash(tag); - } - - /** - * Gets the value of the tag property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the tag property. - *

- *

- * For example, to add a new item, do as follows: - *

-     *    getTag().add(newItem);
-     * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link TTag } - */ - @NonNull - public List getTag() { - if (tag == null) { - tag = new ArrayList(); - } - return this.tag; - } - - public static class Builder { - private List tag; - - public Builder() { - - } - - public Builder setTag(List tag) { - this.tag = tag; - return this; - } - - public Builder addTag(List tag) { - if (tag == null) { - return this; - } - - if (this.tag == null) { - this.tag = tag; - } else { - this.tag.addAll(tag); - } - return this; - } - - public Builder addTag(TTag tag) { - if (tag == null) { - return this; - } - - List tmp = new ArrayList<>(); - tmp.add(tag); - return addTag(tmp); - } - - public Builder addTag(String name, String value) { - if (name == null || name.isEmpty()) { - return this; - } - - TTag tag = new TTag(); - tag.setName(name); - tag.setValue(value); - return addTag(tag); - } - - public TTags build() { - return new TTags(this); - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/extensions/OTComplianceRule.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/extensions/OTComplianceRule.java index a0225627d4..09b1f55004 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/extensions/OTComplianceRule.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/extensions/OTComplianceRule.java @@ -13,8 +13,6 @@ *******************************************************************************/ package org.eclipse.winery.model.tosca.extensions; -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; @@ -22,11 +20,9 @@ import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; -import org.eclipse.winery.model.tosca.HasId; +import org.eclipse.winery.model.tosca.HasIdAndTags; import org.eclipse.winery.model.tosca.HasName; import org.eclipse.winery.model.tosca.HasTargetNamespace; -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.visitor.Visitor; @@ -34,7 +30,7 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "otComplianceRule") -public class OTComplianceRule extends HasId implements HasName, HasTargetNamespace { +public class OTComplianceRule extends HasIdAndTags implements HasName, HasTargetNamespace { @XmlAttribute protected String name; @@ -49,18 +45,15 @@ public class OTComplianceRule extends HasId implements HasName, HasTargetNamespa @XmlElement(name = "RequiredStructure") protected TTopologyTemplate requiredStructure; - @XmlElement(name = "Tags") - protected TTags tags; - @Deprecated // used for XML deserialization of API request content - public OTComplianceRule() { } + public OTComplianceRule() { + } public OTComplianceRule(Builder builder) { super(builder); this.name = builder.name; this.identifier = builder.identifier; this.requiredStructure = builder.requiredStructure; - this.tags = builder.tags; this.targetNamespace = builder.targetNamespace; } @@ -111,31 +104,18 @@ public void setRequiredStructure(@Nullable TTopologyTemplate requiredStructure) this.requiredStructure = requiredStructure; } - public TTags getTags() { - return tags; - } - - public void setTags(TTags tags) { - this.tags = tags; - } - @Override public void accept(Visitor visitor) { visitor.visit(this); } - public static class Builder extends HasId.Builder { + public static class Builder extends HasIdAndTags.Builder { private String name; private TTopologyTemplate identifier; private TTopologyTemplate requiredStructure; - private TTags tags; private String targetNamespace; - public Builder() { - super(); - } - public Builder(String id) { super(id); } @@ -155,14 +135,6 @@ public Builder setRequiredStructure(TTopologyTemplate requiredStructure) { return self(); } - public Builder addTags(List tags) { - if (this.tags == null) { - this.tags = new TTags(); - } - this.tags.getTag().addAll(tags); - return self(); - } - public Builder setTargetNamespace(String targetNamespace) { this.targetNamespace = targetNamespace; return self(); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/ModelUtilities.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/ModelUtilities.java index 0e85eb7fc2..4c87e91d32 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/ModelUtilities.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/ModelUtilities.java @@ -50,7 +50,6 @@ import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TRelationshipTemplate; -import org.eclipse.winery.model.tosca.TRelationshipTemplate.SourceOrTargetElement; import org.eclipse.winery.model.tosca.TRelationshipType; import org.eclipse.winery.model.tosca.TRequirement; import org.eclipse.winery.model.tosca.TServiceTemplate; @@ -551,9 +550,9 @@ public static TNodeTemplate instantiateNodeTemplate(TNodeType nodeType) { WinerysPropertiesDefinition propDef = nodeType.getWinerysPropertiesDefinition(); if (propDef != null && propDef.getPropertyDefinitions() != null) { Map properties = new HashMap<>(); - propDef.getPropertyDefinitions().forEach(propertyDefinition -> { - properties.put(propertyDefinition.getKey(), propertyDefinition.getDefaultValue()); - }); + propDef.getPropertyDefinitions().forEach(propertyDefinition -> + properties.put(propertyDefinition.getKey(), propertyDefinition.getDefaultValue()) + ); TEntityTemplate.WineryKVProperties tProps = new TEntityTemplate.WineryKVProperties(); tProps.setKVProperties(new LinkedHashMap<>(properties)); builder.setProperties(tProps); @@ -574,21 +573,18 @@ public static TNodeTemplate instantiateNodeTemplate(TNodeType nodeType) { public static TRelationshipTemplate instantiateRelationshipTemplate(TRelationshipType relationshipType, TNodeTemplate sourceNodeTemplate, TNodeTemplate targetNodeTemplate) { + if (relationshipType == null || relationshipType.getName() == null) { + return null; + } - TRelationshipTemplate relationshipTemplate = new TRelationshipTemplate(); - relationshipTemplate.setId("con-" + UUID.randomUUID()); - relationshipTemplate.setName(relationshipType.getName()); - relationshipTemplate.setType(new QName(relationshipType.getTargetNamespace(), relationshipType.getName())); - - // connect the NodeTemplates - SourceOrTargetElement source = new SourceOrTargetElement(); - source.setRef(sourceNodeTemplate); - relationshipTemplate.setSourceElement(source); - SourceOrTargetElement target = new SourceOrTargetElement(); - target.setRef(targetNodeTemplate); - relationshipTemplate.setTargetElement(target); - - return relationshipTemplate; + return new TRelationshipTemplate.Builder( + "con-" + UUID.randomUUID(), + new QName(relationshipType.getTargetNamespace(), relationshipType.getName()), + sourceNodeTemplate, + targetNodeTemplate + ) + .setName(relationshipType.getName()) + .build(); } /** @@ -660,12 +656,11 @@ public static List getIncomingRelationshipTemplates(TTopo TNodeTemplate nodeTemplate) { Objects.requireNonNull(topologyTemplate); Objects.requireNonNull(nodeTemplate); - List incomingRelationshipTemplates = topologyTemplate.getRelationshipTemplates() + + return topologyTemplate.getRelationshipTemplates() .stream() .filter(rt -> getTargetNodeTemplateOfRelationshipTemplate(topologyTemplate, rt).equals(nodeTemplate)) .collect(Collectors.toList()); - - return incomingRelationshipTemplates; } /** @@ -675,12 +670,11 @@ public static List getOutgoingRelationshipTemplates(TTopo TNodeTemplate nodeTemplate) { Objects.requireNonNull(topologyTemplate); Objects.requireNonNull(nodeTemplate); - List outgoingRelationshipTemplates = topologyTemplate.getRelationshipTemplates() + + return topologyTemplate.getRelationshipTemplates() .stream() .filter(rt -> getSourceNodeTemplateOfRelationshipTemplate(topologyTemplate, rt).equals(nodeTemplate)) .collect(Collectors.toList()); - - return outgoingRelationshipTemplates; } /** @@ -743,7 +737,7 @@ public static void patchAnyAttributes(Collection temp // Convert the String created by the JSON serialization back to a XML dom document TEntityTemplate.Properties properties = template.getProperties(); - if (properties != null && properties instanceof TEntityTemplate.XmlProperties) { + if (properties instanceof TEntityTemplate.XmlProperties) { TEntityTemplate.XmlProperties props = (TEntityTemplate.XmlProperties) properties; props.setAny(patchAnyItem(props.getAny())); } @@ -817,7 +811,7 @@ TEntityType> Map getAvailableFeaturesOfType(QName givenType, Map features = new HashMap<>(); getChildrenOf(givenType, elements).forEach((qName, t) -> { if (Objects.nonNull(t.getTags())) { - List list = t.getTags().getTag(); + List list = t.getTags(); if (deploymentTechnology == null || list.stream().anyMatch( @@ -838,16 +832,19 @@ TEntityType> Map getAvailableFeaturesOfType(QName givenType, Map boolean isFeatureType(QName givenType, Map elements) { return Objects.nonNull(elements.get(givenType)) && Objects.nonNull(elements.get(givenType).getTags()) - && elements.get(givenType).getTags().getTag().stream() + && elements.get(givenType).getTags().stream() .anyMatch(tag -> "feature".equals(tag.getName())); } public static void updateNodeTemplate(TTopologyTemplate topology, String oldComponentId, QName newType, TNodeType newComponentType) { TNodeTemplate nodeTemplate = topology.getNodeTemplate(oldComponentId); - nodeTemplate.setType(newType); - nodeTemplate.setName(newType.getLocalPart()); - // TODO: also make some more adjustments etc. + + if (nodeTemplate != null) { + nodeTemplate.setType(newType); + nodeTemplate.setName(newType.getLocalPart()); + // TODO: also make some more adjustments etc. + } } /** diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/visitor/Visitor.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/visitor/Visitor.java index e685ac9454..d996223b05 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/visitor/Visitor.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/visitor/Visitor.java @@ -48,7 +48,6 @@ import org.eclipse.winery.model.tosca.TRequirementRef; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.jdt.annotation.NonNull; @@ -81,9 +80,9 @@ public void visit(TServiceTemplate serviceTemplate) { topologyTemplate.accept(this); } - final TTags tags = serviceTemplate.getTags(); + final List tags = serviceTemplate.getTags(); if (tags != null) { - for (TTag tag : tags.getTag()) { + for (TTag tag : tags) { tag.accept(this); } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasIdAndTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasIdAndTags.java new file mode 100644 index 0000000000..6af01714dd --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasIdAndTags.java @@ -0,0 +1,101 @@ +/******************************************************************************* + * Copyright (c) 2021 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.xml; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlTransient; + +import io.github.adr.embedded.ADR; +import org.eclipse.jdt.annotation.Nullable; + +@XmlTransient +@XmlAccessorType(XmlAccessType.FIELD) +public abstract class XHasIdAndTags extends XHasId implements XHasTags { + + @XmlElementWrapper(name = "Tags") + @XmlElement(name = "Tag", required = true) + protected List tags; + + public XHasIdAndTags(Builder builder) { + super(builder); + this.tags = builder.tags; + } + + @Deprecated + public XHasIdAndTags() { + } + + public List getTags() { + return tags; + } + + public void setTags(@Nullable List value) { + this.tags = value; + } + + @ADR(11) + public abstract static class Builder> extends XHasId.Builder { + + private List tags; + + public Builder(String id) { + super(id); + } + + public Builder(XTExtensibleElements extensibleElements) { + this.addDocumentation(extensibleElements.getDocumentation()); + this.addAny(extensibleElements.getAny()); + this.addOtherAttributes(extensibleElements.getOtherAttributes()); + } + + public T addTags(List tags) { + if (tags == null || tags.isEmpty()) { + return self(); + } + + if (this.tags == null) { + this.tags = tags; + } else { + this.tags.addAll(tags); + } + return self(); + } + + public T addTag(XTTag tag) { + if (tag == null) { + return self(); + } + + ArrayList tmp = new ArrayList<>(); + tmp.add(tag); + return addTags(tmp); + } + + public T addTag(String key, String value) { + if (value == null) { + return self(); + } + + XTTag tag = new XTTag.Builder(key, value).build(); + return addTag(tag); + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasTags.java index 18b0fa3aef..7a2cafd656 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasTags.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasTags.java @@ -14,7 +14,9 @@ package org.eclipse.winery.model.tosca.xml; +import java.util.List; + public interface XHasTags { - XTTags getTags(); + List getTags(); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTemplate.java index 1ea52290a0..4fd0b0a6ab 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTemplate.java @@ -83,7 +83,7 @@ public XTEntityTemplate(String id) { super(id); } - public XTEntityTemplate(Builder builder) { + public XTEntityTemplate(Builder builder) { super(builder); this.properties = builder.properties; this.propertyConstraints = builder.propertyConstraints; @@ -272,7 +272,7 @@ public static class PropertyConstraints implements Serializable { @NonNull public List getPropertyConstraint() { if (propertyConstraint == null) { - propertyConstraint = new ArrayList(); + propertyConstraint = new ArrayList<>(); } return this.propertyConstraint; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityType.java index 3fcb92fda8..9a5fb8c44e 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityType.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca.xml; -import java.util.List; import java.util.Objects; import javax.xml.bind.annotation.XmlAccessType; @@ -40,7 +39,7 @@ "derivedFrom", "propertiesDefinition" }) -@XmlSeeAlso({ +@XmlSeeAlso( { XTNodeType.class, XTRelationshipType.class, XTRequirementType.class, @@ -48,11 +47,8 @@ XTArtifactType.class, XTPolicyType.class }) -public abstract class XTEntityType extends XTExtensibleElements implements XHasName, XHasInheritance, XHasTargetNamespace, XHasTags { - public static final String NS_SUFFIX_PROPERTIESDEFINITION_WINERY = "propertiesdefinition/winery"; +public abstract class XTEntityType extends XTExtensibleElementWithTags implements XHasName, XHasInheritance, XHasTargetNamespace { - @XmlElement(name = "Tags") - protected XTTags tags; @XmlElement(name = "DerivedFrom") protected XTEntityType.DerivedFrom derivedFrom; @XmlElement(name = "PropertiesDefinition") @@ -70,11 +66,11 @@ public abstract class XTEntityType extends XTExtensibleElements implements XHasN protected String targetNamespace; @Deprecated // required for XML deserialization - public XTEntityType() { } + public XTEntityType() { + } - public XTEntityType(Builder builder) { + public XTEntityType(Builder builder) { super(builder); - this.tags = builder.tags; this.derivedFrom = builder.derivedFrom; this.propertiesDefinition = builder.propertiesDefinition; this.name = builder.name; @@ -102,15 +98,6 @@ public int hashCode() { return Objects.hash(tags, derivedFrom, propertiesDefinition, name, _abstract, _final, targetNamespace); } - @Nullable - public XTTags getTags() { - return tags; - } - - public void setTags(@Nullable XTTags value) { - this.tags = value; - } - public XTEntityType.@Nullable DerivedFrom getDerivedFrom() { return derivedFrom; } @@ -275,10 +262,9 @@ public void accept(Visitor visitor) { } @ADR(11) - public abstract static class Builder> extends XTExtensibleElements.Builder { + public abstract static class Builder> extends XTExtensibleElementWithTags.Builder { private final String name; - private XTTags tags; private XTEntityType.DerivedFrom derivedFrom; private XTEntityType.PropertiesDefinition propertiesDefinition; private XTBoolean abstractValue; @@ -293,18 +279,12 @@ public Builder(XTEntityType entityType) { super(entityType); this.name = entityType.getName(); this.derivedFrom = entityType.getDerivedFrom(); - this.addTags(entityType.getTags()); this.abstractValue = entityType.getAbstract(); this.finalValue = entityType.getFinal(); this.targetNamespace = entityType.getTargetNamespace(); this.propertiesDefinition = entityType.getPropertiesDefinition(); } - public T setTags(XTTags tags) { - this.tags = tags; - return self(); - } - public T setDerivedFrom(XTEntityType.DerivedFrom derivedFrom) { this.derivedFrom = derivedFrom; return self(); @@ -358,50 +338,6 @@ public T setTargetNamespace(String targetNamespace) { return self(); } - public T addTags(XTTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return self(); - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return self(); - } - - public T addTags(List tags) { - if (tags == null) { - return self(); - } - - XTTags tmp = new XTTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public T addTags(XTTag tags) { - if (tags == null) { - return self(); - } - - XTTags tmp = new XTTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - - public T addTags(String key, String value) { - if (value == null) { - return self(); - } - - XTTag tag = new XTTag(); - tag.setName(key); - tag.setValue(value); - return addTags(tag); - } - public XTEntityType build() { throw new IllegalStateException("Abstract types must never be build."); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTypeImplementation.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTypeImplementation.java index 50a01d243c..c567897d26 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTypeImplementation.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTypeImplementation.java @@ -38,15 +38,12 @@ XTNodeTypeImplementation.class, XTRelationshipTypeImplementation.class, }) -public abstract class XTEntityTypeImplementation extends XTExtensibleElements implements XHasName, XHasType, XHasInheritance, XHasTargetNamespace { - - @XmlElement(name = "Tags") - protected XTTags tags; +public abstract class XTEntityTypeImplementation extends XTExtensibleElementWithTags implements XHasName, XHasType, XHasInheritance, XHasTargetNamespace { @XmlElement(name = "RequiredContainerFeatures") protected XTRequiredContainerFeatures requiredContainerFeatures; - @XmlElementWrapper(name = "ImplementationArtifacts") + @XmlElementWrapper(name = "ImplementationArtifacts") @XmlElement(name = "ImplementationArtifact", required = true) protected List implementationArtifacts; @@ -78,7 +75,6 @@ public XTEntityTypeImplementation(Builder builder) { this.targetNamespace = builder.targetNamespace; this.name = builder.name; this.implementedType = builder.implementedType; - this.tags = builder.tags; this.requiredContainerFeatures = builder.requiredContainerFeatures; this.implementationArtifacts = builder.implementationArtifacts; this._abstract = builder._abstract; @@ -109,15 +105,6 @@ public QName getQName() { return QName.valueOf("{" + this.targetNamespace + "}" + this.name); } - @Nullable - public XTTags getTags() { - return tags; - } - - public void setTags(XTTags value) { - this.tags = value; - } - @Nullable public XTRequiredContainerFeatures getRequiredContainerFeatures() { return requiredContainerFeatures; @@ -194,11 +181,10 @@ public void setType(@NonNull QName type) { this.implementedType = type; } - public static abstract class Builder> extends XTExtensibleElements.Builder { + public static abstract class Builder> extends XTExtensibleElementWithTags.Builder { private final QName implementedType; private String name; private String targetNamespace; - private XTTags tags; private XTRequiredContainerFeatures requiredContainerFeatures; private List implementationArtifacts; private XTBoolean _abstract; @@ -226,11 +212,6 @@ public T setTargetNamespace(String targetNamespace) { return self(); } - public T setTags(XTTags tags) { - this.tags = tags; - return self(); - } - public T setRequiredContainerFeatures(XTRequiredContainerFeatures requiredContainerFeatures) { this.requiredContainerFeatures = requiredContainerFeatures; return self(); @@ -256,50 +237,6 @@ public T setFinal(XTBoolean _final) { return self(); } - public T addTags(XTTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return self(); - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return self(); - } - - public T addTags(List tags) { - if (tags == null) { - return self(); - } - - XTTags tmp = new XTTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public T addTags(XTTag tags) { - if (tags == null) { - return self(); - } - - XTTags tmp = new XTTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - - public T addTags(String name, String value) { - if (name == null || name.isEmpty()) { - return self(); - } - - XTTag tmp = new XTTag(); - tmp.setName(name); - tmp.setValue(value); - return addTags(tmp); - } - public T addRequiredContainerFeatures(XTRequiredContainerFeatures requiredContainerFeatures) { if (requiredContainerFeatures == null || requiredContainerFeatures.getRequiredContainerFeature().isEmpty()) { return self(); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElementWithTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElementWithTags.java new file mode 100644 index 0000000000..ab9ad777bf --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElementWithTags.java @@ -0,0 +1,104 @@ +/******************************************************************************* + * Copyright (c) 2021 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.xml; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlTransient; + +import io.github.adr.embedded.ADR; +import org.eclipse.jdt.annotation.Nullable; + +@XmlTransient +@XmlAccessorType(XmlAccessType.FIELD) +public abstract class XTExtensibleElementWithTags extends XTExtensibleElements implements XHasTags { + + @XmlElementWrapper(name = "Tags") + @XmlElement(name = "Tag", required = true) + protected List tags; + + public XTExtensibleElementWithTags(Builder builder) { + super(builder); + this.tags = builder.tags; + } + + @Deprecated + public XTExtensibleElementWithTags() { + } + + public List getTags() { + return tags; + } + + public void setTags(@Nullable List value) { + this.tags = value; + } + + @ADR(11) + public abstract static class Builder> extends XTExtensibleElements.Builder { + + private List tags; + + public Builder() { + } + + public Builder(XTExtensibleElements.Builder builder) { + super(builder); + } + + public Builder(XTExtensibleElements extensibleElements) { + this.addDocumentation(extensibleElements.getDocumentation()); + this.addAny(extensibleElements.getAny()); + this.addOtherAttributes(extensibleElements.getOtherAttributes()); + } + + public T addTags(List tags) { + if (tags == null || tags.isEmpty()) { + return self(); + } + + if (this.tags == null) { + this.tags = tags; + } else { + this.tags.addAll(tags); + } + return self(); + } + + public T addTag(XTTag tag) { + if (tag == null) { + return self(); + } + + ArrayList tmp = new ArrayList<>(); + tmp.add(tag); + return addTags(tmp); + } + + public T addTag(String key, String value) { + if (value == null) { + return self(); + } + + XTTag tag = new XTTag.Builder(key, value).build(); + return addTag(tag); + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifact.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifact.java index 574c95e620..3ae7735382 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifact.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifact.java @@ -53,7 +53,7 @@ public class XTImplementationArtifact extends XTExtensibleElements implements XH public XTImplementationArtifact() { } - public XTImplementationArtifact(Builder builder) { + public XTImplementationArtifact(Builder builder) { super(builder); this.name = builder.name; this.interfaceName = builder.interfaceName; @@ -133,7 +133,8 @@ public void setArtifactRef(@Nullable QName value) { this.artifactRef = value; } - public static class Builder> extends XTExtensibleElements.Builder> { + public static class Builder extends XTExtensibleElements.Builder { + private final QName artifactType; private String name; @@ -145,31 +146,30 @@ public Builder(QName artifactType) { this.artifactType = artifactType; } - public T setName(String name) { + public Builder setName(String name) { this.name = name; return self(); } - public T setInterfaceName(String interfaceName) { + public Builder setInterfaceName(String interfaceName) { this.interfaceName = interfaceName; return self(); } - public T setOperationName(String operationName) { + public Builder setOperationName(String operationName) { this.operationName = operationName; return self(); } - public T setArtifactRef(QName artifactRef) { + public Builder setArtifactRef(QName artifactRef) { this.artifactRef = artifactRef; return self(); } @ADR(11) @Override - @SuppressWarnings("unchecked") - public T self() { - return (T) this; + public Builder self() { + return this; } public XTImplementationArtifact build() { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTServiceTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTServiceTemplate.java index ec716cde68..75b0c299dc 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTServiceTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTServiceTemplate.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca.xml; -import java.util.List; import java.util.Objects; import javax.xml.bind.annotation.XmlAccessType; @@ -37,10 +36,7 @@ "topologyTemplate", "plans" }) -public class XTServiceTemplate extends XHasId implements XHasName, XHasTargetNamespace { - - @XmlElement(name = "Tags") - protected XTTags tags; +public class XTServiceTemplate extends XHasIdAndTags implements XHasName, XHasTargetNamespace { @XmlElement(name = "BoundaryDefinitions") protected XTBoundaryDefinitions boundaryDefinitions; @@ -62,11 +58,11 @@ public class XTServiceTemplate extends XHasId implements XHasName, XHasTargetNam protected QName substitutableNodeType; @Deprecated // required for XML deserialization - public XTServiceTemplate() { } + public XTServiceTemplate() { + } public XTServiceTemplate(Builder builder) { super(builder); - this.tags = builder.tags; this.boundaryDefinitions = builder.boundaryDefinitions; this.topologyTemplate = builder.topologyTemplate; this.plans = builder.plans; @@ -95,15 +91,6 @@ public int hashCode() { return Objects.hash(super.hashCode(), tags, boundaryDefinitions, topologyTemplate, plans, name, targetNamespace, substitutableNodeType); } - @Nullable - public XTTags getTags() { - return tags; - } - - public void setTags(@Nullable XTTags value) { - this.tags = value; - } - @Nullable public XTBoundaryDefinitions getBoundaryDefinitions() { return boundaryDefinitions; @@ -170,16 +157,16 @@ public void accept(Visitor visitor) { visitor.visit(this); } - public static class Builder extends XHasId.Builder { + public static class Builder extends XHasIdAndTags.Builder { + private final XTTopologyTemplate topologyTemplate; - private XTTags tags; private XTBoundaryDefinitions boundaryDefinitions; private XTPlans plans; private String name; private String targetNamespace; private QName substitutableNodeType; - + public Builder(String id) { super(id); topologyTemplate = null; @@ -190,11 +177,6 @@ public Builder(String id, XTTopologyTemplate topologyTemplate) { this.topologyTemplate = topologyTemplate; } - public Builder setTags(XTTags tags) { - this.tags = tags; - return this; - } - public Builder setBoundaryDefinitions(XTBoundaryDefinitions boundaryDefinitions) { this.boundaryDefinitions = boundaryDefinitions; return this; @@ -220,39 +202,6 @@ public Builder setSubstitutableNodeType(QName substitutableNodeType) { return this; } - public Builder addTags(XTTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return this; - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return this; - } - - public Builder addTags(List tags) { - if (tags == null) { - return this; - } - - XTTags tmp = new XTTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public Builder addTags(XTTag tags) { - if (tags == null) { - return this; - } - - XTTags tmp = new XTTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - @Override public Builder self() { return this; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTag.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTag.java index 72e55c89e0..5c40ffc1c8 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTag.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTag.java @@ -87,14 +87,9 @@ public static class Builder { private String name; private String value; - public Builder setName(String name) { + public Builder(String name, String value) { this.name = name; - return this; - } - - public Builder setValue(String value) { this.value = value; - return this; } public XTTag build() { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTags.java deleted file mode 100644 index 6e98847802..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTags.java +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 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.xml; - -import org.eclipse.jdt.annotation.NonNull; - -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 java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -/** - *

Java class for tTags complex type. - *

- *

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

- *

- * <complexType name="tTags">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="Tag" type="{http://docs.oasis-open.org/tosca/ns/2011/12}tTag" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tTags", propOrder = { - "tag" -}) -public class XTTags implements Serializable { - - @XmlElement(name = "Tag", required = true) - protected List tag; - - @Deprecated // required for XML deserialization - public XTTags() { } - - public XTTags(Builder builder) { - this.tag = builder.tag; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof XTTags)) return false; - XTTags tTags = (XTTags) o; - return Objects.equals(tag, tTags.tag); - } - - @Override - public int hashCode() { - return Objects.hash(tag); - } - - /** - * Gets the value of the tag property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the tag property. - *

- *

- * For example, to add a new item, do as follows: - *

-     *    getTag().add(newItem);
-     * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link XTTag } - */ - @NonNull - public List getTag() { - if (tag == null) { - tag = new ArrayList(); - } - return this.tag; - } - - public static class Builder { - private List tag; - - public Builder() { - - } - - public Builder setTag(List tag) { - this.tag = tag; - return this; - } - - public Builder addTag(List tag) { - if (tag == null) { - return this; - } - - if (this.tag == null) { - this.tag = tag; - } else { - this.tag.addAll(tag); - } - return this; - } - - public Builder addTag(XTTag tag) { - if (tag == null) { - return this; - } - - List tmp = new ArrayList<>(); - tmp.add(tag); - return addTag(tmp); - } - - public Builder addTag(String name, String value) { - if (name == null || name.isEmpty()) { - return this; - } - - XTTag tag = new XTTag(); - tag.setName(name); - tag.setValue(value); - return addTag(tag); - } - - public XTTags build() { - return new XTTags(this); - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTComplianceRule.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTComplianceRule.java index 88d4f72eac..cb9d361307 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTComplianceRule.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTComplianceRule.java @@ -13,8 +13,6 @@ *******************************************************************************/ package org.eclipse.winery.model.tosca.xml.extensions; -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; @@ -22,11 +20,9 @@ import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; -import org.eclipse.winery.model.tosca.xml.XHasId; +import org.eclipse.winery.model.tosca.xml.XHasIdAndTags; import org.eclipse.winery.model.tosca.xml.XHasName; import org.eclipse.winery.model.tosca.xml.XHasTargetNamespace; -import org.eclipse.winery.model.tosca.xml.XTTag; -import org.eclipse.winery.model.tosca.xml.XTTags; import org.eclipse.winery.model.tosca.xml.XTTopologyTemplate; import org.eclipse.winery.model.tosca.xml.visitor.Visitor; @@ -34,7 +30,7 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "otComplianceRule") -public class XOTComplianceRule extends XHasId implements XHasName, XHasTargetNamespace { +public class XOTComplianceRule extends XHasIdAndTags implements XHasName, XHasTargetNamespace { @XmlAttribute protected String name; @@ -49,20 +45,17 @@ public class XOTComplianceRule extends XHasId implements XHasName, XHasTargetNam @XmlElement(name = "RequiredStructure") protected XTTopologyTemplate requiredStructure; - @XmlElement(name = "Tags") - protected XTTags tags; - @Deprecated // required for XML deserialization - public XOTComplianceRule() { } + public XOTComplianceRule() { + } private XOTComplianceRule(Builder builder) { super(builder); this.name = builder.name; this.identifier = builder.identifier; this.requiredStructure = builder.requiredStructure; - this.tags = builder.tags; } - + @Override public String getName() { return name; @@ -90,7 +83,8 @@ public void setTargetNamespace(String value) { public XTTopologyTemplate getIdentifier() { if (identifier == null) { - identifier = new XTTopologyTemplate(); + identifier = new XTTopologyTemplate.Builder() + .build(); } return identifier; } @@ -110,25 +104,16 @@ public void setRequiredStructure(@Nullable XTTopologyTemplate requiredStructure) this.requiredStructure = requiredStructure; } - public XTTags getTags() { - return tags; - } - - public void setTags(XTTags tags) { - this.tags = tags; - } - @Override public void accept(Visitor visitor) { visitor.visit(this); } - public static class Builder extends XHasId.Builder { + public static class Builder extends XHasIdAndTags.Builder { private String name; private XTTopologyTemplate identifier; private XTTopologyTemplate requiredStructure; - private XTTags tags; public Builder(String id) { super(id); @@ -149,14 +134,6 @@ public Builder setRequiredStructure(XTTopologyTemplate requiredStructure) { return self(); } - public Builder addTags(List tags) { - if (this.tags == null) { - this.tags = new XTTags(); - } - this.tags.getTag().addAll(tags); - return self(); - } - public Builder self() { return this; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/visitor/Visitor.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/visitor/Visitor.java index be19c117f6..dac2abe562 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/visitor/Visitor.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/visitor/Visitor.java @@ -46,7 +46,6 @@ import org.eclipse.winery.model.tosca.xml.XTRequirementRef; import org.eclipse.winery.model.tosca.xml.XTServiceTemplate; import org.eclipse.winery.model.tosca.xml.XTTag; -import org.eclipse.winery.model.tosca.xml.XTTags; import org.eclipse.winery.model.tosca.xml.XTTopologyTemplate; import org.eclipse.winery.model.tosca.xml.extensions.XOTStringList; @@ -80,9 +79,9 @@ public void visit(XTServiceTemplate serviceTemplate) { topologyTemplate.accept(this); } - final XTTags tags = serviceTemplate.getTags(); + final List tags = serviceTemplate.getTags(); if (tags != null) { - for (XTTag tag : tags.getTag()) { + for (XTTag tag : tags) { tag.accept(this); } } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/RestUtils.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/RestUtils.java index c6a654155f..b9983a36ac 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/RestUtils.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/RestUtils.java @@ -49,16 +49,14 @@ import javax.xml.namespace.QName; import org.eclipse.winery.common.Constants; +import org.eclipse.winery.common.configuration.Environments; +import org.eclipse.winery.common.configuration.UiConfigurationObject; +import org.eclipse.winery.common.constants.MimeTypes; import org.eclipse.winery.common.version.VersionUtils; +import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.edmm.EdmmManager; import org.eclipse.winery.edmm.model.EdmmConverter; import org.eclipse.winery.edmm.model.EdmmType; -import org.eclipse.winery.repository.backend.WineryVersionUtils; -import org.eclipse.winery.repository.common.RepositoryFileReference; -import org.eclipse.winery.repository.common.Util; -import org.eclipse.winery.common.configuration.Environments; -import org.eclipse.winery.common.configuration.UiConfigurationObject; -import org.eclipse.winery.common.constants.MimeTypes; import org.eclipse.winery.model.ids.GenericId; import org.eclipse.winery.model.ids.Namespace; import org.eclipse.winery.model.ids.XmlId; @@ -71,12 +69,11 @@ import org.eclipse.winery.model.ids.definitions.RelationshipTypeImplementationId; import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; import org.eclipse.winery.model.ids.elements.ToscaElementId; -import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.model.selfservice.Application; -import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.HasType; import org.eclipse.winery.model.tosca.TArtifactTemplate; import org.eclipse.winery.model.tosca.TConstraint; +import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TNodeTemplate; @@ -91,16 +88,18 @@ import org.eclipse.winery.repository.backend.IRepository; import org.eclipse.winery.repository.backend.NamespaceManager; import org.eclipse.winery.repository.backend.RepositoryFactory; +import org.eclipse.winery.repository.backend.WineryVersionUtils; import org.eclipse.winery.repository.backend.constants.MediaTypes; import org.eclipse.winery.repository.backend.filebased.GitBasedRepository; import org.eclipse.winery.repository.backend.selfcontainmentpackager.SelfContainmentPackager; import org.eclipse.winery.repository.backend.xsd.NamespaceAndDefinedLocalNames; +import org.eclipse.winery.repository.common.RepositoryFileReference; +import org.eclipse.winery.repository.common.Util; import org.eclipse.winery.repository.export.CsarExportConfiguration; import org.eclipse.winery.repository.export.CsarExportOptions; import org.eclipse.winery.repository.export.CsarExporter; import org.eclipse.winery.repository.export.ToscaExportUtil; import org.eclipse.winery.repository.rest.datatypes.ComponentId; -import org.eclipse.winery.repository.yaml.export.YamlExporter; import org.eclipse.winery.repository.rest.datatypes.LocalNameForAngular; import org.eclipse.winery.repository.rest.datatypes.NamespaceAndDefinedLocalNamesForAngular; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; @@ -114,6 +113,7 @@ import org.eclipse.winery.repository.rest.resources.entitytemplates.artifacttemplates.ArtifactTemplateResource; import org.eclipse.winery.repository.rest.resources.entitytemplates.artifacttemplates.ArtifactTemplatesResource; import org.eclipse.winery.repository.rest.resources.servicetemplates.ServiceTemplateResource; +import org.eclipse.winery.repository.yaml.export.YamlExporter; import io.github.edmm.core.parser.EntityGraph; import org.eclipse.jgit.api.errors.GitAPIException; @@ -452,9 +452,9 @@ public static String getIntermediateLocationStringForType(String type, String se *

* We cannot use {@literal Class} as, for instance, {@link TConstraint} does not * inherit from {@link TExtensibleElements} - * @param clazz the Class of the passed object, required if obj is null + * + * @param clazz the Class of the passed object, required if obj is null * @param obj the object to serialize - * @param repository */ public static Response getXML(Class clazz, T obj, IRepository repository) { // see commit ab4b5c547619c058990 for an implementation using getJAXBElement, @@ -541,7 +541,7 @@ public static ServiceTemplateId cloneServiceTemplate(ServiceTemplateId serviceTe // remove xaaspackager tags Collection toRemove = new ArrayList<>(); - for (TTag tag : oldSTModel.getTags().getTag()) { + for (TTag tag : oldSTModel.getTags()) { switch (tag.getName()) { case "xaasPackageNode": case "xaasPackageArtifactType": @@ -553,7 +553,7 @@ public static ServiceTemplateId cloneServiceTemplate(ServiceTemplateId serviceTe } } - oldSTModel.getTags().getTag().removeAll(toRemove); + oldSTModel.getTags().removeAll(toRemove); } JAXBContext context = JAXBContext.newInstance(TDefinitions.class); @@ -624,7 +624,7 @@ public static ArtifactTemplateId createArtifactTemplate(InputStream uploadedInpu public static String getTagValue(TServiceTemplate serviceTemplate, String tagKey) { if (serviceTemplate.getTags() != null) { - for (TTag tag : serviceTemplate.getTags().getTag()) { + for (TTag tag : serviceTemplate.getTags()) { if (tag.getName().equals(tagKey)) { return tag.getValue(); } @@ -855,8 +855,8 @@ public static Response returnRepoPath(RepositoryFileReference ref, String modifi /** * This is not repository specific, but we leave it close to the only caller *

- * If the passed ref is newer than the modified date (or the modified date is null), an OK response with an - * input stream pointing to the path is returned + * If the passed ref is newer than the modified date (or the modified date is null), an OK response with an input + * stream pointing to the path is returned */ private static Response.ResponseBuilder returnRefAsResponseBuilder(RepositoryFileReference ref, String modified) { if (!RepositoryFactory.getRepository().exists(ref)) { diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/_support/AbstractComponentInstanceResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/_support/AbstractComponentInstanceResource.java index 9f31b762c3..63684ccda0 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/_support/AbstractComponentInstanceResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/_support/AbstractComponentInstanceResource.java @@ -20,7 +20,9 @@ import java.net.URI; import java.time.Duration; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -45,32 +47,31 @@ import javax.xml.parsers.DocumentBuilder; import org.eclipse.winery.common.Constants; -import org.eclipse.winery.repository.backend.WineryVersionUtils; -import org.eclipse.winery.repository.common.RepositoryFileReference; import org.eclipse.winery.common.ToscaDocumentBuilderFactory; import org.eclipse.winery.common.configuration.Environments; import org.eclipse.winery.common.constants.MimeTypes; +import org.eclipse.winery.common.version.VersionUtils; +import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.model.ids.EncodingUtil; import org.eclipse.winery.model.ids.Namespace; import org.eclipse.winery.model.ids.XmlId; import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; -import org.eclipse.winery.model.version.ToscaDiff; -import org.eclipse.winery.common.version.VersionUtils; -import org.eclipse.winery.common.version.WineryVersion; -import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.HasIdInIdOrNameField; -import org.eclipse.winery.model.tosca.extensions.OTComplianceRule; +import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TEntityType; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; import org.eclipse.winery.model.tosca.TRelationshipTypeImplementation; import org.eclipse.winery.model.tosca.TServiceTemplate; -import org.eclipse.winery.model.tosca.TTags; +import org.eclipse.winery.model.tosca.TTag; +import org.eclipse.winery.model.tosca.extensions.OTComplianceRule; +import org.eclipse.winery.model.version.ToscaDiff; import org.eclipse.winery.repository.JAXBSupport; import org.eclipse.winery.repository.backend.BackendUtils; import org.eclipse.winery.repository.backend.IRepository; import org.eclipse.winery.repository.backend.RepositoryFactory; -import org.eclipse.winery.repository.backend.constants.MediaTypes; +import org.eclipse.winery.repository.backend.WineryVersionUtils; +import org.eclipse.winery.repository.common.RepositoryFileReference; import org.eclipse.winery.repository.export.CsarExportOptions; import org.eclipse.winery.repository.filebased.RepositoryUtils; import org.eclipse.winery.repository.rest.RestUtils; @@ -145,7 +146,7 @@ public AbstractComponentInstanceResource(DefinitionsChildId id) { LOGGER.debug("data file exists"); this.load(); } else { - LOGGER.debug("Data file {} does not exist. Creating a new one.", this.ref.toString()); + LOGGER.debug("Data file {} does not exist. Creating a new one.", this.ref); this.createNew(); } } @@ -353,7 +354,7 @@ public Response getElementAsYaml() { @GET @Produces(MediaType.APPLICATION_JSON) - public Object getElementAsJson(@QueryParam("versions") @ApiParam("If set, a list of availbale versions is returned.") String versions, + public Object getElementAsJson(@QueryParam("versions") @ApiParam("If set, a list of available versions is returned.") String versions, @QueryParam("subComponents") String subComponents, @QueryParam("compareTo") String compareTo, @QueryParam("asChangeLog") String asChangeLog) { if (!requestRepository.exists(this.id)) { @@ -400,10 +401,10 @@ private void load() { try { this.element = this.definitions.getElement(); } catch (IndexOutOfBoundsException e) { - // everything allright: + // everything alright: // ImportResource is a quick hack using 99% of the functionality offered here // As only 1% has to be "quick hacked", we do that instead of a clean design - // Clean design: Introduce a class between this and AbstractComponentInstanceResource, where this class and ImportResource inhertis from + // Clean design: Introduce a class between this and AbstractComponentInstanceResource, where this class and ImportResource inherits from // A clean design introducing a super class AbstractDefinitionsBackedResource does not work, as we currently also support PropertiesBackedResources and such a super class would required multi-inheritance if (!(this instanceof GenericImportResource)) { throw new IllegalStateException("Wrong storage format: No ServiceTemplateOrNodeTypeOrNodeTypeImplementation found."); @@ -528,7 +529,7 @@ public Response updateDefinitions(InputStream requestBodyStream) { BackendUtils.copyIdToFields((HasIdInIdOrNameField) element, this.getId()); try { - BackendUtils.persist(this.getDefinitions(), this.getRepositoryFileReference(), MediaTypes.MEDIATYPE_TOSCA_DEFINITIONS, requestRepository); + requestRepository.putDefinition(this.getId(), this.getDefinitions()); } catch (IOException e) { throw new WebApplicationException(e); } @@ -537,7 +538,7 @@ public Response updateDefinitions(InputStream requestBodyStream) { if (validationError.isEmpty()) { return Response.noContent().build(); } else { - // ADR-0005: well-formed XML, but non-schema-conforming XML is saved, but triggers warning at the iser + // ADR-0005: well-formed XML, but non-schema-conforming XML is saved, but triggers warning to the user return Response.ok().entity(validationError).build(); } } @@ -556,42 +557,42 @@ public DocumentationResource getDocumentationsResource() { @Path("tags/") public final TagsResource getTags() { - TTags tags; + List tags; if (this.element instanceof TServiceTemplate) { tags = ((TServiceTemplate) this.element).getTags(); if (tags == null) { - tags = new TTags(); + tags = new ArrayList<>(); ((ServiceTemplateResource) this).getServiceTemplate().setTags(tags); } } else if (this.element instanceof TEntityType) { tags = ((TEntityType) this.element).getTags(); if (tags == null) { - tags = new TTags(); + tags = new ArrayList<>(); ((EntityTypeResource) this).getEntityType().setTags(tags); } } else if (this.element instanceof TNodeTypeImplementation) { tags = ((TNodeTypeImplementation) this.element).getTags(); if (tags == null) { - tags = new TTags(); + tags = new ArrayList<>(); ((NodeTypeImplementationResource) this).getNTI().setTags(tags); } } else if (this.element instanceof TRelationshipTypeImplementation) { tags = ((TRelationshipTypeImplementation) this.element).getTags(); if (tags == null) { - tags = new TTags(); + tags = new ArrayList<>(); ((RelationshipTypeImplementationResource) this).getRTI().setTags(tags); } } else if (this.element instanceof OTComplianceRule) { tags = ((OTComplianceRule) this.element).getTags(); if (tags == null) { - tags = new TTags(); + tags = new ArrayList<>(); ((ComplianceRuleResource) this).getComplianceRule().setTags(tags); } } else { throw new IllegalStateException("tags was called on a resource not supporting tags"); } - return new TagsResource(this, tags.getTag()); + return new TagsResource(this, tags); } @GET diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/compliancerules/ComplianceRuleResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/compliancerules/ComplianceRuleResource.java index 89dd19899d..37a1195569 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/compliancerules/ComplianceRuleResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/compliancerules/ComplianceRuleResource.java @@ -19,9 +19,9 @@ import javax.ws.rs.core.Response; import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; -import org.eclipse.winery.model.tosca.extensions.OTComplianceRule; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TTopologyTemplate; +import org.eclipse.winery.model.tosca.extensions.OTComplianceRule; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResourceContainingATopology; import org.eclipse.winery.repository.rest.resources._support.IHasName; @@ -44,7 +44,7 @@ public ComplianceRuleResource(DefinitionsChildId id) { @Override protected TExtensibleElements createNewElement() { - return new OTComplianceRule(new OTComplianceRule.Builder()); + return new OTComplianceRule(new OTComplianceRule.Builder("default")); } public OTComplianceRule getComplianceRule() { diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/dataflowmodels/DataFlowResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/dataflowmodels/DataFlowResource.java index f73f789ce1..7b2f5b61a5 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/dataflowmodels/DataFlowResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/dataflowmodels/DataFlowResource.java @@ -46,7 +46,6 @@ import org.eclipse.winery.model.tosca.TRequirementDefinition; import org.eclipse.winery.model.tosca.TServiceTemplate; 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.constants.ToscaBaseTypes; import org.eclipse.winery.model.tosca.extensions.kvproperties.PropertyDefinitionKV; @@ -330,13 +329,13 @@ private boolean containsMatchingNodeType(TServiceTemplate serviceTemplate, NodeT * Check if the ServiceTemplate contains the location and provider tags with matching values. */ private boolean containsMatchingTags(TServiceTemplate serviceTemplate, String location, String provider) { - TTags tags = serviceTemplate.getTags(); + List tags = serviceTemplate.getTags(); if (Objects.isNull(tags)) { return false; } int tests = 0; - for (TTag tag : tags.getTag()) { + for (TTag tag : tags) { if (tag.getName().equalsIgnoreCase(TAG_NAME_LOCATION) && tag.getValue().equalsIgnoreCase(location) || tag.getName().equalsIgnoreCase(TAG_NAME_PROVIDER) && tag.getValue().equalsIgnoreCase(provider)) { tests++; diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResource.java index 0ff2c08826..4ae9ec2739 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResource.java @@ -70,7 +70,6 @@ import org.eclipse.winery.model.tosca.TRequirementRef; import org.eclipse.winery.model.tosca.TServiceTemplate; 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.constants.Namespaces; import org.eclipse.winery.model.tosca.constants.ToscaBaseTypes; @@ -441,12 +440,12 @@ public Response generatePlaceholdersWithCapability() { TCapability capa = splitting.createPlaceholderCapability(topologyTemplate, capabilityType); ModelUtilities.setPropertiesKV(placeholderNodeTemplate, placeholderNodeTemplateProperties); - + if (placeholderNodeTemplate.getCapabilities() == null) { placeholderNodeTemplate.setCapabilities(new ArrayList<>()); } placeholderNodeTemplate.getCapabilities().add(capa); - + for (Map.Entry targetLocation : nodeTemplateWithOpenReq.getOtherAttributes().entrySet()) { placeholderNodeTemplate.getOtherAttributes().put(targetLocation.getKey(), targetLocation.getValue()); } @@ -576,17 +575,17 @@ public ServiceTemplateId substitute() { @Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public Response createPlaceholderSubstituteVersion() throws IOException, SplittingException { TTopologyTemplate originTopologyTemplate = this.getServiceTemplate().getTopologyTemplate(); - TTags tagsOfServiceTemplate = this.getServiceTemplate().getTags(); + List tagsOfServiceTemplate = this.getServiceTemplate().getTags(); List participants = originTopologyTemplate.getParticipants(); String participantId = ""; - TTags newTagList = new TTags(); - for (TTag tagOfServiceTemplate : tagsOfServiceTemplate.getTag()) { + List newTagList = new ArrayList<>(); + for (TTag tagOfServiceTemplate : tagsOfServiceTemplate) { if (tagOfServiceTemplate.getName().equals("participant")) { participantId = tagOfServiceTemplate.getValue(); - newTagList.getTag().add(tagOfServiceTemplate); + newTagList.add(tagOfServiceTemplate); } else if (!tagOfServiceTemplate.getName().equals("choreography")) { - newTagList.getTag().add(tagOfServiceTemplate); + newTagList.add(tagOfServiceTemplate); } } final String finalParticipantId = participantId; @@ -597,8 +596,12 @@ public Response createPlaceholderSubstituteVersion() throws IOException, Splitti //Multiple participants can be annotated on one node template Optional nodeOwners = ModelUtilities.getParticipant(tNodeTemplate); if (nodeOwners.isPresent() && nodeOwners.get().contains(finalParticipantId)) { - for (TRelationshipTemplate tRelationshipTemplate : ModelUtilities.getIncomingRelationshipTemplates(originTopologyTemplate, tNodeTemplate)) { - nodeTemplatesWithNewHost.add(ModelUtilities.getSourceNodeTemplateOfRelationshipTemplate(originTopologyTemplate, tRelationshipTemplate).getId()); + for (TRelationshipTemplate tRelationshipTemplate : + ModelUtilities.getIncomingRelationshipTemplates(originTopologyTemplate, tNodeTemplate)) { + nodeTemplatesWithNewHost.add( + ModelUtilities.getSourceNodeTemplateOfRelationshipTemplate(originTopologyTemplate, tRelationshipTemplate) + .getId() + ); } } } @@ -650,7 +653,7 @@ public Response createPlaceholderSubstituteVersion() throws IOException, Splitti choreoTag.setName("choreography"); choreoTag.setValue(choreoValue); - newTagList.getTag().add(choreoTag); + newTagList.add(choreoTag); newServiceTemplate.setTags(newTagList); repo.setElement(newId, newServiceTemplate); @@ -677,62 +680,57 @@ public List createParticipantsVersion() throws IOException { WineryVersion version = VersionUtils.getVersion(id.getXmlId().getDecoded()); TTopologyTemplate topologyTemplate = this.getTopology(); - TTags tagsOfServiceTemplate = this.getServiceTemplate().getTags(); - List tags = tagsOfServiceTemplate.getTag(); + List tags = new ArrayList<>(); Splitting splitting = new Splitting(); // iterate over tags of origin service template - for (OTParticipant participant : topologyTemplate.getParticipants()) { - // check if tag with partner in service template - WineryVersion newVersion = new WineryVersion( - participant.getName() + "-" + version.toString().replace("gdm", "ldm"), - 1, - 1 - ); - - List newParticipantList = new ArrayList<>(); - newParticipantList.addAll(topologyTemplate.getParticipants()); - - // create list of tags to add to service template - TTags tTagList = new TTags(); - tTagList.getTag().addAll(tags); - - // new tag to define participant of service template - TTag participantTag = new TTag(); - participantTag.setName("participant"); - participantTag.setValue(participant.getName()); - tTagList.getTag().add(participantTag); - - String choreoValue = splitting.calculateChoreographyTag(this.getServiceTemplate().getTopologyTemplate().getNodeTemplates(), participant.getName()); - TTag choreoTag = new TTag(); - choreoTag.setName("choreography"); - choreoTag.setValue(choreoValue); - tTagList.getTag().add(choreoTag); - ServiceTemplateId newId = new ServiceTemplateId(id.getNamespace().getDecoded(), - VersionUtils.getNameWithoutVersion(id.getXmlId().getDecoded()) + WineryVersion.WINERY_NAME_FROM_VERSION_SEPARATOR + newVersion.toString(), - false); - - if (repo.exists(newId)) { - repo.forceDelete(newId); - } + if (topologyTemplate.getParticipants() != null) { + for (OTParticipant participant : topologyTemplate.getParticipants()) { + // check if tag with partner in service template + WineryVersion newVersion = new WineryVersion( + participant.getName() + "-" + version.toString().replace("gdm", "ldm"), + 1, + 1 + ); + + List newParticipantList = new ArrayList<>(topologyTemplate.getParticipants()); + + // new tag to define participant of service template + tags.add( + new TTag.Builder("participant", participant.getName()) + .build() + ); + + String choreoValue = splitting.calculateChoreographyTag(this.getServiceTemplate().getTopologyTemplate().getNodeTemplates(), participant.getName()); + tags.add( + new TTag.Builder("choreography", choreoValue) + .build() + ); + + ServiceTemplateId newId = new ServiceTemplateId(id.getNamespace().getDecoded(), + VersionUtils.getNameWithoutVersion(id.getXmlId().getDecoded()) + WineryVersion.WINERY_NAME_FROM_VERSION_SEPARATOR + newVersion.toString(), + false); + + if (repo.exists(newId)) { + repo.forceDelete(newId); + } - ResourceResult response = RestUtils.duplicate(id, newId); + ResourceResult response = RestUtils.duplicate(id, newId); - if (response.getStatus() == Status.CREATED) { - response.setUri(null); - response.setMessage(new QNameApiData(newId)); - } + if (response.getStatus() == Status.CREATED) { + response.setUri(null); + response.setMessage(new QNameApiData(newId)); + } - TServiceTemplate tempServiceTempl = repo.getElement(newId); - // reset tags and set tags with respective entry - tempServiceTempl.setTags(null); - tempServiceTempl.setTags(tTagList); - tempServiceTempl.getTopologyTemplate().setParticipants(newParticipantList); + TServiceTemplate tempServiceTempl = repo.getElement(newId); + tempServiceTempl.setTags(tags); + tempServiceTempl.getTopologyTemplate().setParticipants(newParticipantList); - listOfResponses.add(response.getResponse()); - // set element to propagate changed tags - repo.setElement(newId, tempServiceTempl); + listOfResponses.add(response.getResponse()); + // set element to propagate changed tags + repo.setElement(newId, tempServiceTempl); + } } return listOfResponses; } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplatesResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplatesResource.java index 4436612e1f..9fa8db4f18 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplatesResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplatesResource.java @@ -38,7 +38,6 @@ import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.repository.backend.BackendUtils; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; @@ -57,8 +56,8 @@ public class ServiceTemplatesResource extends AbstractComponentsWithoutTypeRefer @Path("createfromartifact") @Produces(MediaType.APPLICATION_JSON) public CreateFromArtifactApiData getCreateFromArtifactData() { - Set artifactTypes = new HashSet(); - Set infrastructureNodeTypes = new HashSet(); + Set artifactTypes = new HashSet<>(); + Set infrastructureNodeTypes = new HashSet<>(); Collection templates = this.getAll(); for (AbstractComponentInstanceResource resource : templates) { @@ -67,18 +66,16 @@ public CreateFromArtifactApiData getCreateFromArtifactData() { if (stRes.getServiceTemplate().getTags() != null) { int check = 0; QName artifactType = null; - for (TTag tag : stRes.getServiceTemplate().getTags().getTag()) { + for (TTag tag : stRes.getServiceTemplate().getTags()) { switch (tag.getName()) { case "xaasPackageNode": + case "xaasPackageDeploymentArtifact": check++; break; case "xaasPackageArtifactType": check++; artifactType = QName.valueOf(tag.getValue()); break; - case "xaasPackageDeploymentArtifact": - check++; - break; case "xaasPackageInfrastructure": // optional tag, hence no check++ infrastructureNodeTypes.add(QName.valueOf(tag.getValue())); @@ -99,7 +96,7 @@ public CreateFromArtifactApiData getCreateFromArtifactData() { @Consumes(MediaType.MULTIPART_FORM_DATA) public Response createFromArtifact(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail, - @FormDataParam("file") FormDataBodyPart body, + @FormDataParam("file") FormDataBodyPart body, @FormDataParam("artifactType") QName artifactType, @FormDataParam("nodeTypes") List nodeTypesList, @FormDataParam("infrastructureNodeType") QName infrastructureNodeType, @@ -125,7 +122,7 @@ public Response createFromArtifact(@FormDataParam("file") InputStream uploadedIn nodeTypes = RestUtils.cleanQNameSet(nodeTypes); Collection xaasPackages = this.getXaaSPackageTemplates(artifactType); - Collection toRemove = new ArrayList(); + Collection toRemove = new ArrayList<>(); // check whether the serviceTemplate contains all the given nodeTypes for (ServiceTemplateId serviceTemplate : xaasPackages) { @@ -138,10 +135,12 @@ public Response createFromArtifact(@FormDataParam("file") InputStream uploadedIn toRemove.add(serviceTemplate); } else { String value = RestUtils.getTagValue(new ServiceTemplateResource(serviceTemplate).getServiceTemplate(), "xaasPackageInfrastructure"); - String localName = value.split("}")[1]; - String namespace = value.split("}")[0].substring(1); - if (!infrastructureNodeType.equals(new QName(namespace, localName))) { - toRemove.add(serviceTemplate); + if (value != null) { + String localName = value.split("}")[1]; + String namespace = value.split("}")[0].substring(1); + if (!infrastructureNodeType.equals(new QName(namespace, localName))) { + toRemove.add(serviceTemplate); + } } } } @@ -183,12 +182,17 @@ public Response createFromArtifact(@FormDataParam("file") InputStream uploadedIn } private Collection getXaaSPackageTemplates(QName artifactType) { - Collection xaasPackages = new ArrayList(); + Collection xaasPackages = new ArrayList<>(); for (ServiceTemplateId serviceTemplate : this.getXaaSPackageTemplates()) { - String artifactTypeTagValue = RestUtils.getTagValue(new ServiceTemplateResource(serviceTemplate).getServiceTemplate(), "xaasPackageArtifactType"); - QName taggedArtifactType = QName.valueOf(artifactTypeTagValue); - if (taggedArtifactType.equals(artifactType)) { - xaasPackages.add(serviceTemplate); + String artifactTypeTagValue = RestUtils.getTagValue( + new ServiceTemplateResource(serviceTemplate).getServiceTemplate(), + "xaasPackageArtifactType" + ); + if (artifactTypeTagValue != null) { + QName taggedArtifactType = QName.valueOf(artifactTypeTagValue); + if (taggedArtifactType.equals(artifactType)) { + xaasPackages.add(serviceTemplate); + } } } return xaasPackages; @@ -196,19 +200,19 @@ private Collection getXaaSPackageTemplates(QName artifactType private Collection getXaaSPackageTemplates() { Collection templates = this.getAll(); - Collection xaasPackages = new ArrayList(); + Collection xaasPackages = new ArrayList<>(); for (AbstractComponentInstanceResource resource : templates) { if (resource instanceof ServiceTemplateResource) { ServiceTemplateResource stRes = (ServiceTemplateResource) resource; - TTags tags = stRes.getServiceTemplate().getTags(); + List tags = stRes.getServiceTemplate().getTags(); if (tags == null) { continue; } int check = 0; - for (TTag tag : tags.getTag()) { + for (TTag tag : tags) { switch (tag.getName()) { case "xaasPackageNode": case "xaasPackageArtifactType": diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResource.java index c44412c6c7..743564196b 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResource.java @@ -474,7 +474,7 @@ public ArrayList getAvailableFeatures() { String deploymentTechnology = null; if (this.parent.getElement() instanceof HasTags && ((HasTags) this.parent.getElement()).getTags() != null) { - for (TTag tag : ((HasTags) this.parent.getElement()).getTags().getTag()) { + for (TTag tag : ((HasTags) this.parent.getElement()).getTags()) { // To enable the usage of "technology" and "technologies", we only check for "technolog" if (tag.getName().toLowerCase().contains("deploymentTechnolog".toLowerCase())) { deploymentTechnology = tag.getValue(); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/FromCanonical.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/FromCanonical.java index ff5034ff39..c9f2347c1a 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/FromCanonical.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/FromCanonical.java @@ -167,8 +167,6 @@ public class FromCanonical { private static final Logger LOGGER = LoggerFactory.getLogger(FromCanonical.class); - private List rollingImportStorage; - public FromCanonical(XmlRepository repository) { } @@ -196,8 +194,7 @@ public XTDefinitions convert(TDefinitions canonical, boolean convertImports) { .setPolicyTypes(convertList(canonical.getPolicyTypes(), this::convert)) .setPolicyTemplate(convertList(canonical.getPolicyTemplates(), this::convert)) .setRequirementTypes(convertList(canonical.getRequirementTypes(), this::convert)) - .setName(canonical.getName()) - .addImports(this.rollingImportStorage); + .setName(canonical.getName()); // this handles the "conversion" – basically copying of data – required by the disjoint TExtensibleElements // acting as baseclass for all the extensions we support builder.addNonStandardElements(convertList(canonical.getPatternRefinementModels(), this::convert)) @@ -282,7 +279,7 @@ void fillEntityTypeImplementationProperties(Builder builder, Value canonical) { .stream().map(this::convert).collect(Collectors.toList())); } if (canonical.getTags() != null) { - builder.addTags(convertList(canonical.getTags().getTag(), this::convert)); + builder.addTags(convertList(canonical.getTags(), this::convert)); } if (canonical.getImplementationArtifacts() != null) { builder.addImplementationArtifacts(canonical.getImplementationArtifacts().stream() @@ -304,7 +301,8 @@ private XTImplementationArtifact convert(TImplementationArtifact canonical) { } private XTTag convert(TTag canonical) { - return new XTTag.Builder().setName(canonical.getName()).setValue(canonical.getValue()).build(); + return new XTTag.Builder(canonical.getName(), canonical.getValue()) + .build(); } private XTRequiredContainerFeature convert(TRequiredContainerFeature canonical) { @@ -334,7 +332,7 @@ private XTPolicyType convert(TPolicyType canonical) { private , Value extends TEntityType> void fillEntityTypeProperties(Builder builder, Value canonical) { if (canonical.getTags() != null) { - builder.addTags(convertList(canonical.getTags().getTag(), this::convert)); + builder.addTags(convertList(canonical.getTags(), this::convert)); } if (canonical.getDerivedFrom() != null) { XTEntityType.DerivedFrom derived = new XTEntityType.DerivedFrom(); @@ -606,7 +604,7 @@ private XTServiceTemplate convert(TServiceTemplate canonical) { builder.setName(canonical.getName()); builder.setTargetNamespace(canonical.getTargetNamespace()); if (canonical.getTags() != null) { - builder.addTags(convertList(canonical.getTags().getTag(), this::convert)); + builder.addTags(convertList(canonical.getTags(), this::convert)); } builder.setBoundaryDefinitions(convert(canonical.getBoundaryDefinitions())); if (canonical.getPlans() != null) { @@ -639,7 +637,7 @@ private XTTag convert(@Nullable TGroupDefinition group) { } String name = "group:" + group.getName(); String value = group.getDescription() == null ? "" : group.getDescription(); - return new XTTag.Builder().setName(name).setValue(value).build(); + return new XTTag.Builder(name, value).build(); } @Nullable @@ -649,7 +647,7 @@ private XTTag convert(@Nullable OTParticipant participant) { } String name = "participant:" + participant.getName(); String value = participant.getUrl() == null ? "" : participant.getUrl(); - return new XTTag.Builder().setName(name).setValue(value).build(); + return new XTTag.Builder(name, value).build(); } private XTPlan convert(TPlan canonical) { diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/ToCanonical.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/ToCanonical.java index 9a18ee857d..e8bfbc67c4 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/ToCanonical.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/ToCanonical.java @@ -261,7 +261,16 @@ private TDefinitions resolveReferences(TDefinitions preliminary) { if (ref instanceof TCapability) { incomplete.setRef(resolveCapability((TCapability) ref, topology)); } else if (ref instanceof TNodeTemplate) { - incomplete.setRef(topology.getNodeTemplate(ref.getId())); + if (topology != null) { + TNodeTemplate nodeTemplate = topology.getNodeTemplate(ref.getId()); + if (nodeTemplate != null) { + incomplete.setRef(nodeTemplate); + } else { + LOGGER.error("Node Template could not be found!"); + } + } else { + LOGGER.error("Topology Template was null!"); + } } else if (ref instanceof TRequirement) { incomplete.setRef(resolveRequirement((TRequirement) ref, topology)); } else { @@ -364,7 +373,7 @@ void fillEntityTypeImplementationProperties(Builder builder, Value xml) { .stream().map(this::convert).collect(Collectors.toList())); } if (xml.getTags() != null) { - builder.addTags(xml.getTags().getTag().stream().map(this::convert).collect(Collectors.toList())); + builder.addTags(xml.getTags().stream().map(this::convert).collect(Collectors.toList())); } if (xml.getImplementationArtifacts() != null) { builder.addImplementationArtifacts(xml.getImplementationArtifacts().stream() @@ -386,7 +395,8 @@ private TImplementationArtifact convert(XTImplementationArtifact xml) { } private TTag convert(XTTag xml) { - return new TTag.Builder().setName(xml.getName()).setValue(xml.getValue()).build(); + return new TTag.Builder(xml.getName(), xml.getValue()) + .build(); } private TRequiredContainerFeature convert(XTRequiredContainerFeature xml) { @@ -412,7 +422,11 @@ private TPolicyType convert(XTPolicyType xml) { private , Value extends XTEntityType> void fillEntityTypeProperties(Builder builder, Value xml) { if (xml.getTags() != null) { - builder.addTags(xml.getTags().getTag().stream().map(this::convert).collect(Collectors.toList())); + builder.addTags( + xml.getTags().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (xml.getDerivedFrom() != null) { TEntityType.DerivedFrom derived = new TEntityType.DerivedFrom(); @@ -690,10 +704,11 @@ private TServiceTemplate convert(XTServiceTemplate xml) { builder.setName(xml.getName()); builder.setTargetNamespace(xml.getTargetNamespace()); if (xml.getTags() != null) { - xml.getTags().getTag().stream() + xml.getTags().stream() .filter(t -> !t.getName().startsWith("group:")) // filter group definitions .filter(t -> !t.getName().startsWith("participant:")) // filter participants - .map(this::convert).forEach(builder::addTags); + .map(this::convert) + .forEach(builder::addTag); } if (xml.getBoundaryDefinitions() != null) { builder.setBoundaryDefinitions(convert(xml.getBoundaryDefinitions())); @@ -709,12 +724,12 @@ private TServiceTemplate convert(XTServiceTemplate xml) { // map group-related tags back to topology template if (topologyTemplate != null && xml.getTags() != null) { - topologyTemplate.setGroups(convertList(xml.getTags().getTag(), this::convertToGroup)); + topologyTemplate.setGroups(convertList(xml.getTags(), this::convertToGroup)); } // handle participant extension if (topologyTemplate != null && xml.getTags() != null) { - topologyTemplate.setParticipants(convertList(xml.getTags().getTag(), this::convertToParticipant)); + topologyTemplate.setParticipants(convertList(xml.getTags(), this::convertToParticipant)); } return builder.build(); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/converter/FromCanonical.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/converter/FromCanonical.java index f4ae504994..f53357413f 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/converter/FromCanonical.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/converter/FromCanonical.java @@ -79,7 +79,6 @@ import org.eclipse.winery.model.tosca.TSchema; import org.eclipse.winery.model.tosca.TServiceTemplate; 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.extensions.kvproperties.AttributeDefinition; import org.eclipse.winery.model.tosca.extensions.kvproperties.ConstraintClauseKV; @@ -139,8 +138,8 @@ public class FromCanonical { private final YamlRepository repository; - private HashBiMap prefixNamespace; - private Map importDefinitions; + private final HashBiMap prefixNamespace; + private final Map importDefinitions; public FromCanonical(YamlRepository repository) { this.repository = repository; @@ -231,7 +230,7 @@ public Map convert(TEntityTemplate.Properties node } if (node instanceof TEntityTemplate.YamlProperties) { Map propertiesKV = ((TEntityTemplate.YamlProperties) node).getProperties(); - Map assignments = propertiesKV.entrySet().stream() + return propertiesKV.entrySet().stream() .map(entry -> new LinkedHashMap.SimpleEntry<>( String.valueOf(entry.getKey()), @@ -242,7 +241,6 @@ public Map convert(TEntityTemplate.Properties node Map.Entry::getKey, Map.Entry::getValue )); - return assignments; } // FIXME deal with converting WineryKVProperties and XmlProperties return null; @@ -335,7 +333,7 @@ public > T convert(TEntityType node, T builder builder .setDerivedFrom(convert(node.getDerivedFrom(), clazz)) - .setMetadata(convert(node.getTags())) + .setMetadata(convertTags(node.getTags())) .addMetadata("targetNamespace", node.getTargetNamespace()) .addMetadata("abstract", node.getAbstract() ? "true" : "false") .addMetadata("final", node.getFinal() ? "true" : "false") @@ -467,7 +465,6 @@ public Map convert(TNodeTypeImplementation node, M if (Objects.isNull(node)) { return null; } - String suffix = "@" + node.getNodeType().getLocalPart() + "@" + "nodetypes"; return Stream.of(convert(node.getDeploymentArtifacts(), artifacts), convert(node.getImplementationArtifacts(), artifacts)) .filter(Objects::nonNull) .flatMap(entry -> entry.entrySet().stream()) @@ -616,11 +613,11 @@ public QName convert(TEntityType.DerivedFrom node, Class node.getTypeRef().getLocalPart()); } - public Metadata convert(TTags node) { - if (Objects.isNull(node)) { + public Metadata convertTags(List tags) { + if (Objects.isNull(tags)) { return null; } - return node.getTag().stream() + return tags.stream() .filter(Objects::nonNull) .collect(Collectors.toMap( TTag::getName, @@ -745,6 +742,7 @@ private List addNewImports(List im for (Map.Entry existingImport : existingImports.entrySet()) { if (newImport.getKey().equalsIgnoreCase(existingImport.getKey()) && newImport.getValue().equals(existingImport.getValue())) { found = true; + break; } } if (!found) { @@ -835,29 +833,6 @@ public YTArtifactDefinition convertArtifactReference(QName ref) { public YTArtifactDefinition convert(ArtifactTemplateId id) { TArtifactTemplate node = repository.getElement(id); -// List files = Optional.ofNullable(repository.getContainedFiles(new ArtifactTemplateFilesDirectoryId(id))) -// .orElse(new TreeSet<>()) -// .stream() -// .map(ref -> { -// try { -// InputStream inputStream = repository.newInputStream(ref); -// Path path = this.path.resolve(id.getGroup()) -// .resolve(id.getNamespace().getEncoded()) -// .resolve(node.getIdFromIdOrNameField()) -// .resolve(ref.getFileName()); -// if (!path.toFile().exists()) { -// //noinspection ResultOfMethodCallIgnored -// path.getParent().toFile().mkdirs(); -// Files.copy(inputStream, path); -// } -// return this.path.relativize(path).toString(); -// } catch (IOException e) { -// LOGGER.error("Failed to copy Artifact file", e); -// return null; -// } -// }) -// .filter(Objects::nonNull) -// .collect(Collectors.toList()); return convertArtifactTemplate(node); } @@ -955,27 +930,13 @@ public Map convert(List node, String .filter(Objects::nonNull) .collect(Collectors.toMap( TInterface::getName, - entry -> new YTInterfaceDefinition.Builder() + entry -> new YTInterfaceDefinition.Builder<>() .setType(new QName(type)) .addOperations(convertOperations(entry.getOperations(), new ArrayList<>())) .build() )); } - public Map convertInterfaces(List node) { - if (Objects.isNull(node)) { - return null; - } - return node.stream() - .filter(Objects::nonNull) - .collect(Collectors.toMap( - TInterface::getName, - entry -> new YTInterfaceDefinition.Builder() - .addOperations(convertOperations(entry.getOperations(), new ArrayList<>())) - .build() - )); - } - public Map convert(TOperation.InputParameters node) { if (Objects.isNull(node)) { return null; @@ -1281,11 +1242,12 @@ public static YTPropertyAssignment convert(Object value) { } if (value instanceof Map) { builder.setValue( - ((Map) value).entrySet().stream() + ((Map) value).entrySet().stream() .map(entry -> new LinkedHashMap.SimpleEntry<>( String.valueOf(entry.getKey()), - convert(entry.getValue())) + convert(entry.getValue()) + ) ) .collect(Collectors.toMap( Map.Entry::getKey, @@ -1296,8 +1258,8 @@ public static YTPropertyAssignment convert(Object value) { } if (value instanceof List) { builder.setValue( - ((List) value).stream() - .map(entry -> convert(entry)) + ((List) value).stream() + .map(PropertyConverter::convert) .collect(Collectors.toList()) ); return builder.build(); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/converter/ToCanonical.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/converter/ToCanonical.java index 1d423813ba..dbbd8691a6 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/converter/ToCanonical.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/converter/ToCanonical.java @@ -73,7 +73,6 @@ import org.eclipse.winery.model.tosca.TSchema; import org.eclipse.winery.model.tosca.TServiceTemplate; 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.extensions.kvproperties.AttributeDefinition; import org.eclipse.winery.model.tosca.extensions.kvproperties.ConstraintClauseKV; @@ -255,17 +254,17 @@ private > T fillEntityTypeProperties(YTEntityTy .setDerivedFrom(node.getDerivedFrom()) .addTags(convertMetadata(node.getMetadata(), "targetNamespace", "abstract", "final")) .setTargetNamespace(node.getMetadata().get("targetNamespace")) - .setAbstract(Boolean.valueOf(node.getMetadata().get("abstract"))) - .setFinal(Boolean.valueOf(node.getMetadata().get("final"))) + .setAbstract(Boolean.parseBoolean(node.getMetadata().get("abstract"))) + .setFinal(Boolean.parseBoolean(node.getMetadata().get("final"))) .setAttributeDefinitions(convert(node.getAttributes())); if (node.getVersion() != null) { String version = node.getVersion().getVersion(); if (version != null) { - TTag tag = new TTag(); - tag.setName("version"); - tag.setValue(version); - builder.addTags(tag); + builder.addTag( + new TTag.Builder("version", version) + .build() + ); } } @@ -301,18 +300,16 @@ private ConstraintClauseKV convert(YTConstraintClause constraint) { * @return TOSCA XML Tags */ @NonNull - private TTags convertMetadata(Metadata metadata, String... excludedKeys) { + private List convertMetadata(Metadata metadata, String... excludedKeys) { Set exclusionSet = new HashSet<>(Arrays.asList(excludedKeys)); - return new TTags.Builder() - .addTag( - metadata.entrySet().stream() - .filter(Objects::nonNull) - .filter(e -> !exclusionSet.contains(e.getKey())) - .map(entry -> new TTag.Builder().setName(entry.getKey()).setValue(entry.getValue()).build()) - .filter(Objects::nonNull) - .collect(Collectors.toList()) - ) - .build(); + return metadata.entrySet().stream() + .filter(Objects::nonNull) + .filter(e -> !exclusionSet.contains(e.getKey())) + .map(entry -> + new TTag.Builder(entry.getKey(), entry.getValue()) + .build()) + .filter(Objects::nonNull) + .collect(Collectors.toList()); } /** diff --git a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/xml/XmlRepositoryIntegrationTests.java b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/xml/XmlRepositoryIntegrationTests.java index 5006d34291..7d1cf304da 100644 --- a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/xml/XmlRepositoryIntegrationTests.java +++ b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/xml/XmlRepositoryIntegrationTests.java @@ -15,6 +15,7 @@ package org.eclipse.winery.repository.xml; import java.io.IOException; +import java.util.ArrayList; import javax.xml.namespace.QName; @@ -24,7 +25,6 @@ import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.repository.TestWithGitBackedRepository; import org.eclipse.winery.repository.backend.BackendUtils; @@ -38,7 +38,6 @@ import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; public class XmlRepositoryIntegrationTests extends TestWithGitBackedRepository { @@ -82,9 +81,12 @@ public void testGroupDefinitions() throws Exception { .build(); if (element.getTags() == null) { - element.setTags(new TTags()); + element.setTags(new ArrayList<>()); } - element.getTags().getTag().add(new TTag.Builder().setName("test").setValue("test").build()); + element.getTags() + .add( + new TTag.Builder("test", "test").build() + ); // Save group element.getTopologyTemplate().addGroup(testGroup); @@ -100,6 +102,6 @@ public void testGroupDefinitions() throws Exception { assertTrue(testGroup.getMembers().isEmpty()); assertNotNull(element.getTags()); - assertEquals(1, element.getTags().getTag().size()); + assertEquals(1, element.getTags().size()); } } diff --git a/org.eclipse.winery.tools.deployablecomponents/src/main/java/org/eclipse/winery/tools/deployablecomponents/DeployableComponentsToscaConverter.java b/org.eclipse.winery.tools.deployablecomponents/src/main/java/org/eclipse/winery/tools/deployablecomponents/DeployableComponentsToscaConverter.java index c4905c18ad..c8d99212e1 100644 --- a/org.eclipse.winery.tools.deployablecomponents/src/main/java/org/eclipse/winery/tools/deployablecomponents/DeployableComponentsToscaConverter.java +++ b/org.eclipse.winery.tools.deployablecomponents/src/main/java/org/eclipse/winery/tools/deployablecomponents/DeployableComponentsToscaConverter.java @@ -24,7 +24,6 @@ import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TRequirementDefinition; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.tools.deployablecomponents.commons.Component; import org.apache.commons.lang3.tuple.Pair; @@ -54,21 +53,30 @@ List convertToToscaModel(Map private TNodeType.Builder convertComponentToNode(Component component) { TNodeType.Builder baseNodeBuilder = new TNodeType.Builder(component.getName()); - TTag versionTag = new TTag(new TTag.Builder().setName("version").setValue(component.getVersion())); - TTag versionOperatorTag = new TTag(new TTag.Builder().setName("versionOperator").setValue(component.getVersionOperator())); - baseNodeBuilder.setTags(new TTags(new TTags.Builder().addTag(versionTag).addTag(versionOperatorTag))); + baseNodeBuilder.addTag( + new TTag.Builder("versionOperator", component.getVersionOperator()).build() + ); + baseNodeBuilder.addTag( + new TTag.Builder("version", component.getVersion()).build() + ); return baseNodeBuilder; } private TCapabilityDefinition convertComponentToCapability(Component component) { - TCapabilityDefinition.Builder builder = new TCapabilityDefinition.Builder(component.getName(), new QName(component.getName() + component.getVersionOperator() + component.getVersion())); - builder.setUpperBound(component.getVersionOperator() + "_" + component.getVersion()); - return new TCapabilityDefinition(builder); + return new TCapabilityDefinition.Builder( + component.getName(), + new QName(component.getName() + component.getVersionOperator() + component.getVersion()) + ) + .setUpperBound(component.getVersionOperator() + "_" + component.getVersion()) + .build(); } private TRequirementDefinition convertComponentToRequirement(Component component) { - TRequirementDefinition.Builder builder = new TRequirementDefinition.Builder(component.getName(), new QName(component.getName() + component.getVersionOperator() + component.getVersion())); - builder.setUpperBound(component.getVersionOperator() + "_" + component.getVersion()); - return new TRequirementDefinition(builder); + return new TRequirementDefinition.Builder( + component.getName(), + new QName(component.getName() + component.getVersionOperator() + component.getVersion()) + ) + .setUpperBound(component.getVersionOperator() + "_" + component.getVersion()) + .build(); } }