From 70dc6a319bc032f5dadc846eb25cd01d105cca52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1lm=C3=A1n=20K=C3=A9pes?= Date: Tue, 29 Mar 2022 11:04:07 +0200 Subject: [PATCH 1/9] fixing exporting the servicetemplate of a YAML CSAR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kálmán Képes --- .../eclipse/winery/repository/importing/YamlCsarImporter.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/importing/YamlCsarImporter.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/importing/YamlCsarImporter.java index 4f43759877..641688cc7d 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/importing/YamlCsarImporter.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/importing/YamlCsarImporter.java @@ -171,6 +171,10 @@ protected Optional processDefinitionsImport(TDefinitions defs this.adjustNodeType(definitionsPath.getParent().getParent(), (TNodeType) ci, (NodeTypeId) wid, tmf, errors); } else if (ci instanceof TRelationshipType) { this.adjustRelationshipType(definitionsPath.getParent().getParent(), (TRelationshipType) ci, (RelationshipTypeId) wid, tmf, errors); + } else if (ci instanceof TServiceTemplate) { + // tosca yaml doesn't have plans but workflows, therefore this seems not to be working properly + // this.adjustServiceTemplate(definitionsPath.getParent().getParent(), tmf, (ServiceTemplateId) wid, (TServiceTemplate) ci, errors); + entryServiceTemplate = Optional.of((ServiceTemplateId) wid); } storeDefs(wid, newDefs); From 1a677e3afb452f9f2b270f4831a60b05e90b6bcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1lm=C3=A1n=20K=C3=A9pes?= Date: Tue, 29 Mar 2022 11:04:32 +0200 Subject: [PATCH 2/9] enables the YAML export to export normative types as well MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kálmán Képes --- .../winery/repository/yaml/export/YamlToscaExportUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java index 2e5d82546d..c5d2157c8c 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java @@ -59,7 +59,7 @@ public class YamlToscaExportUtil extends ToscaExportUtil { - private static final boolean EXPORT_NORMATIVE_TYPES = false; + private static final boolean EXPORT_NORMATIVE_TYPES = true; private static final Logger LOGGER = LoggerFactory.getLogger(YamlToscaExportUtil.class); @Override From e440292624d162e0e114feb2cad451a118746c84 Mon Sep 17 00:00:00 2001 From: Vladimir Yussupov Date: Wed, 11 May 2022 11:54:09 +0200 Subject: [PATCH 3/9] Add configuration for YAML normative types export --- .../RepositoryConfigurationObject.java | 14 ++++++++++++++ .../configuration/UiConfigurationObject.java | 12 ++++++++++-- .../configuration/configuration.component.html | 5 +++++ .../WineryRepositoryConfiguration.service.ts | 1 + .../repository/yaml/export/YamlExporter.java | 2 +- .../yaml/export/YamlToscaExportUtil.java | 11 ++++++++--- 6 files changed, 39 insertions(+), 6 deletions(-) diff --git a/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/RepositoryConfigurationObject.java b/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/RepositoryConfigurationObject.java index 8e8fa4a6fc..f9bf4821bb 100644 --- a/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/RepositoryConfigurationObject.java +++ b/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/RepositoryConfigurationObject.java @@ -36,6 +36,7 @@ public class RepositoryConfigurationObject extends AbstractConfigurationObject { private GitConfigurationObject gitConfiguration; private RepositoryProvider provider; + private boolean exportNormativeTypes; private String repositoryRoot; private String csarOutputPath; private boolean tenantRepository; @@ -57,6 +58,7 @@ void save() { configuration.setProperty(key + "repositoryRoot", this.repositoryRoot); configuration.setProperty(key + "csarOutputPath", this.csarOutputPath); configuration.setProperty(key + "tenantMode", this.tenantRepository); + configuration.setProperty(key + "exportNormativeTypes", this.exportNormativeTypes); this.getGitConfiguration().save(); Environment.getInstance().save(); } @@ -69,6 +71,9 @@ void update(YAMLConfiguration updatedConfiguration) { if (this.configuration.containsKey(key + "tenantMode")) { this.tenantRepository = configuration.getBoolean(key + "tenantMode"); } + if (this.configuration.containsKey(key + "exportNormativeTypes")) { + this.exportNormativeTypes = configuration.getBoolean(key + "exportNormativeTypes"); + } String provider = Environment.getInstance().getConfiguration().getString(getProviderConfigurationKey()); if (provider.equalsIgnoreCase(RepositoryProvider.YAML.name())) { this.setProvider(RepositoryProvider.YAML); @@ -90,6 +95,15 @@ public void setProvider(RepositoryProvider provider) { this.provider = provider; } + public boolean hasExportNormativeTypes() { + return this.exportNormativeTypes; + } + + public void setExportNormativeTypes(boolean exportNormativeTypes) { + this.exportNormativeTypes = exportNormativeTypes; + this.save(); + } + /** * Returns the path to the repository saved in the configuration file. * diff --git a/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/UiConfigurationObject.java b/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/UiConfigurationObject.java index bc65a2a372..aa3cf3fe1c 100644 --- a/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/UiConfigurationObject.java +++ b/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/UiConfigurationObject.java @@ -40,6 +40,7 @@ public class UiConfigurationObject extends AbstractConfigurationObject { private static final String key = "ui"; private static final String featurePrefix = key + ".features."; private static final String endpointPrefix = key + ".endpoints."; + private static final String repositoryPrefix = ".repository."; private Map features; private Map endpoints; @@ -76,8 +77,14 @@ public Map getGit() { @Override void save() { this.features.keySet().stream() - .filter(p -> !YAML.toString().equals(p) - ).forEach(property -> configuration.setProperty(featurePrefix + property, this.features.get(property))); + .filter(p -> !YAML.toString().equals(p)) + .forEach(property -> { + if ("exportNormativeTypes".equals(property)) { + configuration.setProperty(repositoryPrefix + property, this.features.get(property)); + } else { + configuration.setProperty(featurePrefix + property, this.features.get(property)); + } + }); this.endpoints.keySet() .forEach(property -> configuration.setProperty(endpointPrefix + property, this.endpoints.get(property))); Environment.getInstance().save(); @@ -105,6 +112,7 @@ void update(YAMLConfiguration configuration) { } else { // closed-world assumption ... apparently. features.put(YAML.toString(), false); + features.put("exportNormativeTypes", false); } this.features = features; diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/admin/configuration/configuration.component.html b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/admin/configuration/configuration.component.html index 5d04940f3f..fbfd6b97ff 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/admin/configuration/configuration.component.html +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/admin/configuration/configuration.component.html @@ -111,6 +111,11 @@

Configure the visibility of the following features:

name="patternDetection" [checked]="config.features.patternDetection"> +
+ +
diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryFeatureToggleModule/WineryRepositoryConfiguration.service.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryFeatureToggleModule/WineryRepositoryConfiguration.service.ts index ae69e4d7ad..e67bda38e7 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryFeatureToggleModule/WineryRepositoryConfiguration.service.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryFeatureToggleModule/WineryRepositoryConfiguration.service.ts @@ -38,6 +38,7 @@ export interface WineryConfiguration { liveModeling: boolean; propertyCheck: boolean; yaml: boolean; + exportNormativeTypes: boolean; patternDetection: boolean; }; endpoints: { diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlExporter.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlExporter.java index c7cb24f523..b43646bd36 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlExporter.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlExporter.java @@ -94,7 +94,7 @@ public String writeCsar(DefinitionsChildId entryId, LOGGER.trace("Starting CSAR export with {}", entryId.toString()); Map refMap = new HashMap<>(); - YamlToscaExportUtil exporter = new YamlToscaExportUtil(); + YamlToscaExportUtil exporter = new YamlToscaExportUtil(Environments.getInstance().getRepositoryConfig().hasExportNormativeTypes()); ExportedState exportedState = new ExportedState(); DefinitionsChildId currentId = entryId; Collection referencedIds; diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java index c5d2157c8c..c055b1ff50 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java @@ -31,6 +31,7 @@ import javax.xml.namespace.QName; import org.eclipse.winery.common.Constants; +import org.eclipse.winery.common.configuration.Environments; import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; import org.eclipse.winery.model.ids.definitions.NodeTypeId; import org.eclipse.winery.model.ids.definitions.RelationshipTypeId; @@ -59,8 +60,12 @@ public class YamlToscaExportUtil extends ToscaExportUtil { - private static final boolean EXPORT_NORMATIVE_TYPES = true; private static final Logger LOGGER = LoggerFactory.getLogger(YamlToscaExportUtil.class); + private final boolean exportNormativeTypes; + + public YamlToscaExportUtil(boolean exportNormativeTypes) { + this.exportNormativeTypes = exportNormativeTypes; + } @Override protected Collection processDefinitionsElement(IRepository repository, DefinitionsChildId tcId, CsarContentProperties definitionsFileProperties) @@ -76,7 +81,7 @@ protected Collection processDefinitionsElement(IRepository r Collection referencedDefinitionsChildIds = repository.getReferencedDefinitionsChildIds(tcId); - if (!EXPORT_NORMATIVE_TYPES) { + if (!exportNormativeTypes) { referencedDefinitionsChildIds.removeIf(id -> id.getQName().getNamespaceURI().startsWith("tosca")); } @@ -99,7 +104,7 @@ protected Collection processDefinitionsElement(IRepository r // Custom Adjustments for Service Templates YamlExportAdjustmentsBuilder adjustmentsBuilder = new YamlExportAdjustmentsBuilder(entry); - if (!EXPORT_NORMATIVE_TYPES) { + if (!exportNormativeTypes) { adjustmentsBuilder.removeNormativeTypeImports(); } entry = adjustmentsBuilder.setMetadataName(tcId).build(); From 163f4dded6db50b7d490a86d2debe4ed4758f0af Mon Sep 17 00:00:00 2001 From: Vladimir Yussupov Date: Wed, 11 May 2022 13:13:08 +0200 Subject: [PATCH 4/9] Remove unused import --- .../winery/repository/yaml/export/YamlToscaExportUtil.java | 1 - 1 file changed, 1 deletion(-) diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java index c055b1ff50..8c43bfbab2 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/export/YamlToscaExportUtil.java @@ -31,7 +31,6 @@ import javax.xml.namespace.QName; import org.eclipse.winery.common.Constants; -import org.eclipse.winery.common.configuration.Environments; import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; import org.eclipse.winery.model.ids.definitions.NodeTypeId; import org.eclipse.winery.model.ids.definitions.RelationshipTypeId; From f4691cb57e8f91b7419feb807bddc34cf0571603 Mon Sep 17 00:00:00 2001 From: Vladimir Yussupov Date: Fri, 3 Jun 2022 10:24:33 +0200 Subject: [PATCH 5/9] Add initial support for YAML workflows --- .../winery/model/tosca/TTopologyTemplate.java | 73 ++++-- .../eclipse/winery/model/tosca/TWorkflow.java | 130 +++++++++++ .../yaml/YTTopologyTemplateDefinition.java | 36 ++- .../winery/model/tosca/yaml/YTWorkflow.java | 209 ++++++++++++++++++ .../tosca/yaml/support/YamlSpecKeywords.java | 1 + .../tosca/yaml/visitor/AbstractVisitor.java | 58 +---- .../model/tosca/yaml/visitor/IVisitor.java | 45 +--- .../TopologyTemplateResource.java | 64 ++---- .../converter/reader/YamlBuilder.java | 117 ++++------ .../converter/writer/YamlWriter.java | 92 ++------ .../yaml/converter/FromCanonical.java | 152 +++---------- .../yaml/converter/ToCanonical.java | 133 +++-------- 12 files changed, 583 insertions(+), 527 deletions(-) create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TWorkflow.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTWorkflow.java diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyTemplate.java index 2fbb473f59..0fb7f7f998 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyTemplate.java @@ -14,6 +14,16 @@ package org.eclipse.winery.model.tosca; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.winery.model.tosca.extensions.OTParticipant; +import org.eclipse.winery.model.tosca.extensions.kvproperties.ParameterDefinition; +import org.eclipse.winery.model.tosca.visitor.Visitor; + +import javax.xml.bind.annotation.*; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -21,23 +31,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -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.XmlElements; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.winery.model.tosca.extensions.OTParticipant; -import org.eclipse.winery.model.tosca.extensions.kvproperties.ParameterDefinition; -import org.eclipse.winery.model.tosca.visitor.Visitor; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; - @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tTopologyTemplate", propOrder = { "nodeTemplateOrRelationshipTemplate", @@ -45,12 +38,12 @@ "policies", "inputs", "outputs", - "participants" + "participants", + "workflows" }) @JsonInclude(JsonInclude.Include.NON_NULL) public class TTopologyTemplate extends TExtensibleElements { - - @XmlElements( { + @XmlElements({ @XmlElement(name = "RelationshipTemplate", type = TRelationshipTemplate.class), @XmlElement(name = "NodeTemplate", type = TNodeTemplate.class) }) @@ -65,6 +58,9 @@ public class TTopologyTemplate extends TExtensibleElements { protected List inputs; @JsonProperty("outputs") protected List outputs; + // added to support conversion from/to YAML workflows + @JsonProperty("workflows") + private List workflows; @XmlElementWrapper(name = "Participants") @XmlElement(name = "Participant") @@ -82,6 +78,7 @@ public TTopologyTemplate(Builder builder) { this.outputs = builder.outputs; this.groups = builder.groups; this.participants = builder.participants; + this.workflows = builder.workflows; } @Override @@ -94,12 +91,13 @@ public boolean equals(Object o) { Objects.equals(policies, that.policies) && Objects.equals(inputs, that.inputs) && Objects.equals(outputs, that.outputs) && + Objects.equals(workflows, that.workflows) && Objects.equals(participants, that.participants); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), nodeTemplateOrRelationshipTemplate, policies, inputs, outputs, participants); + return Objects.hash(super.hashCode(), nodeTemplateOrRelationshipTemplate, policies, inputs, outputs, workflows, participants); } @JsonIgnore @@ -218,6 +216,19 @@ public void setOutputs(List outputs) { this.outputs = outputs; } + @NonNull + public List getWorkflows() { + if (this.workflows == null) { + this.workflows = new ArrayList<>(); + } + + return workflows; + } + + public void setWorkflows(List workflows) { + this.workflows = workflows; + } + @Nullable public List getGroups() { return groups; @@ -253,6 +264,7 @@ public static class Builder extends TExtensibleElements.Builder { private List policies; private List inputs; private List outputs; + private List workflows; private List groups; private List participants; @@ -335,6 +347,25 @@ public Builder setOutputs(List outputs) { return this; } + public Builder setWorkflows(List workflows) { + this.workflows = workflows; + return this; + } + + public Builder addWorkflows(List workflows) { + if (workflows == null || workflows.isEmpty()) { + return this; + } + + if (this.workflows == null) { + this.workflows = new ArrayList<>(workflows); + } else { + this.workflows.addAll(workflows); + } + + return this; + } + public Builder setGroups(List groups) { this.groups = groups; return this; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TWorkflow.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TWorkflow.java new file mode 100644 index 0000000000..275bc140c1 --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TWorkflow.java @@ -0,0 +1,130 @@ +/******************************************************************************* + * Copyright (c) 2022 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 org.eclipse.winery.model.tosca.extensions.kvproperties.ParameterDefinition; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; +import java.io.Serializable; +import java.util.List; + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "Workflow", propOrder = { + "name", + "description", + "inputs", + "outputs", + "implementation", +}) +public class TWorkflow implements HasName, Serializable { + + private String name; + private String description; + private List inputs; + private List outputs; + private TImplementation implementation; + + @Deprecated // used for XML deserialization of API request content + public TWorkflow() { + } + + private TWorkflow(Builder builder) { + this.name = builder.name; + this.description = builder.description; + this.inputs = builder.inputs; + this.outputs = builder.outputs; + this.implementation = builder.implementation; + } + + @Override + public String getName() { + return name; + } + + @Override + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public List getInputs() { + return inputs; + } + + public void setInputs(List inputs) { + this.inputs = inputs; + } + + public List getOutputs() { + return outputs; + } + + public void setOutputs(List outputs) { + this.outputs = outputs; + } + + public TImplementation getImplementation() { + return implementation; + } + + public void setImplementation(TImplementation implementation) { + this.implementation = implementation; + } + + public static class Builder { + private final String name; + private String description; + private List inputs; + private List outputs; + private TImplementation implementation; + + public Builder(String name) { + this.name = name; + } + + public Builder setDescription(String description) { + this.description = description; + return this; + } + + public Builder setInputs(List inputs) { + this.inputs = inputs; + return this; + } + + public Builder setOutputs(List outputs) { + this.outputs = outputs; + return this; + } + + public Builder setImplementation(TImplementation implementation) { + this.implementation = implementation; + return this; + } + + public TWorkflow build() { + return new TWorkflow(this); + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTTopologyTemplateDefinition.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTTopologyTemplateDefinition.java index be8be6176a..df8dd128b3 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTTopologyTemplateDefinition.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTTopologyTemplateDefinition.java @@ -13,18 +13,17 @@ *******************************************************************************/ package org.eclipse.winery.model.tosca.yaml; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Objects; - +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.winery.model.tosca.yaml.visitor.AbstractParameter; import org.eclipse.winery.model.tosca.yaml.visitor.AbstractResult; import org.eclipse.winery.model.tosca.yaml.visitor.IVisitor; import org.eclipse.winery.model.tosca.yaml.visitor.VisitorNode; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; public class YTTopologyTemplateDefinition implements VisitorNode { private String description; @@ -35,6 +34,7 @@ public class YTTopologyTemplateDefinition implements VisitorNode { private Map policies; private Map outputs; private YTSubstitutionMappings substitutionMappings; + private Map workflows; protected YTTopologyTemplateDefinition(Builder builder) { this.setDescription(builder.description); @@ -45,6 +45,7 @@ protected YTTopologyTemplateDefinition(Builder builder) { this.setPolicies(builder.policies); this.setOutputs(builder.outputs); this.setSubstitutionMappings(builder.substitutionMappings); + this.setWorkflows(builder.workflows); } @Override @@ -59,12 +60,13 @@ public boolean equals(Object o) { Objects.equals(getGroups(), that.getGroups()) && Objects.equals(getPolicies(), that.getPolicies()) && Objects.equals(getOutputs(), that.getOutputs()) && - Objects.equals(getSubstitutionMappings(), that.getSubstitutionMappings()); + Objects.equals(getSubstitutionMappings(), that.getSubstitutionMappings()) && + Objects.equals(getWorkflows(), that.getWorkflows()); } @Override public int hashCode() { - return Objects.hash(getDescription(), getInputs(), getNodeTemplates(), getRelationshipTemplates(), getGroups(), getPolicies(), getOutputs(), getSubstitutionMappings()); + return Objects.hash(getDescription(), getInputs(), getNodeTemplates(), getRelationshipTemplates(), getGroups(), getPolicies(), getOutputs(), getSubstitutionMappings(), getWorkflows()); } @Override @@ -78,6 +80,7 @@ public String toString() { ", policies=" + getPolicies() + ", outputs=" + getOutputs() + ", substitutionMappings=" + getSubstitutionMappings() + + ", workflows=" + getWorkflows() + '}'; } @@ -169,6 +172,15 @@ public void setSubstitutionMappings(YTSubstitutionMappings substitutionMappings) this.substitutionMappings = substitutionMappings; } + @Nullable + public Map getWorkflows() { + return workflows; + } + + public void setWorkflows(Map workflows) { + this.workflows = workflows; + } + public , P extends AbstractParameter

> R accept(IVisitor visitor, P parameter) { return visitor.visit(this, parameter); } @@ -182,6 +194,7 @@ public static class Builder { private Map policies; private Map outputs; private YTSubstitutionMappings substitutionMappings; + private Map workflows; public Builder setDescription(String description) { this.description = description; @@ -223,6 +236,11 @@ public Builder setSubstitutionMappings(YTSubstitutionMappings substitutionMappin return this; } + public Builder setWorkflows(Map workflows) { + this.workflows = workflows; + return this; + } + public Builder addInputs(Map inputs) { if (inputs == null || inputs.isEmpty()) { return this; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTWorkflow.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTWorkflow.java new file mode 100644 index 0000000000..729fae08df --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTWorkflow.java @@ -0,0 +1,209 @@ +/******************************************************************************* + * Copyright (c) 2022 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.yaml; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.winery.model.tosca.yaml.visitor.AbstractParameter; +import org.eclipse.winery.model.tosca.yaml.visitor.AbstractResult; +import org.eclipse.winery.model.tosca.yaml.visitor.IVisitor; +import org.eclipse.winery.model.tosca.yaml.visitor.VisitorNode; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; + +public class YTWorkflow implements VisitorNode { + private String name; + private String description; + private Map inputs; + private Map outputs; + private YTImplementation implementation; + + private YTWorkflow(Builder builder) { + this.setName(builder.name); + this.setDescription(builder.description); + this.setInputs(builder.inputs); + this.setOutputs(builder.outputs); + this.setImplementation(builder.implementation); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof YTWorkflow)) return false; + YTWorkflow that = (YTWorkflow) o; + return Objects.equals(getName(), that.getName()) && + Objects.equals(getDescription(), that.getDescription()) && + Objects.equals(getInputs(), that.getInputs()) && + Objects.equals(getOutputs(), that.getOutputs()) && + Objects.equals(getImplementation(), that.getImplementation()); + } + + @Override + public int hashCode() { + return Objects.hash(getName(), getDescription(), getInputs(), getOutputs(), getImplementation()); + } + + @Override + public String toString() { + return "YTWorkflow{" + + "name='" + getName() + '\'' + + ", description='" + getDescription() + '\'' + + ", inputs=" + getInputs() + + ", outputs=" + getOutputs() + + ", implementation=" + getImplementation() + + '}'; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Nullable + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + @NonNull + public Map getInputs() { + if (this.inputs == null) { + this.inputs = new LinkedHashMap<>(); + } + + return inputs; + } + + public void setInputs(Map inputs) { + this.inputs = inputs; + } + + @NonNull + public Map getOutputs() { + if (this.outputs == null) { + this.outputs = new LinkedHashMap<>(); + } + return outputs; + } + + public void setOutputs(Map outputs) { + this.outputs = outputs; + } + + @Nullable + public YTImplementation getImplementation() { + return implementation; + } + + public void setImplementation(YTImplementation implementation) { + this.implementation = implementation; + } + + + public , P extends AbstractParameter

> R accept(IVisitor visitor, P parameter) { + return visitor.visit(this, parameter); + } + + public static class Builder { + + private String name; + private String description; + private Map inputs; + private Map outputs; + private YTImplementation implementation; + + public Builder setName(String name) { + this.name = name; + return this; + } + + public Builder setDescription(String description) { + this.description = description; + return this; + } + + public Builder setInputs(Map inputs) { + this.inputs = inputs; + return this; + } + + public Builder setOutputs(Map outputs) { + this.outputs = outputs; + return this; + } + + public Builder setImplementation(YTImplementation implementation) { + this.implementation = implementation; + return this; + } + + public Builder addInputs(Map inputs) { + if (inputs == null || inputs.isEmpty()) { + return this; + } + + if (this.inputs == null) { + this.inputs = new LinkedHashMap<>(inputs); + } else { + this.inputs.putAll(inputs); + } + + return this; + } + + public Builder addInputs(String name, YTParameterDefinition input) { + if (name == null || name.isEmpty()) { + return this; + } + + return addInputs(Collections.singletonMap(name, input)); + } + + public Builder addOutputs(Map outputs) { + if (outputs == null || outputs.isEmpty()) { + return this; + } + + if (this.outputs == null) { + this.outputs = new LinkedHashMap<>(outputs); + } else { + this.outputs.putAll(outputs); + } + + return this; + } + + public Builder addOutputs(String name, YTParameterDefinition output) { + if (name == null || name.isEmpty()) { + return this; + } + + return addOutputs(Collections.singletonMap(name, output)); + } + + public YTWorkflow build() { + return new YTWorkflow(this); + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/support/YamlSpecKeywords.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/support/YamlSpecKeywords.java index 27ab9093e7..8b828cae9e 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/support/YamlSpecKeywords.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/support/YamlSpecKeywords.java @@ -96,4 +96,5 @@ public class YamlSpecKeywords { public static final String VALID_TARGET_TYPES = "valid_target_types"; public static final String VALUE = "value"; public static final String VERSION = "version"; + public static final String WORKFLOWS = "workflows"; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/AbstractVisitor.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/AbstractVisitor.java index 3f16c34184..6ff3ee36a0 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/AbstractVisitor.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/AbstractVisitor.java @@ -13,58 +13,16 @@ *******************************************************************************/ package org.eclipse.winery.model.tosca.yaml.visitor; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.winery.model.tosca.yaml.*; +import org.eclipse.winery.model.tosca.yaml.support.Metadata; + import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.stream.Stream; -import org.eclipse.winery.model.tosca.yaml.YTArtifactDefinition; -import org.eclipse.winery.model.tosca.yaml.YTArtifactType; -import org.eclipse.winery.model.tosca.yaml.YTAttributeAssignment; -import org.eclipse.winery.model.tosca.yaml.YTAttributeDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCallOperationActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityAssignment; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityType; -import org.eclipse.winery.model.tosca.yaml.YTConstraintClause; -import org.eclipse.winery.model.tosca.yaml.YTDataType; -import org.eclipse.winery.model.tosca.yaml.YTEntityType; -import org.eclipse.winery.model.tosca.yaml.YTEventFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupType; -import org.eclipse.winery.model.tosca.yaml.YTImplementation; -import org.eclipse.winery.model.tosca.yaml.YTImportDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceAssignment; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceType; -import org.eclipse.winery.model.tosca.yaml.YTNodeFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTNodeTemplate; -import org.eclipse.winery.model.tosca.yaml.YTNodeType; -import org.eclipse.winery.model.tosca.yaml.YTOperationDefinition; -import org.eclipse.winery.model.tosca.yaml.YTParameterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyType; -import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignment; -import org.eclipse.winery.model.tosca.yaml.YTPropertyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPropertyFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipTemplate; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipType; -import org.eclipse.winery.model.tosca.yaml.YTRepositoryDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRequirementAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRequirementDefinition; -import org.eclipse.winery.model.tosca.yaml.YTSchemaDefinition; -import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate; -import org.eclipse.winery.model.tosca.yaml.YTSubstitutionMappings; -import org.eclipse.winery.model.tosca.yaml.YTTopologyTemplateDefinition; -import org.eclipse.winery.model.tosca.yaml.YTTriggerDefinition; -import org.eclipse.winery.model.tosca.yaml.YTVersion; -import org.eclipse.winery.model.tosca.yaml.support.Metadata; - -import org.eclipse.jdt.annotation.NonNull; - public abstract class AbstractVisitor, P extends AbstractParameter

> implements IVisitor { @Override public R visit(YTArtifactDefinition node, P parameter) { @@ -229,6 +187,14 @@ public R visit(YTOperationDefinition node, P parameter) { )); } + @Override + public R visit(YTWorkflow node, P parameter) { + return reduce(Stream.of( + visitElement(node.getInputs(), parameter, "inputs"), + visitElement(node.getImplementation(), parameter, "implementation") + )); + } + @Override public R visit(YTParameterDefinition node, P parameter) { return reduce(Stream.of( diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/IVisitor.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/IVisitor.java index b5c65d102b..42223bdf35 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/IVisitor.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/IVisitor.java @@ -13,48 +13,7 @@ *******************************************************************************/ package org.eclipse.winery.model.tosca.yaml.visitor; -import org.eclipse.winery.model.tosca.yaml.YTArtifactDefinition; -import org.eclipse.winery.model.tosca.yaml.YTArtifactType; -import org.eclipse.winery.model.tosca.yaml.YTAttributeAssignment; -import org.eclipse.winery.model.tosca.yaml.YTAttributeDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCallOperationActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityAssignment; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityType; -import org.eclipse.winery.model.tosca.yaml.YTConstraintClause; -import org.eclipse.winery.model.tosca.yaml.YTDataType; -import org.eclipse.winery.model.tosca.yaml.YTEntityType; -import org.eclipse.winery.model.tosca.yaml.YTEventFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupType; -import org.eclipse.winery.model.tosca.yaml.YTImplementation; -import org.eclipse.winery.model.tosca.yaml.YTImportDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceAssignment; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceType; -import org.eclipse.winery.model.tosca.yaml.YTNodeFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTNodeTemplate; -import org.eclipse.winery.model.tosca.yaml.YTNodeType; -import org.eclipse.winery.model.tosca.yaml.YTOperationDefinition; -import org.eclipse.winery.model.tosca.yaml.YTParameterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyType; -import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignment; -import org.eclipse.winery.model.tosca.yaml.YTPropertyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPropertyFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipTemplate; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipType; -import org.eclipse.winery.model.tosca.yaml.YTRepositoryDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRequirementAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRequirementDefinition; -import org.eclipse.winery.model.tosca.yaml.YTSchemaDefinition; -import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate; -import org.eclipse.winery.model.tosca.yaml.YTSubstitutionMappings; -import org.eclipse.winery.model.tosca.yaml.YTTopologyTemplateDefinition; -import org.eclipse.winery.model.tosca.yaml.YTTriggerDefinition; -import org.eclipse.winery.model.tosca.yaml.YTVersion; +import org.eclipse.winery.model.tosca.yaml.*; import org.eclipse.winery.model.tosca.yaml.support.Metadata; public interface IVisitor { @@ -142,5 +101,7 @@ public interface IVisitor R visit(YTVersion node, P parameter); + R visit(YTWorkflow node, P parameter); + R visit(Metadata node, P parameter); } 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 ac252dad1a..f6771b9437 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 @@ -13,32 +13,9 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.servicetemplates.topologytemplates; -import java.io.IOException; -import java.net.URI; -import java.security.InvalidParameterException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; -import javax.xml.namespace.QName; - +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.eclipse.winery.common.configuration.Environments; import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.model.adaptation.enhance.EnhancementUtils; @@ -50,14 +27,7 @@ import org.eclipse.winery.model.ids.EncodingUtil; import org.eclipse.winery.model.ids.definitions.NodeTypeId; import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; -import org.eclipse.winery.model.tosca.DeploymentTechnologyDescriptor; -import org.eclipse.winery.model.tosca.HasTags; -import org.eclipse.winery.model.tosca.TEntityTemplate; -import org.eclipse.winery.model.tosca.TEntityType; -import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TNodeType; -import org.eclipse.winery.model.tosca.TRelationshipTemplate; -import org.eclipse.winery.model.tosca.TTopologyTemplate; +import org.eclipse.winery.model.tosca.*; import org.eclipse.winery.model.tosca.extensions.kvproperties.PropertyDefinitionKV; import org.eclipse.winery.model.tosca.utils.ModelUtilities; import org.eclipse.winery.model.version.VersionSupport; @@ -76,13 +46,21 @@ import org.eclipse.winery.repository.splitting.Splitting; import org.eclipse.winery.repository.targetallocation.Allocation; import org.eclipse.winery.repository.targetallocation.util.AllocationRequest; - -import com.fasterxml.jackson.databind.ObjectMapper; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import javax.xml.namespace.QName; +import java.io.IOException; +import java.net.URI; +import java.security.InvalidParameterException; +import java.util.*; +import java.util.stream.Collectors; + public class TopologyTemplateResource { private static final Logger LOGGER = LoggerFactory.getLogger(TopologyTemplateResource.class); @@ -215,6 +193,10 @@ public Response setModelJson(TTopologyTemplate topologyTemplate) throws Exceptio topologyTemplate.setOutputs(this.parent.getTopology().getOutputs()); } + if (topologyTemplate.getWorkflows().isEmpty() && !this.parent.getTopology().getWorkflows().isEmpty()) { + topologyTemplate.setWorkflows(this.parent.getTopology().getWorkflows()); + } + // the following method includes patching of the topology template (removing empty lists, ..) this.parent.setTopology(topologyTemplate, this.type); requestRepository.putDefinition(parent.getId(), this.parent.getDefinitions()); @@ -230,7 +212,7 @@ public Response setModelJson(TTopologyTemplate topologyTemplate) throws Exceptio "getTopologyTemplate(QName)} consumes this template

" + "

@return The XML representation of the topology template without" + "associated artifacts and without the parent service template

") - @Produces( {MediaType.APPLICATION_XML, MediaType.TEXT_XML}) + @Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) // @formatter:on public Response getComponentInstanceXML() { return RestUtils.getXML(TTopologyTemplate.class, this.topologyTemplate, requestRepository); @@ -287,8 +269,8 @@ public Response allocate(@Context UriInfo uriInfo, AllocationRequest allocationR @POST @Path("compose/") - @Consumes( {MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) - @Produces( {MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) + @Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) public Response composeServiceTemplates(CompositionData compositionData, @Context UriInfo uriInfo) { Splitting splitting = new Splitting(); String newComposedSolutionServiceTemplateId = compositionData.getTargetid(); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/reader/YamlBuilder.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/reader/YamlBuilder.java index 229ce1b17a..b4fc0cc8c2 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/reader/YamlBuilder.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/reader/YamlBuilder.java @@ -14,93 +14,29 @@ package org.eclipse.winery.repository.converter.reader; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.TimeZone; -import java.util.function.BiFunction; -import java.util.function.Predicate; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.xml.namespace.QName; - +import org.eclipse.collections.api.tuple.Pair; +import org.eclipse.collections.impl.tuple.Tuples; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.winery.common.version.VersionUtils; import org.eclipse.winery.model.converter.support.Namespaces; import org.eclipse.winery.model.converter.support.exception.InvalidToscaSyntax; import org.eclipse.winery.model.converter.support.exception.MultiException; -import org.eclipse.winery.model.tosca.yaml.YTActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTArtifactDefinition; -import org.eclipse.winery.model.tosca.yaml.YTArtifactType; -import org.eclipse.winery.model.tosca.yaml.YTAttributeAssignment; -import org.eclipse.winery.model.tosca.yaml.YTAttributeDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCallOperationActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityAssignment; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityType; -import org.eclipse.winery.model.tosca.yaml.YTConstraintClause; -import org.eclipse.winery.model.tosca.yaml.YTDataType; -import org.eclipse.winery.model.tosca.yaml.YTEntityType; -import org.eclipse.winery.model.tosca.yaml.YTEventFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupType; -import org.eclipse.winery.model.tosca.yaml.YTImplementation; -import org.eclipse.winery.model.tosca.yaml.YTImportDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceAssignment; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceType; -import org.eclipse.winery.model.tosca.yaml.YTNodeFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTNodeTemplate; -import org.eclipse.winery.model.tosca.yaml.YTNodeType; -import org.eclipse.winery.model.tosca.yaml.YTOperationDefinition; -import org.eclipse.winery.model.tosca.yaml.YTParameterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyType; -import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignment; -import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignmentOrDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPropertyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPropertyFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipTemplate; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipType; -import org.eclipse.winery.model.tosca.yaml.YTRepositoryDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRequirementAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRequirementDefinition; -import org.eclipse.winery.model.tosca.yaml.YTSchemaDefinition; -import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate; -import org.eclipse.winery.model.tosca.yaml.YTStatusValue; -import org.eclipse.winery.model.tosca.yaml.YTSubstitutionMappings; -import org.eclipse.winery.model.tosca.yaml.YTTopologyTemplateDefinition; -import org.eclipse.winery.model.tosca.yaml.YTTriggerDefinition; -import org.eclipse.winery.model.tosca.yaml.YTVersion; -import org.eclipse.winery.model.tosca.yaml.support.Metadata; -import org.eclipse.winery.model.tosca.yaml.support.YTListString; -import org.eclipse.winery.model.tosca.yaml.support.YTMapActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YTMapImportDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YTMapObject; -import org.eclipse.winery.model.tosca.yaml.support.YTMapPolicyDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YTMapPropertyFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YTMapRequirementAssignment; -import org.eclipse.winery.model.tosca.yaml.support.YTMapRequirementDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YamlSpecKeywords; +import org.eclipse.winery.model.tosca.yaml.*; +import org.eclipse.winery.model.tosca.yaml.support.*; import org.eclipse.winery.model.tosca.yaml.tosca.datatypes.Credential; import org.eclipse.winery.repository.converter.validator.FieldValidator; - -import org.eclipse.collections.api.tuple.Pair; -import org.eclipse.collections.impl.tuple.Tuples; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.xml.namespace.QName; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.BiFunction; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + public class YamlBuilder { public static final Logger LOGGER = LoggerFactory.getLogger(YamlBuilder.class); @@ -219,6 +155,7 @@ public YTTopologyTemplateDefinition buildTopologyTemplate(Object object, Paramet .setSubstitutionMappings(buildSubstitutionMappings(map.get(YamlSpecKeywords.SUBSTITUTION_MAPPINGS), parameter.copy().addContext(YamlSpecKeywords.SUBSTITUTION_MAPPINGS) )) + .setWorkflows(buildMap(map, YamlSpecKeywords.WORKFLOWS, this::buildWorkflowDefinition, parameter)) .build(); } @@ -1312,6 +1249,30 @@ public YTPolicyDefinition buildPolicyDefinition(Object object, Parameter parameter) { + if (Objects.isNull(object)) { + return null; + } + if (!validate(YTWorkflow.class, object, parameter)) { + return null; + } + @SuppressWarnings("unchecked") + Map map = (Map) object; + return new YTWorkflow.Builder() + .setDescription(buildDescription(map.get(YamlSpecKeywords.DESCRIPTION))) + .setInputs(buildParameterDefinitions(map.get(YamlSpecKeywords.INPUTS), + new Parameter<>(parameter.getContext()).addContext(YamlSpecKeywords.INPUTS).setValue(parameter.getValue()) + )) + .setOutputs(buildParameterDefinitions(map.get(YamlSpecKeywords.OUTPUTS), + new Parameter<>(parameter.getContext()).addContext(YamlSpecKeywords.OUTPUTS).setValue(parameter.getValue()) + )) + .setImplementation(buildImplementation(map.get(YamlSpecKeywords.IMPLEMENTATION), + new Parameter(parameter.getContext()).addContext(YamlSpecKeywords.IMPLEMENTATION) + )) + .build(); + } + @Nullable public YTSubstitutionMappings buildSubstitutionMappings(Object object, Parameter parameter) { if (Objects.isNull(object) || !validate(YTSubstitutionMappings.class, object, parameter)) { diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/writer/YamlWriter.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/writer/YamlWriter.java index caea297d0f..f81286d8c7 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/writer/YamlWriter.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/writer/YamlWriter.java @@ -13,6 +13,15 @@ *******************************************************************************/ package org.eclipse.winery.repository.converter.writer; +import org.eclipse.winery.model.tosca.yaml.*; +import org.eclipse.winery.model.tosca.yaml.support.*; +import org.eclipse.winery.model.tosca.yaml.tosca.datatypes.Credential; +import org.eclipse.winery.model.tosca.yaml.visitor.AbstractParameter; +import org.eclipse.winery.model.tosca.yaml.visitor.AbstractVisitor; +import org.eclipse.winery.model.tosca.yaml.visitor.VisitorNode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.ByteArrayInputStream; import java.io.FileWriter; import java.io.IOException; @@ -20,83 +29,15 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.SortedSet; -import java.util.TreeSet; +import java.util.*; import java.util.stream.Collectors; -import org.eclipse.winery.model.tosca.yaml.YTArtifactDefinition; -import org.eclipse.winery.model.tosca.yaml.YTArtifactType; -import org.eclipse.winery.model.tosca.yaml.YTAttributeAssignment; -import org.eclipse.winery.model.tosca.yaml.YTAttributeDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCallOperationActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityAssignment; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityType; -import org.eclipse.winery.model.tosca.yaml.YTConstraintClause; -import org.eclipse.winery.model.tosca.yaml.YTDataType; -import org.eclipse.winery.model.tosca.yaml.YTEntityType; -import org.eclipse.winery.model.tosca.yaml.YTEventFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupType; -import org.eclipse.winery.model.tosca.yaml.YTImplementation; -import org.eclipse.winery.model.tosca.yaml.YTImportDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceAssignment; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceType; -import org.eclipse.winery.model.tosca.yaml.YTNodeFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTNodeTemplate; -import org.eclipse.winery.model.tosca.yaml.YTNodeType; -import org.eclipse.winery.model.tosca.yaml.YTOperationDefinition; -import org.eclipse.winery.model.tosca.yaml.YTParameterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyType; -import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignment; -import org.eclipse.winery.model.tosca.yaml.YTPropertyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPropertyFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipTemplate; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipType; -import org.eclipse.winery.model.tosca.yaml.YTRepositoryDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRequirementAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRequirementDefinition; -import org.eclipse.winery.model.tosca.yaml.YTSchemaDefinition; -import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate; -import org.eclipse.winery.model.tosca.yaml.YTStatusValue; -import org.eclipse.winery.model.tosca.yaml.YTSubstitutionMappings; -import org.eclipse.winery.model.tosca.yaml.YTTopologyTemplateDefinition; -import org.eclipse.winery.model.tosca.yaml.YTTriggerDefinition; -import org.eclipse.winery.model.tosca.yaml.YTVersion; -import org.eclipse.winery.model.tosca.yaml.support.Metadata; -import org.eclipse.winery.model.tosca.yaml.support.YTListString; -import org.eclipse.winery.model.tosca.yaml.support.YTMapActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YTMapImportDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YTMapObject; -import org.eclipse.winery.model.tosca.yaml.support.YTMapPropertyFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YTMapRequirementAssignment; -import org.eclipse.winery.model.tosca.yaml.support.YTMapRequirementDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YamlSpecKeywords; -import org.eclipse.winery.model.tosca.yaml.tosca.datatypes.Credential; -import org.eclipse.winery.model.tosca.yaml.visitor.AbstractParameter; -import org.eclipse.winery.model.tosca.yaml.visitor.AbstractVisitor; -import org.eclipse.winery.model.tosca.yaml.visitor.VisitorNode; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - // FIXME this belongs with the specific implementation public class YamlWriter extends AbstractVisitor { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractVisitor.class); - private static final String[] PROPERTY_FUNCTIONS = new String[] { + private static final String[] PROPERTY_FUNCTIONS = new String[]{ "get_input", "get_property", "get_attribute", "get_operation_output", "get_nodes_of_type", "get_artifact" }; @@ -175,7 +116,8 @@ public YamlPrinter visit(YTTopologyTemplateDefinition node, Parameter parameter) .print(printListMap(YamlSpecKeywords.POLICIES, node.getPolicies().size() > 0 ? Collections.singletonList(node.getPolicies()) : new ArrayList<>(), parameter)) .print(printMap(YamlSpecKeywords.OUTPUTS, node.getOutputs(), parameter)) - .print(printVisitorNode(node.getSubstitutionMappings(), new Parameter(parameter.getIndent()).addContext(YamlSpecKeywords.SUBSTITUTION_MAPPINGS))); + .print(printVisitorNode(node.getSubstitutionMappings(), new Parameter(parameter.getIndent()).addContext(YamlSpecKeywords.SUBSTITUTION_MAPPINGS))) + .print(printMap(YamlSpecKeywords.WORKFLOWS, node.getWorkflows(), parameter)); } public YamlPrinter visit(Metadata node, Parameter parameter) { @@ -295,6 +237,14 @@ public YamlPrinter visit(YTOperationDefinition node, Parameter parameter) { .print(printVisitorNode(node.getImplementation(), new Parameter(parameter.getIndent()).addContext(YamlSpecKeywords.IMPLEMENTATION))); } + public YamlPrinter visit(YTWorkflow node, Parameter parameter) { + return new YamlPrinter(parameter.getIndent()) + .printKeyValue(YamlSpecKeywords.DESCRIPTION, node.getDescription()) + .print(printMap(YamlSpecKeywords.INPUTS, node.getInputs(), new Parameter(parameter.getIndent()))) + .print(printMap(YamlSpecKeywords.OUTPUTS, node.getOutputs(), new Parameter(parameter.getIndent()))) + .print(printVisitorNode(node.getImplementation(), new Parameter(parameter.getIndent()).addContext(YamlSpecKeywords.IMPLEMENTATION))); + } + public YamlPrinter visit(YTImplementation node, Parameter parameter) { YamlPrinter printer = new YamlPrinter(parameter.getIndent()) .printKeyValue(YamlSpecKeywords.PRIMARY, node.getPrimaryArtifactName()) 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 f533c3ed53..7da23f17cd 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 @@ -13,133 +13,27 @@ *******************************************************************************/ package org.eclipse.winery.repository.yaml.converter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.xml.namespace.QName; - +import org.eclipse.collections.impl.bimap.mutable.HashBiMap; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.winery.common.Constants; import org.eclipse.winery.model.converter.support.Namespaces; import org.eclipse.winery.model.converter.support.xml.TypeConverter; -import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; -import org.eclipse.winery.model.ids.definitions.ArtifactTypeId; -import org.eclipse.winery.model.ids.definitions.CapabilityTypeId; -import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; -import org.eclipse.winery.model.ids.definitions.InterfaceTypeId; -import org.eclipse.winery.model.ids.definitions.NodeTypeId; -import org.eclipse.winery.model.ids.definitions.PolicyTypeId; -import org.eclipse.winery.model.ids.definitions.RelationshipTypeId; -import org.eclipse.winery.model.ids.definitions.RequirementTypeId; -import org.eclipse.winery.model.tosca.TActivityDefinition; -import org.eclipse.winery.model.tosca.TArtifact; -import org.eclipse.winery.model.tosca.TArtifactReference; -import org.eclipse.winery.model.tosca.TArtifactTemplate; -import org.eclipse.winery.model.tosca.TArtifactType; -import org.eclipse.winery.model.tosca.TBoundaryDefinitions; -import org.eclipse.winery.model.tosca.TCallOperationActivityDefinition; -import org.eclipse.winery.model.tosca.TCapability; -import org.eclipse.winery.model.tosca.TCapabilityDefinition; -import org.eclipse.winery.model.tosca.TCapabilityType; -import org.eclipse.winery.model.tosca.TDataType; -import org.eclipse.winery.model.tosca.TDefinitions; -import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentOrImplementationArtifact; -import org.eclipse.winery.model.tosca.TDocumentation; -import org.eclipse.winery.model.tosca.TEntityTemplate; -import org.eclipse.winery.model.tosca.TEntityType; -import org.eclipse.winery.model.tosca.TEntityTypeImplementation; -import org.eclipse.winery.model.tosca.TGroupDefinition; -import org.eclipse.winery.model.tosca.TGroupType; -import org.eclipse.winery.model.tosca.TImplementation; -import org.eclipse.winery.model.tosca.TImplementationArtifact; -import org.eclipse.winery.model.tosca.TInterface; -import org.eclipse.winery.model.tosca.TInterfaceDefinition; -import org.eclipse.winery.model.tosca.TInterfaceType; -import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TNodeType; -import org.eclipse.winery.model.tosca.TNodeTypeImplementation; -import org.eclipse.winery.model.tosca.TOperation; -import org.eclipse.winery.model.tosca.TOperationDefinition; -import org.eclipse.winery.model.tosca.TParameter; -import org.eclipse.winery.model.tosca.TPolicy; -import org.eclipse.winery.model.tosca.TPolicyType; -import org.eclipse.winery.model.tosca.TRelationshipTemplate; -import org.eclipse.winery.model.tosca.TRelationshipType; -import org.eclipse.winery.model.tosca.TRelationshipTypeImplementation; -import org.eclipse.winery.model.tosca.TRequirement; -import org.eclipse.winery.model.tosca.TRequirementDefinition; -import org.eclipse.winery.model.tosca.TRequirementType; -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.TTopologyTemplate; -import org.eclipse.winery.model.tosca.TTriggerDefinition; -import org.eclipse.winery.model.tosca.extensions.kvproperties.AttributeDefinition; -import org.eclipse.winery.model.tosca.extensions.kvproperties.ConstraintClauseKV; -import org.eclipse.winery.model.tosca.extensions.kvproperties.ParameterDefinition; -import org.eclipse.winery.model.tosca.extensions.kvproperties.PropertyDefinitionKV; -import org.eclipse.winery.model.tosca.extensions.kvproperties.WinerysPropertiesDefinition; -import org.eclipse.winery.model.tosca.yaml.YTArtifactDefinition; -import org.eclipse.winery.model.tosca.yaml.YTArtifactType; -import org.eclipse.winery.model.tosca.yaml.YTAttributeDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCallOperationActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityAssignment; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityType; -import org.eclipse.winery.model.tosca.yaml.YTConstraintClause; -import org.eclipse.winery.model.tosca.yaml.YTDataType; -import org.eclipse.winery.model.tosca.yaml.YTEntityType; -import org.eclipse.winery.model.tosca.yaml.YTEventFilterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupType; -import org.eclipse.winery.model.tosca.yaml.YTImplementation; -import org.eclipse.winery.model.tosca.yaml.YTImportDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceType; -import org.eclipse.winery.model.tosca.yaml.YTNodeTemplate; -import org.eclipse.winery.model.tosca.yaml.YTNodeType; -import org.eclipse.winery.model.tosca.yaml.YTOperationDefinition; -import org.eclipse.winery.model.tosca.yaml.YTParameterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyType; -import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignment; -import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignmentOrDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPropertyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipTemplate; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipType; -import org.eclipse.winery.model.tosca.yaml.YTRequirementAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRequirementDefinition; -import org.eclipse.winery.model.tosca.yaml.YTSchemaDefinition; -import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate; -import org.eclipse.winery.model.tosca.yaml.YTSubstitutionMappings; -import org.eclipse.winery.model.tosca.yaml.YTTopologyTemplateDefinition; -import org.eclipse.winery.model.tosca.yaml.YTTriggerDefinition; -import org.eclipse.winery.model.tosca.yaml.support.Defaults; -import org.eclipse.winery.model.tosca.yaml.support.Metadata; -import org.eclipse.winery.model.tosca.yaml.support.YTMapActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YTMapImportDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YTMapRequirementAssignment; -import org.eclipse.winery.model.tosca.yaml.support.YTMapRequirementDefinition; -import org.eclipse.winery.model.tosca.yaml.support.YamlSpecKeywords; +import org.eclipse.winery.model.ids.definitions.*; +import org.eclipse.winery.model.tosca.*; +import org.eclipse.winery.model.tosca.extensions.kvproperties.*; +import org.eclipse.winery.model.tosca.yaml.*; +import org.eclipse.winery.model.tosca.yaml.support.*; import org.eclipse.winery.repository.yaml.YamlRepository; import org.eclipse.winery.repository.yaml.export.YamlExporter; - -import org.eclipse.collections.impl.bimap.mutable.HashBiMap; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.xml.namespace.QName; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + public class FromCanonical { public final static Logger LOGGER = LoggerFactory.getLogger(FromCanonical.class); @@ -274,6 +168,10 @@ public YTTopologyTemplateDefinition convert(TServiceTemplate node) { if (topologyTemplate.getOutputs() != null) { builder.setOutputs(convert(topologyTemplate.getOutputs())); } + if (!topologyTemplate.getWorkflows().isEmpty()) { + builder.setWorkflows(convert(topologyTemplate.getWorkflows())); + } + return builder.build(); } @@ -1136,6 +1034,8 @@ private Map convert(List nodes) { return convert((TDeploymentArtifact) node).entrySet().stream(); } else if (node instanceof TParameter) { return convert((TParameter) node).entrySet().stream(); + } else if (node instanceof TWorkflow) { + return convert((TWorkflow) node).entrySet().stream(); } throw new AssertionError(); }) @@ -1199,6 +1099,20 @@ private Map convert(TOperationDefinition node) { .build()); } + private Map convert(TWorkflow node) { + if (Objects.isNull(node)) { + return new HashMap<>(); + } + return Collections.singletonMap( + node.getName(), + new YTWorkflow.Builder() + .setDescription(node.getDescription()) + .setInputs(convert(node.getInputs())) + .setOutputs(convert(node.getOutputs())) + .setImplementation(convert(node.getImplementation())) + .build()); + } + private Map convert(TGroupDefinition node) { if (Objects.isNull(node)) { return new HashMap<>(); 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 779664e394..ee634dc7aa 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 @@ -13,107 +13,18 @@ *******************************************************************************/ package org.eclipse.winery.repository.yaml.converter; -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.xml.namespace.QName; - +import org.apache.commons.lang3.StringUtils; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.eclipse.winery.model.converter.support.Defaults; import org.eclipse.winery.model.converter.support.Namespaces; import org.eclipse.winery.model.ids.EncodingUtil; import org.eclipse.winery.model.ids.definitions.NodeTypeId; -import org.eclipse.winery.model.tosca.HasInheritance; -import org.eclipse.winery.model.tosca.TActivityDefinition; -import org.eclipse.winery.model.tosca.TArtifact; -import org.eclipse.winery.model.tosca.TArtifactReference; -import org.eclipse.winery.model.tosca.TArtifactTemplate; -import org.eclipse.winery.model.tosca.TArtifactType; -import org.eclipse.winery.model.tosca.TBoundaryDefinitions; -import org.eclipse.winery.model.tosca.TCallOperationActivityDefinition; -import org.eclipse.winery.model.tosca.TCapability; -import org.eclipse.winery.model.tosca.TCapabilityDefinition; -import org.eclipse.winery.model.tosca.TCapabilityType; -import org.eclipse.winery.model.tosca.TDataType; -import org.eclipse.winery.model.tosca.TDefinitions; -import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TEntityTemplate; -import org.eclipse.winery.model.tosca.TEntityType; -import org.eclipse.winery.model.tosca.TEventFilterDefinition; -import org.eclipse.winery.model.tosca.TGroupDefinition; -import org.eclipse.winery.model.tosca.TGroupType; -import org.eclipse.winery.model.tosca.TImplementation; -import org.eclipse.winery.model.tosca.TImplementationArtifact; -import org.eclipse.winery.model.tosca.TImport; -import org.eclipse.winery.model.tosca.TInterface; -import org.eclipse.winery.model.tosca.TInterfaceDefinition; -import org.eclipse.winery.model.tosca.TInterfaceType; -import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TNodeType; -import org.eclipse.winery.model.tosca.TNodeTypeImplementation; -import org.eclipse.winery.model.tosca.TOperationDefinition; -import org.eclipse.winery.model.tosca.TParameter; -import org.eclipse.winery.model.tosca.TPolicy; -import org.eclipse.winery.model.tosca.TPolicyType; -import org.eclipse.winery.model.tosca.TRelationshipTemplate; -import org.eclipse.winery.model.tosca.TRelationshipType; -import org.eclipse.winery.model.tosca.TRelationshipTypeImplementation; -import org.eclipse.winery.model.tosca.TRequirement; -import org.eclipse.winery.model.tosca.TRequirementDefinition; -import org.eclipse.winery.model.tosca.TRequirementType; -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.TTopologyTemplate; -import org.eclipse.winery.model.tosca.TTriggerDefinition; +import org.eclipse.winery.model.tosca.*; import org.eclipse.winery.model.tosca.extensions.kvproperties.AttributeDefinition; import org.eclipse.winery.model.tosca.extensions.kvproperties.ConstraintClauseKV; import org.eclipse.winery.model.tosca.extensions.kvproperties.ParameterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTArtifactDefinition; -import org.eclipse.winery.model.tosca.yaml.YTArtifactType; -import org.eclipse.winery.model.tosca.yaml.YTAttributeDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCallOperationActivityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityAssignment; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityDefinition; -import org.eclipse.winery.model.tosca.yaml.YTCapabilityType; -import org.eclipse.winery.model.tosca.yaml.YTConstraintClause; -import org.eclipse.winery.model.tosca.yaml.YTDataType; -import org.eclipse.winery.model.tosca.yaml.YTEntityType; -import org.eclipse.winery.model.tosca.yaml.YTGroupDefinition; -import org.eclipse.winery.model.tosca.yaml.YTGroupType; -import org.eclipse.winery.model.tosca.yaml.YTImplementation; -import org.eclipse.winery.model.tosca.yaml.YTImportDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceDefinition; -import org.eclipse.winery.model.tosca.yaml.YTInterfaceType; -import org.eclipse.winery.model.tosca.yaml.YTNodeTemplate; -import org.eclipse.winery.model.tosca.yaml.YTNodeType; -import org.eclipse.winery.model.tosca.yaml.YTOperationDefinition; -import org.eclipse.winery.model.tosca.yaml.YTParameterDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPolicyType; -import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignment; -import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignmentOrDefinition; -import org.eclipse.winery.model.tosca.yaml.YTPropertyDefinition; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipTemplate; -import org.eclipse.winery.model.tosca.yaml.YTRelationshipType; -import org.eclipse.winery.model.tosca.yaml.YTRequirementAssignment; -import org.eclipse.winery.model.tosca.yaml.YTRequirementDefinition; -import org.eclipse.winery.model.tosca.yaml.YTSchemaDefinition; -import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate; -import org.eclipse.winery.model.tosca.yaml.YTTopologyTemplateDefinition; -import org.eclipse.winery.model.tosca.yaml.YTTriggerDefinition; +import org.eclipse.winery.model.tosca.yaml.*; import org.eclipse.winery.model.tosca.yaml.support.Metadata; import org.eclipse.winery.model.tosca.yaml.support.ValueHelper; import org.eclipse.winery.model.tosca.yaml.support.YTMapActivityDefinition; @@ -123,13 +34,16 @@ import org.eclipse.winery.repository.yaml.converter.support.InheritanceUtils; import org.eclipse.winery.repository.yaml.converter.support.TypeConverter; import org.eclipse.winery.repository.yaml.converter.support.extension.YTImplementationArtifactDefinition; - -import org.apache.commons.lang3.StringUtils; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.xml.namespace.QName; +import java.io.File; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + public class ToCanonical { public final static Logger LOGGER = LoggerFactory.getLogger(ToCanonical.class); @@ -721,6 +635,10 @@ private TTopologyTemplate convert(YTTopologyTemplateDefinition node) { builder.setOutputs(convert(node.getOutputs())); } + if (node.getWorkflows() != null) { + builder.setWorkflows(convert(node.getWorkflows())); + } + return builder.build(); } @@ -1064,6 +982,19 @@ private TGroupDefinition convert(YTGroupDefinition node, String id) { return builder.build(); } + private TWorkflow convert(YTWorkflow node, String id) { + if (Objects.isNull(node)) { + return null; + } + + TWorkflow.Builder builder = new TWorkflow.Builder(id) + .setDescription(node.getDescription()) + .setInputs(convert(node.getInputs())) + .setOutputs(convert(node.getOutputs())) + .setImplementation(convert(node.getImplementation())); + return builder.build(); + } + private TImplementation convert(YTImplementation node) { if (Objects.isNull(node)) { return null; @@ -1152,7 +1083,7 @@ private TEntityType.YamlPropertiesDefinition convertProperties(@NonNull Map List convert(List> node) { return node.stream() .flatMap(map -> map.entrySet().stream()) @@ -1177,7 +1108,7 @@ private List convert(List> node) { .collect(Collectors.toList()); } - @SuppressWarnings( {"unchecked"}) + @SuppressWarnings({"unchecked"}) private List convert(@NonNull Map map) { return map.entrySet().stream() .map((Map.Entry entry) -> { @@ -1227,6 +1158,8 @@ private List convert(@NonNull Map map) { return convert((YTPropertyDefinition) entry.getValue(), entry.getKey()); } else if (entry.getValue() instanceof YTAttributeDefinition) { return convert((YTAttributeDefinition) entry.getValue(), entry.getKey()); + } else if (entry.getValue() instanceof YTWorkflow) { + return convert((YTWorkflow) entry.getValue(), entry.getKey()); } else { V v = entry.getValue(); System.err.println(v); From a88f01f644278d1c86e37bfeeaead878cf451a45 Mon Sep 17 00:00:00 2001 From: Vladimir Yussupov Date: Fri, 3 Jun 2022 11:21:24 +0200 Subject: [PATCH 6/9] Fix checkstyle issues --- .../winery/model/tosca/TTopologyTemplate.java | 87 +- .../yaml/YTTopologyTemplateDefinition.java | 37 +- .../tosca/yaml/visitor/AbstractVisitor.java | 215 +++-- .../model/tosca/yaml/visitor/IVisitor.java | 44 +- .../TopologyTemplateResource.java | 150 +-- .../converter/reader/YamlBuilder.java | 868 ++++++++++-------- .../converter/writer/YamlWriter.java | 514 ++++++----- .../yaml/converter/FromCanonical.java | 807 +++++++++------- .../yaml/converter/ToCanonical.java | 643 +++++++------ 9 files changed, 1899 insertions(+), 1466 deletions(-) diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyTemplate.java index 0fb7f7f998..91d6aae42a 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyTemplate.java @@ -19,11 +19,11 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; + import org.eclipse.winery.model.tosca.extensions.OTParticipant; import org.eclipse.winery.model.tosca.extensions.kvproperties.ParameterDefinition; import org.eclipse.winery.model.tosca.visitor.Visitor; -import javax.xml.bind.annotation.*; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -31,21 +31,28 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +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.XmlElements; +import javax.xml.bind.annotation.XmlType; + @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tTopologyTemplate", propOrder = { - "nodeTemplateOrRelationshipTemplate", - "groups", - "policies", - "inputs", - "outputs", - "participants", - "workflows" + "nodeTemplateOrRelationshipTemplate", + "groups", + "policies", + "inputs", + "outputs", + "participants", + "workflows" }) @JsonInclude(JsonInclude.Include.NON_NULL) public class TTopologyTemplate extends TExtensibleElements { - @XmlElements({ - @XmlElement(name = "RelationshipTemplate", type = TRelationshipTemplate.class), - @XmlElement(name = "NodeTemplate", type = TNodeTemplate.class) + @XmlElements( { + @XmlElement(name = "RelationshipTemplate", type = TRelationshipTemplate.class), + @XmlElement(name = "NodeTemplate", type = TNodeTemplate.class) }) protected List nodeTemplateOrRelationshipTemplate; @@ -60,7 +67,7 @@ public class TTopologyTemplate extends TExtensibleElements { protected List outputs; // added to support conversion from/to YAML workflows @JsonProperty("workflows") - private List workflows; + protected List workflows; @XmlElementWrapper(name = "Participants") @XmlElement(name = "Participant") @@ -88,11 +95,11 @@ public boolean equals(Object o) { if (!super.equals(o)) return false; TTopologyTemplate that = (TTopologyTemplate) o; return Objects.equals(nodeTemplateOrRelationshipTemplate, that.nodeTemplateOrRelationshipTemplate) && - Objects.equals(policies, that.policies) && - Objects.equals(inputs, that.inputs) && - Objects.equals(outputs, that.outputs) && - Objects.equals(workflows, that.workflows) && - Objects.equals(participants, that.participants); + Objects.equals(policies, that.policies) && + Objects.equals(inputs, that.inputs) && + Objects.equals(outputs, that.outputs) && + Objects.equals(workflows, that.workflows) && + Objects.equals(participants, that.participants); } @Override @@ -114,9 +121,9 @@ public List getNodeTemplateOrRelationshipTemplate() { public TEntityTemplate getNodeTemplateOrRelationshipTemplate(String id) { Objects.requireNonNull(id); return this.getNodeTemplateOrRelationshipTemplate().stream() - .filter(x -> id.equals(x.getId())) - .findAny() - .orElse(null); + .filter(x -> id.equals(x.getId())) + .findAny() + .orElse(null); } /** @@ -125,17 +132,17 @@ public TEntityTemplate getNodeTemplateOrRelationshipTemplate(String id) { @NonNull public List getNodeTemplates() { return this.getNodeTemplateOrRelationshipTemplate() - .stream() - .filter(x -> x instanceof TNodeTemplate) - .map(TNodeTemplate.class::cast) - .collect(Collectors.toList()); + .stream() + .filter(x -> x instanceof TNodeTemplate) + .map(TNodeTemplate.class::cast) + .collect(Collectors.toList()); } public void setNodeTemplates(List nodeTemplates) { this.nodeTemplateOrRelationshipTemplate = Stream.concat( - nodeTemplates.stream().map(TEntityTemplate.class::cast), - this.getRelationshipTemplates().stream().map(TEntityTemplate.class::cast)) - .collect(Collectors.toList()); + nodeTemplates.stream().map(TEntityTemplate.class::cast), + this.getRelationshipTemplates().stream().map(TEntityTemplate.class::cast)) + .collect(Collectors.toList()); } /** @@ -145,9 +152,9 @@ public void setNodeTemplates(List nodeTemplates) { public TNodeTemplate getNodeTemplate(String id) { Objects.requireNonNull(id); return this.getNodeTemplates().stream() - .filter(x -> id.equals(x.getId())) - .findAny() - .orElse(null); + .filter(x -> id.equals(x.getId())) + .findAny() + .orElse(null); } /** @@ -156,17 +163,17 @@ public TNodeTemplate getNodeTemplate(String id) { @NonNull public List getRelationshipTemplates() { return this.getNodeTemplateOrRelationshipTemplate() - .stream() - .filter(x -> x instanceof TRelationshipTemplate) - .map(TRelationshipTemplate.class::cast) - .collect(Collectors.toList()); + .stream() + .filter(x -> x instanceof TRelationshipTemplate) + .map(TRelationshipTemplate.class::cast) + .collect(Collectors.toList()); } public void setRelationshipTemplates(List relationshipTemplates) { this.nodeTemplateOrRelationshipTemplate = Stream.concat( - this.getNodeTemplates().stream().map(TEntityTemplate.class::cast), - relationshipTemplates.stream().map(TEntityTemplate.class::cast)) - .collect(Collectors.toList()); + this.getNodeTemplates().stream().map(TEntityTemplate.class::cast), + relationshipTemplates.stream().map(TEntityTemplate.class::cast)) + .collect(Collectors.toList()); } /** @@ -176,9 +183,9 @@ public void setRelationshipTemplates(List relationshipTem public TRelationshipTemplate getRelationshipTemplate(String id) { Objects.requireNonNull(id); return this.getRelationshipTemplates().stream() - .filter(x -> id.equals(x.getId())) - .findAny() - .orElse(null); + .filter(x -> id.equals(x.getId())) + .findAny() + .orElse(null); } public void addNodeTemplate(TNodeTemplate nt) { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTTopologyTemplateDefinition.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTTopologyTemplateDefinition.java index df8dd128b3..5c01595e1b 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTTopologyTemplateDefinition.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTTopologyTemplateDefinition.java @@ -15,6 +15,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; + import org.eclipse.winery.model.tosca.yaml.visitor.AbstractParameter; import org.eclipse.winery.model.tosca.yaml.visitor.AbstractResult; import org.eclipse.winery.model.tosca.yaml.visitor.IVisitor; @@ -54,14 +55,14 @@ public boolean equals(Object o) { if (!(o instanceof YTTopologyTemplateDefinition)) return false; YTTopologyTemplateDefinition that = (YTTopologyTemplateDefinition) o; return Objects.equals(getDescription(), that.getDescription()) && - Objects.equals(getInputs(), that.getInputs()) && - Objects.equals(getNodeTemplates(), that.getNodeTemplates()) && - Objects.equals(getRelationshipTemplates(), that.getRelationshipTemplates()) && - Objects.equals(getGroups(), that.getGroups()) && - Objects.equals(getPolicies(), that.getPolicies()) && - Objects.equals(getOutputs(), that.getOutputs()) && - Objects.equals(getSubstitutionMappings(), that.getSubstitutionMappings()) && - Objects.equals(getWorkflows(), that.getWorkflows()); + Objects.equals(getInputs(), that.getInputs()) && + Objects.equals(getNodeTemplates(), that.getNodeTemplates()) && + Objects.equals(getRelationshipTemplates(), that.getRelationshipTemplates()) && + Objects.equals(getGroups(), that.getGroups()) && + Objects.equals(getPolicies(), that.getPolicies()) && + Objects.equals(getOutputs(), that.getOutputs()) && + Objects.equals(getSubstitutionMappings(), that.getSubstitutionMappings()) && + Objects.equals(getWorkflows(), that.getWorkflows()); } @Override @@ -72,16 +73,16 @@ public int hashCode() { @Override public String toString() { return "TTopologyTemplateDefinition{" + - "description='" + getDescription() + '\'' + - ", inputs=" + getInputs() + - ", nodeTemplates=" + getNodeTemplates() + - ", relationshipTemplates=" + getRelationshipTemplates() + - ", groups=" + getGroups() + - ", policies=" + getPolicies() + - ", outputs=" + getOutputs() + - ", substitutionMappings=" + getSubstitutionMappings() + - ", workflows=" + getWorkflows() + - '}'; + "description='" + getDescription() + '\'' + + ", inputs=" + getInputs() + + ", nodeTemplates=" + getNodeTemplates() + + ", relationshipTemplates=" + getRelationshipTemplates() + + ", groups=" + getGroups() + + ", policies=" + getPolicies() + + ", outputs=" + getOutputs() + + ", substitutionMappings=" + getSubstitutionMappings() + + ", workflows=" + getWorkflows() + + '}'; } @Nullable diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/AbstractVisitor.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/AbstractVisitor.java index 6ff3ee36a0..abe233e71e 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/AbstractVisitor.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/AbstractVisitor.java @@ -14,7 +14,50 @@ package org.eclipse.winery.model.tosca.yaml.visitor; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.winery.model.tosca.yaml.*; + +import org.eclipse.winery.model.tosca.yaml.YTArtifactDefinition; +import org.eclipse.winery.model.tosca.yaml.YTArtifactType; +import org.eclipse.winery.model.tosca.yaml.YTAttributeAssignment; +import org.eclipse.winery.model.tosca.yaml.YTAttributeDefinition; +import org.eclipse.winery.model.tosca.yaml.YTCallOperationActivityDefinition; +import org.eclipse.winery.model.tosca.yaml.YTCapabilityAssignment; +import org.eclipse.winery.model.tosca.yaml.YTCapabilityDefinition; +import org.eclipse.winery.model.tosca.yaml.YTCapabilityType; +import org.eclipse.winery.model.tosca.yaml.YTConstraintClause; +import org.eclipse.winery.model.tosca.yaml.YTDataType; +import org.eclipse.winery.model.tosca.yaml.YTEntityType; +import org.eclipse.winery.model.tosca.yaml.YTEventFilterDefinition; +import org.eclipse.winery.model.tosca.yaml.YTGroupDefinition; +import org.eclipse.winery.model.tosca.yaml.YTGroupType; +import org.eclipse.winery.model.tosca.yaml.YTImplementation; +import org.eclipse.winery.model.tosca.yaml.YTImportDefinition; +import org.eclipse.winery.model.tosca.yaml.YTInterfaceAssignment; +import org.eclipse.winery.model.tosca.yaml.YTInterfaceDefinition; +import org.eclipse.winery.model.tosca.yaml.YTInterfaceType; +import org.eclipse.winery.model.tosca.yaml.YTNodeFilterDefinition; +import org.eclipse.winery.model.tosca.yaml.YTNodeTemplate; +import org.eclipse.winery.model.tosca.yaml.YTNodeType; +import org.eclipse.winery.model.tosca.yaml.YTOperationDefinition; +import org.eclipse.winery.model.tosca.yaml.YTParameterDefinition; +import org.eclipse.winery.model.tosca.yaml.YTPolicyDefinition; +import org.eclipse.winery.model.tosca.yaml.YTPolicyType; +import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignment; +import org.eclipse.winery.model.tosca.yaml.YTPropertyDefinition; +import org.eclipse.winery.model.tosca.yaml.YTPropertyFilterDefinition; +import org.eclipse.winery.model.tosca.yaml.YTRelationshipAssignment; +import org.eclipse.winery.model.tosca.yaml.YTRelationshipDefinition; +import org.eclipse.winery.model.tosca.yaml.YTRelationshipTemplate; +import org.eclipse.winery.model.tosca.yaml.YTRelationshipType; +import org.eclipse.winery.model.tosca.yaml.YTRepositoryDefinition; +import org.eclipse.winery.model.tosca.yaml.YTRequirementAssignment; +import org.eclipse.winery.model.tosca.yaml.YTRequirementDefinition; +import org.eclipse.winery.model.tosca.yaml.YTSchemaDefinition; +import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate; +import org.eclipse.winery.model.tosca.yaml.YTSubstitutionMappings; +import org.eclipse.winery.model.tosca.yaml.YTTopologyTemplateDefinition; +import org.eclipse.winery.model.tosca.yaml.YTTriggerDefinition; +import org.eclipse.winery.model.tosca.yaml.YTVersion; +import org.eclipse.winery.model.tosca.yaml.YTWorkflow; import org.eclipse.winery.model.tosca.yaml.support.Metadata; import java.util.List; @@ -62,16 +105,16 @@ public R visit(YTEventFilterDefinition node, P parameter) { @Override public R visit(YTCapabilityAssignment node, P parameter) { return reduce(Stream.of( - visitElement(node.getProperties(), parameter, "properties"), - visitElement(node.getAttributes(), parameter, "attributes") + visitElement(node.getProperties(), parameter, "properties"), + visitElement(node.getAttributes(), parameter, "attributes") )); } @Override public R visit(YTCapabilityDefinition node, P parameter) { return reduce(Stream.of( - visitElement(node.getProperties(), parameter, "properties"), - visitElement(node.getAttributes(), parameter, "attributes") + visitElement(node.getProperties(), parameter, "properties"), + visitElement(node.getAttributes(), parameter, "attributes") )); } @@ -93,10 +136,10 @@ public R visit(YTDataType node, P parameter) { @Override public R visit(YTEntityType node, P parameter) { return reduce(Stream.of( - visitElement(node.getVersion(), parameter, "version"), - visitElement(node.getProperties(), parameter, "properties"), - visitElement(node.getAttributes(), parameter, "attributes"), - visitElement(node.getMetadata(), parameter, "metadata") + visitElement(node.getVersion(), parameter, "version"), + visitElement(node.getProperties(), parameter, "properties"), + visitElement(node.getAttributes(), parameter, "attributes"), + visitElement(node.getMetadata(), parameter, "metadata") )); } @@ -108,15 +151,15 @@ public R visit(YTSchemaDefinition node, P parameter) { @Override public R visit(YTGroupDefinition node, P parameter) { return reduce(Stream.of( - visitElement(node.getMetadata(), parameter, "metadata"), - visitElement(node.getProperties(), parameter, "properties") + visitElement(node.getMetadata(), parameter, "metadata"), + visitElement(node.getProperties(), parameter, "properties") )); } @Override public R visit(YTGroupType node, P parameter) { return reduce(Stream.of( - // TODO may be removed + // TODO may be removed )); } @@ -138,16 +181,16 @@ public R visit(YTInterfaceAssignment node, P parameter) { @Override public R visit(YTInterfaceDefinition node, P parameter) { return reduce(Stream.of( - visitElement(node.getInputs(), parameter, "inputs"), - visitElement(node.getOperations(), parameter, "operations") + visitElement(node.getInputs(), parameter, "inputs"), + visitElement(node.getOperations(), parameter, "operations") )); } @Override public R visit(YTInterfaceType node, P parameter) { return reduce(Stream.of( - visitElement(node.getInputs(), parameter, "inputs"), - visitElement(node.getOperations(), parameter, "operations") + visitElement(node.getInputs(), parameter, "inputs"), + visitElement(node.getOperations(), parameter, "operations") )); } @@ -159,55 +202,55 @@ public R visit(YTNodeFilterDefinition node, P parameter) { @Override public R visit(YTNodeTemplate node, P parameter) { return reduce(Stream.of( - visitElement(node.getMetadata(), parameter, "metadata"), - visitElement(node.getProperties(), parameter, "properties"), - visitElement(node.getAttributes(), parameter, "attributes"), - visitMapElement(node.getRequirements(), parameter, "requirements"), - visitElement(node.getCapabilities(), parameter, "capabilities"), - visitElement(node.getArtifacts(), parameter, "artifacts"), - visitElement(node.getInterfaces(), parameter, "interfaces"), - visitElement(node.getNodeFilter(), parameter, "node_filter") + visitElement(node.getMetadata(), parameter, "metadata"), + visitElement(node.getProperties(), parameter, "properties"), + visitElement(node.getAttributes(), parameter, "attributes"), + visitMapElement(node.getRequirements(), parameter, "requirements"), + visitElement(node.getCapabilities(), parameter, "capabilities"), + visitElement(node.getArtifacts(), parameter, "artifacts"), + visitElement(node.getInterfaces(), parameter, "interfaces"), + visitElement(node.getNodeFilter(), parameter, "node_filter") )); } @Override public R visit(YTNodeType node, P parameter) { return reduce(Stream.of( - visitMapElement(node.getRequirements(), parameter, "requirements"), - visitElement(node.getInterfaces(), parameter, "interfaces"), - visitElement(node.getArtifacts(), parameter, "artifacts") + visitMapElement(node.getRequirements(), parameter, "requirements"), + visitElement(node.getInterfaces(), parameter, "interfaces"), + visitElement(node.getArtifacts(), parameter, "artifacts") )); } @Override public R visit(YTOperationDefinition node, P parameter) { return reduce(Stream.of( - visitElement(node.getInputs(), parameter, "inputs"), - visitElement(node.getImplementation(), parameter, "implementation") + visitElement(node.getInputs(), parameter, "inputs"), + visitElement(node.getImplementation(), parameter, "implementation") )); } @Override public R visit(YTWorkflow node, P parameter) { return reduce(Stream.of( - visitElement(node.getInputs(), parameter, "inputs"), - visitElement(node.getImplementation(), parameter, "implementation") + visitElement(node.getInputs(), parameter, "inputs"), + visitElement(node.getImplementation(), parameter, "implementation") )); } @Override public R visit(YTParameterDefinition node, P parameter) { return reduce(Stream.of( - visitElement(node.getConstraints(), parameter, "constraints"), - visitElement(node.getEntrySchema(), parameter, "entry_schema") + visitElement(node.getConstraints(), parameter, "constraints"), + visitElement(node.getEntrySchema(), parameter, "entry_schema") )); } @Override public R visit(YTPolicyDefinition node, P parameter) { return reduce(Stream.of( - visitElement(node.getMetadata(), parameter, "metadata"), - visitElement(node.getProperties(), parameter, "properties") + visitElement(node.getMetadata(), parameter, "metadata"), + visitElement(node.getProperties(), parameter, "properties") )); } @@ -224,8 +267,8 @@ public R visit(YTPropertyAssignment node, P parameter) { @Override public R visit(YTPropertyDefinition node, P parameter) { return reduce(Stream.of( - visitElement(node.getConstraints(), parameter, "constraints"), - visitElement(node.getEntrySchema(), parameter, "entry_schema") + visitElement(node.getConstraints(), parameter, "constraints"), + visitElement(node.getEntrySchema(), parameter, "entry_schema") )); } @@ -237,8 +280,8 @@ public R visit(YTPropertyFilterDefinition node, P parameter) { @Override public R visit(YTRelationshipAssignment node, P parameter) { return reduce(Stream.of( - visitElement(node.getProperties(), parameter, "properties"), - visitElement(node.getInterfaces(), parameter, "interfaces") + visitElement(node.getProperties(), parameter, "properties"), + visitElement(node.getInterfaces(), parameter, "interfaces") )); } @@ -250,10 +293,10 @@ public R visit(YTRelationshipDefinition node, P parameter) { @Override public R visit(YTRelationshipTemplate node, P parameter) { return reduce(Stream.of( - visitElement(node.getMetadata(), parameter, "metadata"), - visitElement(node.getProperties(), parameter, "properties"), - visitElement(node.getAttributes(), parameter, "attributes"), - visitElement(node.getInterfaces(), parameter, "interfaces") + visitElement(node.getMetadata(), parameter, "metadata"), + visitElement(node.getProperties(), parameter, "properties"), + visitElement(node.getAttributes(), parameter, "attributes"), + visitElement(node.getInterfaces(), parameter, "interfaces") )); } @@ -270,8 +313,8 @@ public R visit(YTRepositoryDefinition node, P parameter) { @Override public R visit(YTRequirementAssignment node, P parameter) { return reduce(Stream.of( - visitElement(node.getRelationship(), parameter, "relationship"), - visitElement(node.getNodeFilter(), parameter, "node_filter") + visitElement(node.getRelationship(), parameter, "relationship"), + visitElement(node.getNodeFilter(), parameter, "node_filter") )); } @@ -283,18 +326,18 @@ public R visit(YTRequirementDefinition node, P parameter) { @Override public R visit(YTServiceTemplate node, P parameter) { return reduce(Stream.of( - node.getMetadata().accept(this, parameter.copy().addContext("metadata")), - visitElement(node.getRepositories(), parameter, "repositories"), - visitMapElement(node.getImports(), parameter, "imports"), - visitElement(node.getArtifactTypes(), parameter, "artifact_types"), - visitElement(node.getDataTypes(), parameter, "data_types"), - visitElement(node.getCapabilityTypes(), parameter, "capability_types"), - visitElement(node.getInterfaceTypes(), parameter, "interface_types"), - visitElement(node.getRelationshipTypes(), parameter, "relationship_types"), - visitElement(node.getNodeTypes(), parameter, "node_types"), - visitElement(node.getGroupTypes(), parameter, "group_types"), - visitElement(node.getPolicyTypes(), parameter, "policy_types"), - visitElement(node.getTopologyTemplate(), parameter, "topology_template") + node.getMetadata().accept(this, parameter.copy().addContext("metadata")), + visitElement(node.getRepositories(), parameter, "repositories"), + visitMapElement(node.getImports(), parameter, "imports"), + visitElement(node.getArtifactTypes(), parameter, "artifact_types"), + visitElement(node.getDataTypes(), parameter, "data_types"), + visitElement(node.getCapabilityTypes(), parameter, "capability_types"), + visitElement(node.getInterfaceTypes(), parameter, "interface_types"), + visitElement(node.getRelationshipTypes(), parameter, "relationship_types"), + visitElement(node.getNodeTypes(), parameter, "node_types"), + visitElement(node.getGroupTypes(), parameter, "group_types"), + visitElement(node.getPolicyTypes(), parameter, "policy_types"), + visitElement(node.getTopologyTemplate(), parameter, "topology_template") )); } @@ -306,13 +349,13 @@ public R visit(YTSubstitutionMappings node, P parameter) { @Override public R visit(YTTopologyTemplateDefinition node, P parameter) { return reduce(Stream.of( - visitElement(node.getInputs(), parameter, "inputs"), - visitElement(node.getNodeTemplates(), parameter, "node_templates"), - visitElement(node.getRelationshipTemplates(), parameter, "relationship_templates"), - visitElement(node.getGroups(), parameter, "groups"), - visitElement(node.getPolicies(), parameter, "policies"), - visitElement(node.getOutputs(), parameter, "outputs"), - visitElement(node.getSubstitutionMappings(), parameter, "substitution_mappings") + visitElement(node.getInputs(), parameter, "inputs"), + visitElement(node.getNodeTemplates(), parameter, "node_templates"), + visitElement(node.getRelationshipTemplates(), parameter, "relationship_templates"), + visitElement(node.getGroups(), parameter, "groups"), + visitElement(node.getPolicies(), parameter, "policies"), + visitElement(node.getOutputs(), parameter, "outputs"), + visitElement(node.getSubstitutionMappings(), parameter, "substitution_mappings") )); } @@ -328,41 +371,41 @@ public R visit(Metadata node, P parameter) { private R visitMapElement(@NonNull List> list, P parameter, String name) { return list.stream() - .filter(Objects::nonNull) - .flatMap(map -> map.entrySet().stream()) - .filter(this::nonNull) - .map(entry -> entry.getValue().accept(this, parameter.copy().addContext(name, entry.getKey()))) - .filter(Objects::nonNull) - .reduce(this::addR).orElse(null); + .filter(Objects::nonNull) + .flatMap(map -> map.entrySet().stream()) + .filter(this::nonNull) + .map(entry -> entry.getValue().accept(this, parameter.copy().addContext(name, entry.getKey()))) + .filter(Objects::nonNull) + .reduce(this::addR).orElse(null); } private R visitElement(Metadata node, P parameter, String name) { return Optional.ofNullable(node) - .map(entry -> entry.accept(this, parameter.copy().addContext(name))) - .orElse(null); + .map(entry -> entry.accept(this, parameter.copy().addContext(name))) + .orElse(null); } private R visitElement(VisitorNode node, P parameter, String name) { return Optional.ofNullable(node) - .map(entry -> entry.accept(this, parameter.copy().addContext(name))) - .orElse(null); + .map(entry -> entry.accept(this, parameter.copy().addContext(name))) + .orElse(null); } private R visitElement(@NonNull List list, P parameter, String name) { return list.stream() - .filter(Objects::nonNull) - .map(entry -> entry.accept(this, parameter.copy().addContext(name))) - .filter(Objects::nonNull) - .reduce(this::addR) - .orElse(null); + .filter(Objects::nonNull) + .map(entry -> entry.accept(this, parameter.copy().addContext(name))) + .filter(Objects::nonNull) + .reduce(this::addR) + .orElse(null); } private R visitElement(@NonNull Map map, P parameter, String name) { return map.entrySet().stream() - .filter(this::nonNull) - .map(entry -> entry.getValue().accept(this, parameter.copy().addContext(name, entry.getKey()))) - .filter(Objects::nonNull) - .reduce(this::addR).orElse(null); + .filter(this::nonNull) + .map(entry -> entry.getValue().accept(this, parameter.copy().addContext(name, entry.getKey()))) + .filter(Objects::nonNull) + .reduce(this::addR).orElse(null); } private Boolean nonNull(Map.Entry entry) { @@ -371,9 +414,9 @@ private Boolean nonNull(Map.Entry entry) { private R reduce(Stream stream) { return stream - .filter(Objects::nonNull) - .reduce(this::addR) - .orElse(null); + .filter(Objects::nonNull) + .reduce(this::addR) + .orElse(null); } private R addR(R r1, R r2) { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/IVisitor.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/IVisitor.java index 42223bdf35..5000ae2417 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/IVisitor.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/visitor/IVisitor.java @@ -13,7 +13,49 @@ *******************************************************************************/ package org.eclipse.winery.model.tosca.yaml.visitor; -import org.eclipse.winery.model.tosca.yaml.*; +import org.eclipse.winery.model.tosca.yaml.YTArtifactDefinition; +import org.eclipse.winery.model.tosca.yaml.YTArtifactType; +import org.eclipse.winery.model.tosca.yaml.YTAttributeAssignment; +import org.eclipse.winery.model.tosca.yaml.YTAttributeDefinition; +import org.eclipse.winery.model.tosca.yaml.YTCallOperationActivityDefinition; +import org.eclipse.winery.model.tosca.yaml.YTCapabilityAssignment; +import org.eclipse.winery.model.tosca.yaml.YTCapabilityDefinition; +import org.eclipse.winery.model.tosca.yaml.YTCapabilityType; +import org.eclipse.winery.model.tosca.yaml.YTConstraintClause; +import org.eclipse.winery.model.tosca.yaml.YTDataType; +import org.eclipse.winery.model.tosca.yaml.YTEntityType; +import org.eclipse.winery.model.tosca.yaml.YTEventFilterDefinition; +import org.eclipse.winery.model.tosca.yaml.YTGroupDefinition; +import org.eclipse.winery.model.tosca.yaml.YTGroupType; +import org.eclipse.winery.model.tosca.yaml.YTImplementation; +import org.eclipse.winery.model.tosca.yaml.YTImportDefinition; +import org.eclipse.winery.model.tosca.yaml.YTInterfaceAssignment; +import org.eclipse.winery.model.tosca.yaml.YTInterfaceDefinition; +import org.eclipse.winery.model.tosca.yaml.YTInterfaceType; +import org.eclipse.winery.model.tosca.yaml.YTNodeFilterDefinition; +import org.eclipse.winery.model.tosca.yaml.YTNodeTemplate; +import org.eclipse.winery.model.tosca.yaml.YTNodeType; +import org.eclipse.winery.model.tosca.yaml.YTOperationDefinition; +import org.eclipse.winery.model.tosca.yaml.YTParameterDefinition; +import org.eclipse.winery.model.tosca.yaml.YTPolicyDefinition; +import org.eclipse.winery.model.tosca.yaml.YTPolicyType; +import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignment; +import org.eclipse.winery.model.tosca.yaml.YTPropertyDefinition; +import org.eclipse.winery.model.tosca.yaml.YTPropertyFilterDefinition; +import org.eclipse.winery.model.tosca.yaml.YTRelationshipAssignment; +import org.eclipse.winery.model.tosca.yaml.YTRelationshipDefinition; +import org.eclipse.winery.model.tosca.yaml.YTRelationshipTemplate; +import org.eclipse.winery.model.tosca.yaml.YTRelationshipType; +import org.eclipse.winery.model.tosca.yaml.YTRepositoryDefinition; +import org.eclipse.winery.model.tosca.yaml.YTRequirementAssignment; +import org.eclipse.winery.model.tosca.yaml.YTRequirementDefinition; +import org.eclipse.winery.model.tosca.yaml.YTSchemaDefinition; +import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate; +import org.eclipse.winery.model.tosca.yaml.YTSubstitutionMappings; +import org.eclipse.winery.model.tosca.yaml.YTTopologyTemplateDefinition; +import org.eclipse.winery.model.tosca.yaml.YTTriggerDefinition; +import org.eclipse.winery.model.tosca.yaml.YTVersion; +import org.eclipse.winery.model.tosca.yaml.YTWorkflow; import org.eclipse.winery.model.tosca.yaml.support.Metadata; public interface IVisitor { 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 f6771b9437..33ea422ce5 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 @@ -16,6 +16,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; + import org.eclipse.winery.common.configuration.Environments; import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.model.adaptation.enhance.EnhancementUtils; @@ -46,19 +47,34 @@ import org.eclipse.winery.repository.splitting.Splitting; import org.eclipse.winery.repository.targetallocation.Allocation; import org.eclipse.winery.repository.targetallocation.util.AllocationRequest; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import javax.xml.namespace.QName; + import java.io.IOException; import java.net.URI; import java.security.InvalidParameterException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; public class TopologyTemplateResource { @@ -86,11 +102,11 @@ public TopologyTemplateResource(AbstractComponentInstanceResourceContainingATopo @Produces(MediaType.TEXT_HTML) // @formatter:off public Response getHTML( - @QueryParam(value = "edit") String edit, - @QueryParam(value = "script") @ApiParam(value = "the script to include in a