From d3030dd5c70b56039a4362b7ffc34b31f5d922c7 Mon Sep 17 00:00:00 2001 From: Lukas Harzenetter Date: Fri, 6 Aug 2021 14:39:22 +0200 Subject: [PATCH] Feature/model (#607) --- .github/workflows/build.yml | 2 +- .../org/eclipse/winery/common/ListUtils.java | 24 ++ .../checking/ToscaComplianceRuleMatcher.java | 7 +- .../compliance/ToscaGraphIsomorphismTest.java | 9 +- ...okbookConfigurationToscaConverterTest.java | 19 +- .../winery/edmm/model/EdmmConverter.java | 35 +- .../edmm/toscalight/ToscaLightChecker.java | 8 +- .../winery/edmm/EdmmDependantTest.java | 131 ++++--- .../winery/edmm/model/EdmmConverterTest.java | 6 +- .../src/app/canvas/canvas.component.ts | 144 ++++--- .../group-view/policies/policies.component.ts | 2 +- .../src/app/models/InheritanceUtils.ts | 50 +-- .../src/app/models/topologyTemplateUtil.ts | 36 +- .../src/app/models/ttopology-template.ts | 48 ++- .../capabilities/capabilities.component.ts | 7 +- .../src/app/node/node.component.html | 55 +-- .../src/app/node/node.component.ts | 22 +- .../requirements/requirements.component.ts | 3 +- .../toscatype-table.component.ts | 6 +- .../typeaware-input.component.ts | 11 +- .../src/app/redux/actions/winery.actions.ts | 10 +- .../src/app/redux/reducers/winery.reducer.ts | 97 ++--- .../src/app/services/backend.service.ts | 6 +- .../src/app/winery.component.ts | 3 +- .../src/app/instance/instance.service.ts | 2 +- .../capOrReqDef.component.ts | 20 +- .../capOrReqDefResourceApiData.ts | 6 +- .../appliesTo/appliesTo.component.html | 6 +- .../behavior-pattern-mappings.component.ts | 7 +- .../propertyMappings.component.html | 6 +- .../propertyMappings.component.ts | 18 +- .../propertyMappings.service.ts | 10 +- .../serviceTemplates/plans/plans.component.ts | 5 +- .../artifacts/artifacts.component.ts | 4 +- .../interfaces/interfaces.component.html | 2 +- .../interfaces/interfaces.component.ts | 70 ++-- .../interfaces/interfacesApiData.ts | 12 +- .../wineryTargetInterface.component.ts | 18 +- .../wineryArtifacts/artifact.component.ts | 102 +++-- .../src/app/model/parameters.ts | 8 - .../src/app/model/wineryComponent.ts | 15 +- .../addComponentData.component.html | 4 +- .../wineryRepository.showOnFeature.direct.ts | 7 +- .../policySelection.component.ts | 8 +- .../targetAllocation.service.ts | 7 +- .../winery/generators/ia/Generator.java | 8 +- .../winery/generators/ia/GeneratorTest.java | 109 +++--- .../adaptation/enhance/EnhancementUtils.java | 78 ++-- .../adaptation/placement/PlacementUtils.java | 26 +- .../adaptation/substitution/Substitution.java | 42 +- .../substitution/SubstitutionUtils.java | 2 +- .../BehaviorPatternDetection.java | 20 +- .../ComponentPatternDetection.java | 11 +- .../TopologyFragmentRefinement.java | 37 +- ...ementUtilsTestWithGitBackedRepository.java | 22 +- .../BehaviorPatternDetectionTest.java | 31 +- .../ComponentPatternDetectionTest.java | 140 +++---- .../refinement/AbstractRefinementTest.java | 243 ++++++------ .../patterns/PatternRefinementTest.java | 6 +- .../model/threatmodeling/ThreatModeling.java | 2 +- .../threatmodeling/ThreatModelingUtils.java | 13 +- ...atModelingTestWithGitBackedRepository.java | 10 +- ...lingUtilsWithGitBackendRepositoryTest.java | 5 +- .../model/ids/StringEncodedAndDecoded.java | 2 +- .../winery/model/jsonsupport/YesNo.java | 18 +- .../winery/model/tosca/HasIdAndTags.java | 101 +++++ .../winery/model/tosca/HasPolicies.java | 6 +- .../eclipse/winery/model/tosca/HasTags.java | 4 +- .../winery/model/tosca/TAppliesTo.java | 137 ------- .../model/tosca/TArtifactReference.java | 46 ++- .../winery/model/tosca/TArtifactTemplate.java | 86 +---- .../winery/model/tosca/TArtifacts.java | 73 ---- .../model/tosca/TBoundaryDefinitions.java | 197 +++------- .../model/tosca/TCapabilityDefinition.java | 80 ++-- .../winery/model/tosca/TCapabilityRef.java | 5 + .../winery/model/tosca/TCondition.java | 7 +- .../winery/model/tosca/TConstraint.java | 5 + .../winery/model/tosca/TDefinitions.java | 124 ++---- .../model/tosca/TDeploymentArtifact.java | 73 +--- .../model/tosca/TDeploymentArtifacts.java | 131 ------- .../TDeploymentOrImplementationArtifact.java | 118 ++++++ .../winery/model/tosca/TDocumentation.java | 52 ++- .../winery/model/tosca/TEntityTemplate.java | 93 +---- .../winery/model/tosca/TEntityType.java | 136 +++---- .../tosca/TEntityTypeImplementation.java | 157 ++------ .../model/tosca/TExportedInterface.java | 2 +- .../tosca/TExtensibleElementWithTags.java | 104 +++++ .../model/tosca/TExtensibleElements.java | 26 +- .../winery/model/tosca/TExtension.java | 5 +- .../winery/model/tosca/TExtensions.java | 69 ---- .../winery/model/tosca/TGroupType.java | 6 +- .../winery/model/tosca/TImplementation.java | 2 +- .../model/tosca/TImplementationArtifact.java | 54 +-- .../model/tosca/TImplementationArtifacts.java | 163 -------- .../eclipse/winery/model/tosca/TImport.java | 1 + .../winery/model/tosca/TInstanceState.java | 76 ++++ .../winery/model/tosca/TInterface.java | 33 +- .../winery/model/tosca/TInterfaceType.java | 7 +- .../winery/model/tosca/TInterfaces.java | 60 --- .../winery/model/tosca/TNodeTemplate.java | 255 ++++--------- .../eclipse/winery/model/tosca/TNodeType.java | 220 ++++------- .../model/tosca/TNodeTypeImplementation.java | 115 +----- .../winery/model/tosca/TOperation.java | 141 ++----- .../org/eclipse/winery/model/tosca/TPlan.java | 145 ++----- .../eclipse/winery/model/tosca/TPlans.java | 125 ------ .../eclipse/winery/model/tosca/TPolicies.java | 66 ---- .../winery/model/tosca/TPolicyTemplate.java | 4 +- .../winery/model/tosca/TPolicyType.java | 79 +++- .../model/tosca/TPropertyConstraint.java | 5 + .../model/tosca/TPropertyDefinition.java | 28 +- .../winery/model/tosca/TPropertyMapping.java | 9 +- .../model/tosca/TRelationshipTemplate.java | 46 ++- .../winery/model/tosca/TRelationshipType.java | 151 +++----- .../tosca/TRequiredContainerFeature.java | 4 + .../tosca/TRequiredContainerFeatures.java | 99 ----- .../model/tosca/TRequirementDefinition.java | 80 ++-- .../winery/model/tosca/TRequirementRef.java | 5 + .../winery/model/tosca/TRequirementType.java | 4 +- .../winery/model/tosca/TServiceTemplate.java | 71 +--- .../org/eclipse/winery/model/tosca/TTag.java | 11 +- .../org/eclipse/winery/model/tosca/TTags.java | 153 -------- .../tosca/TTopologyElementInstanceStates.java | 149 -------- .../winery/model/tosca/TTopologyTemplate.java | 20 +- .../tosca/extensions/OTComplianceRule.java | 38 +- .../model/tosca/utils/ModelUtilities.java | 361 +++++++++--------- .../model/tosca/utils/RemoveEmptyLists.java | 39 +- .../winery/model/tosca/visitor/Visitor.java | 112 +++--- .../winery/model/tosca/xml/XDefinitions.java | 4 +- .../winery/model/tosca/xml/XHasId.java | 4 +- .../winery/model/tosca/xml/XHasIdAndTags.java | 101 +++++ .../model/tosca/xml/XHasInheritance.java | 12 +- .../winery/model/tosca/xml/XHasPolicies.java | 6 +- .../winery/model/tosca/xml/XHasTags.java | 4 +- .../winery/model/tosca/xml/XTAppliesTo.java | 137 ------- .../model/tosca/xml/XTArtifactReference.java | 63 +-- .../model/tosca/xml/XTArtifactTemplate.java | 84 +--- .../model/tosca/xml/XTArtifactType.java | 2 + .../winery/model/tosca/xml/XTArtifacts.java | 72 ---- .../tosca/xml/XTBoundaryDefinitions.java | 196 +++------- .../tosca/xml/XTCapabilityDefinition.java | 78 ++-- .../winery/model/tosca/xml/XTConstraint.java | 6 +- .../winery/model/tosca/xml/XTDefinitions.java | 160 +++----- .../tosca/xml/XTDeploymentArtifacts.java | 116 ------ .../model/tosca/xml/XTEntityTemplate.java | 91 +---- .../winery/model/tosca/xml/XTEntityType.java | 76 +--- .../tosca/xml/XTEntityTypeImplementation.java | 151 ++------ .../model/tosca/xml/XTExportedInterface.java | 28 +- .../xml/XTExtensibleElementWithTags.java | 104 +++++ .../model/tosca/xml/XTExtensibleElements.java | 9 +- .../winery/model/tosca/xml/XTExtensions.java | 69 ---- .../tosca/xml/XTImplementationArtifact.java | 26 +- .../tosca/xml/XTImplementationArtifacts.java | 163 -------- .../model/tosca/xml/XTInstanceState.java | 76 ++++ .../winery/model/tosca/xml/XTInterface.java | 47 +-- .../winery/model/tosca/xml/XTInterfaces.java | 60 --- .../model/tosca/xml/XTNodeTemplate.java | 203 +++------- .../winery/model/tosca/xml/XTNodeType.java | 211 ++-------- .../tosca/xml/XTNodeTypeImplementation.java | 136 ++----- .../winery/model/tosca/xml/XTOperation.java | 137 ++----- .../winery/model/tosca/xml/XTPlan.java | 142 ++----- .../winery/model/tosca/xml/XTPlans.java | 121 ------ .../winery/model/tosca/xml/XTPolicies.java | 65 ---- .../winery/model/tosca/xml/XTPolicyType.java | 74 +++- .../model/tosca/xml/XTPropertyMapping.java | 21 +- .../tosca/xml/XTRelationshipTemplate.java | 35 +- .../model/tosca/xml/XTRelationshipType.java | 127 +++--- .../xml/XTRequiredContainerFeatures.java | 100 ----- .../tosca/xml/XTRequirementDefinition.java | 80 ++-- .../model/tosca/xml/XTServiceTemplate.java | 76 +--- .../eclipse/winery/model/tosca/xml/XTTag.java | 7 +- .../winery/model/tosca/xml/XTTags.java | 153 -------- .../xml/XTTopologyElementInstanceStates.java | 153 -------- .../xml/extensions/XOTComplianceRule.java | 39 +- .../tosca/xml/extensions/XOTPrmMapping.java | 9 +- .../tosca/xml/utils/RemoveEmptyLists.java | 31 +- .../model/tosca/xml/visitor/Visitor.java | 109 +++--- .../tosca/xml/utils/RemoveEmptyListsTest.java | 20 +- .../tosca/yaml/YTCapabilityDefinition.java | 1 + .../winery/model/tosca/yaml/YTNodeType.java | 1 + .../winery/model/tosca/yaml/YTPolicyType.java | 2 +- .../model/tosca/yaml/YTRelationshipType.java | 1 + .../tosca/yaml/YTRequirementAssignment.java | 2 +- .../tosca/yaml/YTRequirementDefinition.java | 2 +- .../client/TestWineryRepositoryClient.java | 13 +- .../winery/repository/rest/RestUtils.java | 32 +- .../AbstractComponentInstanceResource.java | 45 +-- .../apiData/InterfacesSelectApiData.java | 1 + .../PropertyMappingsApi.java | 11 +- .../DeploymentArtifactsResource.java | 9 +- .../artifacts/GenericArtifactsResource.java | 75 ++-- .../ImplementationArtifactResource.java | 33 +- .../ImplementationArtifactsResource.java | 14 +- .../ComplianceRuleResource.java | 4 +- .../dataflowmodels/DataFlowResource.java | 87 +++-- .../documentation/DocumentationResource.java | 18 +- .../rest/resources/edmm/EdmmResource.java | 8 +- .../TEntityTemplateResource.java | 6 +- .../ArtifactTemplateResource.java | 8 +- .../PolicyTemplateResource.java | 9 +- .../EntityTypeImplementationResource.java | 5 - .../NodeTypeImplementationResource.java | 25 +- ...elationshipTypeImplementationResource.java | 12 +- .../entitytypes/InstanceStatesResource.java | 58 +-- .../nodetypes/NodeTypeResource.java | 57 ++- .../CapabilityDefinitionResource.java | 44 +-- .../RequirementDefinitionResource.java | 17 +- ...rementOrCapabilityDefinitionsResource.java | 33 +- .../policytypes/AppliesToResource.java | 37 +- .../RelationshipTypeResource.java | 32 +- .../interfaces/InterfacesResource.java | 15 +- .../ServiceTemplateResource.java | 209 +++++----- .../ServiceTemplatesResource.java | 46 ++- .../BoundaryDefinitionsJSPData.java | 21 +- .../BoundaryDefinitionsResource.java | 54 ++- .../PropertyConstraintsResource.java | 49 +-- .../PropertyMappingsResource.java | 22 +- .../interfaces/InterfacesResource.java | 28 +- .../servicetemplates/plans/PlanResource.java | 20 +- .../NodeTemplateResource.java | 16 +- .../RefinementTopologyTemplateResource.java | 54 +-- .../TopologyTemplateResource.java | 2 +- .../rest/resources/AbstractResourceTest.java | 2 +- .../ArtifactTemplateResourceTest.java | 3 +- .../NodeTypeImplementationResourceTest.java | 5 +- .../nodetypes/NodeTypeResourceTest.java | 33 +- .../ServiceTemplateResourceTest.java | 9 +- .../policies/PoliciesResourceTest.java | 3 +- .../plans/PlansResourceTest.java | 13 +- .../NodeTemplateResourceTest.java | 43 ++- .../TopologyTemplateResourceTest.java | 24 +- .../baobab_with_ia.json | 75 ++++ .../artifacttemplates/MyTinyTest.json | 16 +- ...nsUpdatedFileReferenceInJson-withFile.json | 16 +- .../interfaces/add_input_params.json | 38 +- .../interfaces/add_input_params_result.json | 38 +- .../create_configure_interface.json | 2 +- .../create_configure_interface_result.json | 2 +- .../nodetypes/baobab_capabilites.json | 42 +- ...ons_add_capabilitydefinition_contents.json | 18 +- .../baobab_capability_definitions_get.json | 12 +- ...aobab_create_interface_and_operations.json | 60 ++- .../nodetypes/baobab_initial_interface.json | 60 ++- ...ns_add_requirementdefinition_contents.json | 18 +- .../baobab_requirement_definitions_get.json | 12 +- .../servicetemplates/DriverInjection.json | 86 ++--- .../initial_property_mappings_get.json | 16 +- .../plans/baobab_add_initial_plan.json | 8 +- .../plans/baobab_update_plan.json | 42 +- .../plans/baobab_updated_plans.json | 42 +- .../plans/boabab_initial_plans.json | 10 +- .../servicetemplates/straw-stall.json | 84 ++-- ...-xml-test--topology-with-empty-policy.json | 2 +- .../createPrmMappingsFromTopologymodeler.json | 76 +--- ...tInjectionOptions-DriverInjectionTest.json | 164 ++++---- ...eTemplateResource-getInjectionOptions.json | 188 +++++---- ...deTemplates-input-DriverInjectionTest.json | 76 ++-- ...teResource-injectNodeTemplates-input2.json | 112 +++--- .../apache-spark-on-vsphere-input.json | 98 ++--- .../apache-spark-on-vsphere-result.json | 30 +- ...opologytemplate_v2-with-empty-objects.json | 6 +- .../servicetemplates/newVersion.json | 208 +++++----- ...xampleWithAllPropertyVariants_w1-wip1.json | 280 +++++--------- .../TestWithGitBackedRepository.java | 12 +- .../backend/AbstractNamespaceManager.java | 2 +- .../repository/backend/BackendUtils.java | 213 +++++------ .../repository/backend/IRepository.java | 123 +++--- .../backend/YamlArtifactsSynchronizer.java | 4 +- .../backend/filebased/GitBasedRepository.java | 32 +- .../selfcontainmentpackager/DockerPlugin.java | 3 +- .../SelfContainmentPackager.java | 40 +- .../UbuntuVMPlugin.java | 24 +- .../support/TopologyTemplateUtils.java | 106 ----- .../repository/converter/support/Utils.java | 21 +- .../converter/writer/WriterUtils.java | 22 +- .../DASpecification.java | 46 +-- .../DriverInjection.java | 33 +- .../repository/export/CsarExporter.java | 56 ++- .../repository/importing/CsarImporter.java | 68 ++-- .../importing/YamlCsarImporter.java | 50 +-- .../splitting/ProviderRepository.java | 77 ++-- .../repository/splitting/Splitting.java | 185 +++++---- .../criteria/CriteriaCached.java | 2 +- .../criteria/CriteriaCommon.java | 2 +- .../fulfillpolicies/FulfillPolicies.java | 15 +- .../MinExternalConnections.java | 2 +- .../criteria/minhosts/MinHosts.java | 2 +- .../util/AllocationUtils.java | 12 +- .../util/TopologyWrapper.java | 2 +- .../winery/repository/xml/XmlRepository.java | 14 +- .../xml/converter/FromCanonical.java | 334 ++++++++-------- .../repository/xml/converter/ToCanonical.java | 353 +++++++++-------- .../yaml/converter/FromCanonical.java | 338 ++++++---------- .../yaml/converter/ToCanonical.java | 136 +++---- .../yaml/export/YamlToscaExportUtil.java | 13 +- .../repository/backend/BackendUtilsTest.java | 86 ++--- .../DASpecificationTest.java | 39 +- .../DriverInjectionTest.java | 4 +- .../MinExternalConnectionsTest.java | 2 +- .../util/AllocationUtilsTest.java | 2 +- .../util/TopologyMappingsWrapperTest.java | 3 +- .../xml/XmlRepositoryIntegrationTests.java | 12 +- .../DeployableComponentsToscaConverter.java | 36 +- .../matching/ToscaPrmPropertyMatcher.java | 6 +- .../PatternDetectionUtils.java | 2 +- .../matching/ToscaPrmPropertyMatcherTest.java | 41 +- .../ToscaComponentPatternMatcherTest.java | 24 +- .../ToscaPatternMatcherTest.java | 33 +- 307 files changed, 6150 insertions(+), 10463 deletions(-) create mode 100644 org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/ListUtils.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasIdAndTags.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TAppliesTo.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifacts.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifacts.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentOrImplementationArtifact.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElementWithTags.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensions.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementationArtifacts.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInstanceState.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterfaces.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPlans.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicies.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequiredContainerFeatures.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTags.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyElementInstanceStates.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasIdAndTags.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTAppliesTo.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifacts.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTDeploymentArtifacts.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElementWithTags.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensions.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifacts.java create mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInstanceState.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInterfaces.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPlans.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPolicies.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRequiredContainerFeatures.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTags.java delete mode 100644 org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTopologyElementInstanceStates.java create mode 100644 org.eclipse.winery.repository.rest/src/test/resources/entityimplementations/nodetypeimplementations/baobab_with_ia.json delete mode 100644 org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/support/TopologyTemplateUtils.java diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e0316d82dc..110fe50e6c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,7 +3,7 @@ name: Winery CI on: [ push, pull_request ] jobs: - + pre_job: continue-on-error: true runs-on: ubuntu-latest diff --git a/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/ListUtils.java b/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/ListUtils.java new file mode 100644 index 0000000000..c127c35d1f --- /dev/null +++ b/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/ListUtils.java @@ -0,0 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2021 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ + +package org.eclipse.winery.common; + +import java.util.List; + +public abstract class ListUtils { + + public static boolean listIsNotNullOrEmpty(List list) { + return list != null && !list.isEmpty(); + } +} diff --git a/org.eclipse.winery.compliance/src/main/java/org/eclipse/winery/compliance/checking/ToscaComplianceRuleMatcher.java b/org.eclipse.winery.compliance/src/main/java/org/eclipse/winery/compliance/checking/ToscaComplianceRuleMatcher.java index 916cd5a41a..12b3f4f2e0 100644 --- a/org.eclipse.winery.compliance/src/main/java/org/eclipse/winery/compliance/checking/ToscaComplianceRuleMatcher.java +++ b/org.eclipse.winery.compliance/src/main/java/org/eclipse/winery/compliance/checking/ToscaComplianceRuleMatcher.java @@ -49,7 +49,10 @@ public boolean isCompatible(ToscaNode left, ToscaNode right) { public boolean isPoliciesCompatible(ToscaNode left, ToscaNode right) { if (left.getTemplate().getPolicies() != null) { if (right.getTemplate().getPolicies() != null) { - return mapToStringList(right.getTemplate().getPolicies().getPolicy()).containsAll(mapToStringList(left.getTemplate().getPolicies().getPolicy())); + return mapToStringList(right.getTemplate().getPolicies()) + .containsAll( + mapToStringList(left.getTemplate().getPolicies()) + ); } else { return false; } @@ -58,7 +61,7 @@ public boolean isPoliciesCompatible(ToscaNode left, ToscaNode right) { } private List mapToStringList(@NonNull List policy) { - return policy.stream().map(p -> p.getPolicyType().toString() + p.getPolicyRef().toString()).collect(Collectors.toList()); + return policy.stream().map(p -> p.getPolicyType() + p.getPolicyRef().toString()).collect(Collectors.toList()); } public boolean isPropertiesCompatible(ToscaNode left, ToscaNode right) { diff --git a/org.eclipse.winery.compliance/src/test/java/org/eclipse/winery/compliance/ToscaGraphIsomorphismTest.java b/org.eclipse.winery.compliance/src/test/java/org/eclipse/winery/compliance/ToscaGraphIsomorphismTest.java index b496e2ad38..3527f27931 100644 --- a/org.eclipse.winery.compliance/src/test/java/org/eclipse/winery/compliance/ToscaGraphIsomorphismTest.java +++ b/org.eclipse.winery.compliance/src/test/java/org/eclipse/winery/compliance/ToscaGraphIsomorphismTest.java @@ -29,10 +29,10 @@ import org.eclipse.winery.compliance.checking.ServiceTemplateCheckingResult; import org.eclipse.winery.compliance.checking.ServiceTemplateComplianceRuleRuleChecker; import org.eclipse.winery.compliance.checking.ToscaComplianceRuleMatcher; -import org.eclipse.winery.model.ids.extensions.ComplianceRuleId; import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; import org.eclipse.winery.model.ids.definitions.NodeTypeId; import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; +import org.eclipse.winery.model.ids.extensions.ComplianceRuleId; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeType; @@ -75,9 +75,10 @@ private void persist(HashMap allEntitie @Test public void testTComplianceRulePersistence() throws Exception { - OTComplianceRule rule = new OTComplianceRule(new OTComplianceRule.Builder()); - rule.setName("test"); - rule.setTargetNamespace(TEST_TARGET_NAMESPACE); + OTComplianceRule rule = new OTComplianceRule.Builder("test") + .setName("test") + .setTargetNamespace(TEST_TARGET_NAMESPACE) + .build(); ComplianceRuleId id = new ComplianceRuleId(new QName(TEST_TARGET_NAMESPACE, "test")); BackendUtils.persist(repository, id, rule); diff --git a/org.eclipse.winery.crawler/src/test/java/org/eclipse/winery/crawler/chefcookbooks/chefcookbook/CookbookConfigurationToscaConverterTest.java b/org.eclipse.winery.crawler/src/test/java/org/eclipse/winery/crawler/chefcookbooks/chefcookbook/CookbookConfigurationToscaConverterTest.java index 46594681fb..46ce39f7c5 100644 --- a/org.eclipse.winery.crawler/src/test/java/org/eclipse/winery/crawler/chefcookbooks/chefcookbook/CookbookConfigurationToscaConverterTest.java +++ b/org.eclipse.winery.crawler/src/test/java/org/eclipse/winery/crawler/chefcookbooks/chefcookbook/CookbookConfigurationToscaConverterTest.java @@ -16,6 +16,8 @@ import java.util.List; +import javax.xml.namespace.QName; + import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.model.tosca.TNodeType; @@ -39,11 +41,16 @@ public void createMyAppNode() { nodeTypes = new CookbookConfigurationToscaConverter().convertCookbookConfigurationToToscaNode(cookbookConfiguration, 1); assertEquals(2, nodeTypes.size()); - assertEquals(true, nodeTypes.get(0).getCapabilityDefinitions().getCapabilityDefinition().get(0).getCapabilityType().toString().endsWith("myapp-1.1")); - assertEquals(true, nodeTypes.get(0).getCapabilityDefinitions().getCapabilityDefinition().get(1).getCapabilityType().toString().endsWith("myappaddon-1.2")); - assertEquals(true, nodeTypes.get(0).getRequirementDefinitions().getRequirementDefinition().get(1).getRequirementType().toString().endsWith("openjdk-8-jdk")); - assertEquals(true, nodeTypes.get(0).getRequirementDefinitions().getRequirementDefinition().get(2).getRequirementType().toString().endsWith("openjdk-8-jre-headless")); - - assertEquals(true, nodeTypes.get(1).getCapabilityDefinitions().getCapabilityDefinition().get(0).getCapabilityType().toString().endsWith("ubuntu_16.04" + WineryVersion.WINERY_VERSION_SEPARATOR + WineryVersion.WINERY_VERSION_PREFIX + "1")); + QName capabilityType = nodeTypes.get(0).getCapabilityDefinitions().get(0).getCapabilityType(); + assertNotNull(capabilityType); + assertTrue(capabilityType.toString().endsWith("myapp-1.1")); + + QName capabilityType1 = nodeTypes.get(0).getCapabilityDefinitions().get(1).getCapabilityType(); + assertNotNull(capabilityType1); + assertTrue(capabilityType1.toString().endsWith("myappaddon-1.2")); + assertTrue(nodeTypes.get(0).getRequirementDefinitions().get(1).getRequirementType().toString().endsWith("openjdk-8-jdk")); + assertTrue(nodeTypes.get(0).getRequirementDefinitions().get(2).getRequirementType().toString().endsWith("openjdk-8-jre-headless")); + + assertTrue(nodeTypes.get(1).getCapabilityDefinitions().get(0).getCapabilityType().toString().endsWith("ubuntu_16.04" + WineryVersion.WINERY_VERSION_SEPARATOR + WineryVersion.WINERY_VERSION_PREFIX + "1")); } } diff --git a/org.eclipse.winery.edmm/src/main/java/org/eclipse/winery/edmm/model/EdmmConverter.java b/org.eclipse.winery.edmm/src/main/java/org/eclipse/winery/edmm/model/EdmmConverter.java index 44575cb74b..7cb84587a9 100644 --- a/org.eclipse.winery.edmm/src/main/java/org/eclipse/winery/edmm/model/EdmmConverter.java +++ b/org.eclipse.winery.edmm/src/main/java/org/eclipse/winery/edmm/model/EdmmConverter.java @@ -32,8 +32,8 @@ 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.TImplementationArtifacts; -import org.eclipse.winery.model.tosca.TInterfaces; +import org.eclipse.winery.model.tosca.TImplementationArtifact; +import org.eclipse.winery.model.tosca.TInterface; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; @@ -213,16 +213,16 @@ private void createNode(TNodeTemplate nodeTemplate, EntityGraph entityGraph) { private void createArtifact(TNodeTemplate nodeTemplate, EntityId componentNodeId, EntityGraph entityGraph) { if (nodeTemplate.getDeploymentArtifacts() != null - && nodeTemplate.getDeploymentArtifacts().getDeploymentArtifact().size() > 0) { + && nodeTemplate.getDeploymentArtifacts().size() > 0) { EntityId artifactsEntityId = componentNodeId.extend(DefaultKeys.ARTIFACTS); entityGraph.addEntity(new SequenceEntity(artifactsEntityId, entityGraph)); - for (TDeploymentArtifact artifact : nodeTemplate.getDeploymentArtifacts().getDeploymentArtifact()) { + for (TDeploymentArtifact artifact : nodeTemplate.getDeploymentArtifacts()) { String path = null; TArtifactTemplate artifactTemplate = artifactTemplates.get(artifact.getArtifactRef()); - if (artifactTemplate != null && artifactTemplate.getArtifactReferences().getArtifactReference().size() > 0) { - path = artifactTemplate.getArtifactReferences().getArtifactReference().get(0).getReference(); + if (artifactTemplate != null && artifactTemplate.getArtifactReferences().size() > 0) { + path = artifactTemplate.getArtifactReferences().get(0).getReference(); } EntityId artifactEntityId = artifactsEntityId.extend( @@ -354,9 +354,9 @@ private void createPropertiesDefinition(TEntityType toscaType, EntityId typeEnti private void createOperations(TEntityType type, EntityId nodeTypeEntityId, EntityGraph entityGraph) { if (type instanceof TNodeType && Objects.nonNull(((TNodeType) type).getInterfaces())) { - TInterfaces interfaces = ((TNodeType) type).getInterfaces(); - interfaces.getInterface().forEach(anInterface -> { - anInterface.getOperation().forEach(operation -> { + List interfaces = ((TNodeType) type).getInterfaces(); + interfaces.forEach(anInterface -> { + anInterface.getOperations().forEach(operation -> { EntityId operationsEntityId = nodeTypeEntityId.extend(DefaultKeys.OPERATIONS); entityGraph.addEntity(new MappingEntity(operationsEntityId, entityGraph)); @@ -376,26 +376,27 @@ private void createOperations(TEntityType type, EntityId nodeTypeEntityId, Entit private String getImplementationForOperation(TEntityTypeImplementation implementation, String interfaceName, String operationName) { if (implementation != null && implementation.getImplementationArtifacts() != null) { - List artifacts = implementation.getImplementationArtifacts() - .getImplementationArtifact().stream() + List artifacts = implementation.getImplementationArtifacts() + .stream() + .filter(artifact -> artifact.getInterfaceName() != null) .filter(artifact -> artifact.getInterfaceName().equals(interfaceName)) .collect(Collectors.toList()); if (artifacts.size() == 1 && artifacts.get(0).getArtifactRef() != null) { TArtifactTemplate artifactTemplate = artifactTemplates.get(artifacts.get(0).getArtifactRef()); if (artifactTemplate.getArtifactReferences() != null && - artifactTemplate.getArtifactReferences().getArtifactReference().size() > 0) { - return artifactTemplate.getArtifactReferences().getArtifactReference().get(0).getReference(); + artifactTemplate.getArtifactReferences().size() > 0) { + return artifactTemplate.getArtifactReferences().get(0).getReference(); } } - for (TImplementationArtifacts.ImplementationArtifact artifact : artifacts) { - if (artifact.getOperationName().equals(operationName)) { + for (TImplementationArtifact artifact : artifacts) { + if (artifact.getOperationName() != null && artifact.getOperationName().equals(operationName)) { TArtifactTemplate artifactTemplate = artifactTemplates.get(artifact.getArtifactRef()); if (artifactTemplate != null && artifactTemplate.getArtifactReferences() != null && - artifactTemplate.getArtifactReferences().getArtifactReference().size() > 0) { - return artifactTemplate.getArtifactReferences().getArtifactReference().get(0).getReference(); + artifactTemplate.getArtifactReferences().size() > 0) { + return artifactTemplate.getArtifactReferences().get(0).getReference(); } } } diff --git a/org.eclipse.winery.edmm/src/main/java/org/eclipse/winery/edmm/toscalight/ToscaLightChecker.java b/org.eclipse.winery.edmm/src/main/java/org/eclipse/winery/edmm/toscalight/ToscaLightChecker.java index a16d8f8571..d82cc088f6 100644 --- a/org.eclipse.winery.edmm/src/main/java/org/eclipse/winery/edmm/toscalight/ToscaLightChecker.java +++ b/org.eclipse.winery.edmm/src/main/java/org/eclipse/winery/edmm/toscalight/ToscaLightChecker.java @@ -143,7 +143,7 @@ private void checkNodeType(QName type) { // todo: some inheritance or mapping check? if (nodeType.getInterfaces() != null) { - List interfaceList = nodeType.getInterfaces().getInterface(); + List interfaceList = nodeType.getInterfaces(); if (interfaceList.size() > 0) { interfaceList.stream() .filter(ToscaLightUtils::isNotLifecycleInterface) @@ -164,8 +164,10 @@ private void checkRelationType(QName type) { } // todo ? - relType.getSourceInterfaces(); - relType.getTargetInterfaces(); + if (relType != null) { + relType.getSourceInterfaces(); + relType.getTargetInterfaces(); + } } private boolean isElementVisited(QName qName) { diff --git a/org.eclipse.winery.edmm/src/test/java/org/eclipse/winery/edmm/EdmmDependantTest.java b/org.eclipse.winery.edmm/src/test/java/org/eclipse/winery/edmm/EdmmDependantTest.java index 0225ae39a4..d728282cc7 100644 --- a/org.eclipse.winery.edmm/src/test/java/org/eclipse/winery/edmm/EdmmDependantTest.java +++ b/org.eclipse.winery.edmm/src/test/java/org/eclipse/winery/edmm/EdmmDependantTest.java @@ -28,12 +28,10 @@ import org.eclipse.winery.model.tosca.TArtifactReference; import org.eclipse.winery.model.tosca.TArtifactTemplate; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TEntityType; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; +import org.eclipse.winery.model.tosca.TImplementationArtifact; import org.eclipse.winery.model.tosca.TInterface; -import org.eclipse.winery.model.tosca.TInterfaces; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; @@ -86,8 +84,7 @@ void setup() { TNodeType nodeType3 = new TNodeType(); nodeType3.setName(nodeType3QName.getLocalPart()); nodeType3.setTargetNamespace(nodeType3QName.getNamespaceURI()); - List kvList = new ArrayList<>(); - kvList.addAll(Arrays.asList( + List kvList = new ArrayList<>(Arrays.asList( new PropertyDefinitionKV("os_family", "xsd:string"), new PropertyDefinitionKV("public_key", "xsd:string"), new PropertyDefinitionKV("ssh_port", "number") @@ -108,65 +105,77 @@ void setup() { stop.setName("stop"); TInterface lifecycle = new TInterface(); lifecycle.setName("lifecycle_interface"); - lifecycle.getOperation().add(start); - lifecycle.getOperation().add(stop); - TInterfaces tInterfaces = new TInterfaces(); - tInterfaces.getInterface().add(lifecycle); + lifecycle.getOperations().add(start); + lifecycle.getOperations().add(stop); + List tInterfaces = new ArrayList<>(); + tInterfaces.add(lifecycle); nodeType4.setInterfaces(tInterfaces); nodeTypes.put(nodeType4QName, nodeType4); // endregion // region *** ArtifactTemplates setup *** - TArtifactReference startArtifactReference = new TArtifactReference(); - startArtifactReference.setReference("/artifacttemplates/" + NAMESPACE_DOUBLE_ENCODED + "/startTestNode4/files/script.sh"); - TArtifactTemplate.ArtifactReferences startArtifactReferences = new TArtifactTemplate.ArtifactReferences(); - startArtifactReferences.getArtifactReference().add(startArtifactReference); - TArtifactTemplate startArtifactIA = new TArtifactTemplate(); - QName startArtifactIAQName = QName.valueOf("{" + NAMESPACE + "}" + "Start_IA"); - startArtifactIA.setName(startArtifactIAQName.getLocalPart()); - startArtifactIA.setArtifactReferences(startArtifactReferences); - artifactTemplates.put(startArtifactIAQName, startArtifactIA); + QName startIaQName = QName.valueOf("{" + NAMESPACE + "}" + "Start_IA"); + artifactTemplates.put(startIaQName, + new TArtifactTemplate.Builder( + "Start_IA", + startIaQName + ) + .addArtifactReference( + new TArtifactReference.Builder( + "/artifacttemplates/" + NAMESPACE_DOUBLE_ENCODED + "/startTestNode4/files/script.sh" + ).build() + ) + .build() + ); - TArtifactReference stopArtifactReference = new TArtifactReference(); - stopArtifactReference.setReference("/artifacttemplates/" + NAMESPACE_DOUBLE_ENCODED + "/stopTestNode4/files/script.sh"); - TArtifactTemplate.ArtifactReferences stopArtifactReferences = new TArtifactTemplate.ArtifactReferences(); - stopArtifactReferences.getArtifactReference().add(startArtifactReference); - TArtifactTemplate stopArtifactIA = new TArtifactTemplate(); - QName stopArtifactIAQName = QName.valueOf("{" + NAMESPACE + "}" + "Stop_IA"); - stopArtifactIA.setName(stopArtifactIAQName.getLocalPart()); - stopArtifactIA.setArtifactReferences(stopArtifactReferences); - artifactTemplates.put(stopArtifactIAQName, stopArtifactIA); + QName stopIaQName = QName.valueOf("{" + NAMESPACE + "}" + "Stop_IA"); + TArtifactTemplate stopIa = new TArtifactTemplate.Builder( + "Stop_IA", + stopIaQName + ) + .addArtifactReference( + new TArtifactReference.Builder( + "/artifacttemplates/" + NAMESPACE_DOUBLE_ENCODED + "/startTestNode4/files/script.sh" + ).build() + ) + .build(); + artifactTemplates.put(stopIaQName, stopIa); - TArtifactReference deploymentArtifactArtifactReference = new TArtifactReference(); - deploymentArtifactArtifactReference.setReference("/artifacttemplates/" + NAMESPACE_DOUBLE_ENCODED + "/testNode1-DA/files/da.war"); - TArtifactTemplate deploymentArtifactTemplate = new TArtifactTemplate(); - TArtifactTemplate.ArtifactReferences dploymentArtifactArtifactReferences = new TArtifactTemplate.ArtifactReferences(); - dploymentArtifactArtifactReferences.getArtifactReference().add(startArtifactReference); - deploymentArtifactTemplate.setArtifactReferences(dploymentArtifactArtifactReferences); QName deploymentArtifactIAQName = QName.valueOf("{" + NAMESPACE + "}" + "TestNode1-DA"); - deploymentArtifactTemplate.setName(deploymentArtifactIAQName.getLocalPart()); - deploymentArtifactTemplate.setArtifactReferences(dploymentArtifactArtifactReferences); + TArtifactTemplate deploymentArtifactTemplate = new TArtifactTemplate.Builder( + "TestNode1-DA", + deploymentArtifactIAQName + ) + .addArtifactReference( + new TArtifactReference.Builder( + "/artifacttemplates/" + NAMESPACE_DOUBLE_ENCODED + "/testNode1-DA/files/da.war" + ).build() + ) + .build(); artifactTemplates.put(deploymentArtifactIAQName, deploymentArtifactTemplate); // endregion // region *** NodeTypeImplementations setup *** - TImplementationArtifacts artifacts = new TImplementationArtifacts(); QName nodeTypeImpl4QName = QName.valueOf("{" + NAMESPACE + "}" + "test_node_type_Impl_4"); - TNodeTypeImplementation nodeTypeImpl4 = new TNodeTypeImplementation(); - nodeTypeImpl4.setNodeType(nodeType4QName); - nodeTypeImpl4.setName(nodeTypeImpl4QName.getLocalPart()); - TImplementationArtifacts.ImplementationArtifact startArtifact = new TImplementationArtifacts.ImplementationArtifact(); - startArtifact.setArtifactRef(startArtifactIAQName); - startArtifact.setInterfaceName("lifecycle_interface"); - startArtifact.setOperationName("start"); - TImplementationArtifacts.ImplementationArtifact stopArtifact = new TImplementationArtifacts.ImplementationArtifact(); - stopArtifact.setArtifactRef(deploymentArtifactIAQName); - stopArtifact.setInterfaceName("lifecycle_interface"); - stopArtifact.setOperationName("stop"); - artifacts.getImplementationArtifact().add(startArtifact); - artifacts.getImplementationArtifact().add(stopArtifact); - nodeTypeImpl4.setImplementationArtifacts(artifacts); - nodeTypeImplementations.put(nodeTypeImpl4QName, nodeTypeImpl4); + + TImplementationArtifact startArtifact = new TImplementationArtifact.Builder(QName.valueOf("{ex.org}test")) + .setArtifactRef(startIaQName) + .setInterfaceName("lifecycle_interface") + .setOperationName("start") + .build(); + TImplementationArtifact stopArtifact = new TImplementationArtifact.Builder(QName.valueOf("{ex.org}test")) + .setArtifactRef(stopIaQName) + .setInterfaceName("lifecycle_interface") + .setOperationName("stop") + .build(); + + nodeTypeImplementations.put( + nodeTypeImpl4QName, + new TNodeTypeImplementation.Builder(nodeTypeImpl4QName.getLocalPart(), nodeType4QName) + .addImplementationArtifact(startArtifact) + .addImplementationArtifact(stopArtifact) + .build() + ); // endregion @@ -185,16 +194,16 @@ void setup() { // endregion // region *** create NodeTemplates *** - TNodeTemplate nt1 = new TNodeTemplate(); - nt1.setType(nodeType1QName); - nt1.setId("test_node_1"); - nt1.setName("test_node_1"); - TDeploymentArtifacts deploymentArtifacts = new TDeploymentArtifacts(); - TDeploymentArtifact artifact = new TDeploymentArtifact(); - artifact.setArtifactRef(deploymentArtifactIAQName); - artifact.setArtifactType(QName.valueOf("{" + NAMESPACE + "}" + "WAR")); - deploymentArtifacts.getDeploymentArtifact().add(artifact); - nt1.setDeploymentArtifacts(deploymentArtifacts); + TDeploymentArtifact artifact = new TDeploymentArtifact.Builder( + "test_artifact", QName.valueOf("{" + NAMESPACE + "}" + "WAR") + ) + .setArtifactRef(deploymentArtifactIAQName) + .build(); + + TNodeTemplate nt1 = new TNodeTemplate.Builder("test_node_1", nodeType1QName) + .setName("test_node_1") + .addDeploymentArtifact(artifact) + .build(); nodeTemplates.put(nt1.getId(), nt1); TNodeTemplate nt2 = new TNodeTemplate(); diff --git a/org.eclipse.winery.edmm/src/test/java/org/eclipse/winery/edmm/model/EdmmConverterTest.java b/org.eclipse.winery.edmm/src/test/java/org/eclipse/winery/edmm/model/EdmmConverterTest.java index 48cf89c008..d6b4d74470 100644 --- a/org.eclipse.winery.edmm/src/test/java/org/eclipse/winery/edmm/model/EdmmConverterTest.java +++ b/org.eclipse.winery.edmm/src/test/java/org/eclipse/winery/edmm/model/EdmmConverterTest.java @@ -160,8 +160,8 @@ void transformTopologyWithOperations() { topology.addNodeTemplate(nodeTemplates.get("test_node_4")); // endregion - TServiceTemplate serviceTemplate = new TServiceTemplate(); - serviceTemplate.setTopologyTemplate(topology.build()); + TServiceTemplate serviceTemplate = new TServiceTemplate.Builder("testST", topology.build()) + .build(); EdmmConverter edmmConverter = new EdmmConverter(nodeTypes, relationshipTypes, nodeTypeImplementations, relationshipTypeImplementations, artifactTemplates, edmmTypeExtendsMapping, edmm1to1Mapping, false); @@ -213,7 +213,7 @@ void transformTopology() { " properties:\n" + " name: test_node_1\n" + " artifacts:\n" + - " - war: /artifacttemplates/https%3A%2F%2Fex.org%2Ftosca%2Fto%2Fedmm/startTestNode4/files/script.sh\n" + + " - war: /artifacttemplates/https%3A%2F%2Fex.org%2Ftosca%2Fto%2Fedmm/testNode1-DA/files/da.war\n" + " test_node_3:\n" + " type: https_ex.orgtoscatoedmm__test_node_type_3\n" + " properties:\n" + diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/canvas/canvas.component.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/canvas/canvas.component.ts index 5a181f8f8a..404c6cc88d 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/canvas/canvas.component.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/canvas/canvas.component.ts @@ -65,7 +65,6 @@ import { SubMenuItems } from '../../../../tosca-management/src/app/model/subMenu import { AttributeMappingType } from '../../../../tosca-management/src/app/instance/refinementModels/attributeMappings/attributeMapping'; // tslint:disable-next-line:max-line-length import { DetailsSidebarState } from '../sidebars/node-details/node-details-sidebar'; -import { Policy } from '../../../../tosca-management/src/app/model/wineryComponent'; import { KvProperty } from '../../../../tosca-management/src/app/model/keyValueItem'; import { WineryNamespaceSelectorService } from '../../../../tosca-management/src/app/wineryNamespaceSelector/wineryNamespaceSelector.service'; @@ -128,7 +127,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI newRelationship: TRelationshipTemplate; detectorNodeProperties: KvProperty[]; refinementNodeProperties: KvProperty[]; - behaviorPatterns: Policy[]; + behaviorPatterns: TPolicy[]; patternNamespaces: Set; direction: string; applicableRelationshipType: string; @@ -137,7 +136,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI type: string; detectorProperty: string; refinementProperty: KvProperty; - behaviorPattern: Policy; + behaviorPattern: TPolicy; // variables which hold their corresponding modal data capabilities: CapabilitiesModalData; @@ -238,7 +237,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI this.allNodeTemplates.forEach(node => this.enhanceDragSelection(node.id)); return false; // Prevent bubbling }, undefined, 'Select all Node Templates')); - this.hotkeysService.add(new Hotkey('del', (event: KeyboardEvent): boolean => { + this.hotkeysService.add(new Hotkey('del', (): boolean => { this.handleDeleteKeyEvent(); return false; }, undefined, 'Delete an element.')); @@ -255,9 +254,23 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI }); } + /** + * Getter for Node by ID + * @param nodes + * @param id + */ + private static getNodeByID(nodes: Array, id: string): TNodeTemplate { + if (nodes !== null && nodes.length > 0) { + for (const node of nodes) { + if (node.id === id) { + return node; + } + } + } + } + ngOnChanges(changes: SimpleChanges) { if (changes) { - const buttonClickEvent = changes.sidebarDeleteButtonClickEvent; this.handleDeleteKeyEvent(); } } @@ -545,8 +558,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI properties['behaviorPattern'] = this.behaviorPattern.name; } - const propertyData = { kvproperties: properties, propertyType: PropertyDefinitionType.KV }; - this.newRelationship.properties = propertyData; + this.newRelationship.properties = { kvproperties: properties, propertyType: PropertyDefinitionType.KV }; this.ngRedux.dispatch(this.actions.saveRelationship(this.newRelationship)); } @@ -941,7 +953,6 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI /** * Repositions the new node and repaints the screen - * @param $event The html event. */ positionNewNode(): void { this.updateSelectedNodes(); @@ -978,9 +989,9 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI if (storeRelationshipsLength !== localRelationshipsCopyLength) { const difference = storeRelationshipsLength - localRelationshipsCopyLength; - if (difference === 1) { + if (localRelationshipsCopyLength !== 0 && difference === 1) { this.handleNewRelationship(currentRelationships); - } else if (difference > 0 || difference < 0) { + } else if (localRelationshipsCopyLength === 0 || difference > 0 || difference < 0) { if (this.configuration.isYaml() && difference < 0 && this.allNodeTemplates.length > 0) { // a relationship is deleted. reset the associated source requirement const deletedRels = this.allRelationshipTemplates.filter(rel => currentRelationships.every(curRel => curRel.id !== rel.id)); @@ -988,10 +999,9 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI const reqId = deletedRel.sourceElement.ref; const sourceNodeTemplate = this.allNodeTemplates .find(nt => - nt.requirements && - nt.requirements.requirement - && nt.requirements.requirement.some(req => req.id === reqId)); - const requirementModel: RequirementModel = sourceNodeTemplate.requirements.requirement + nt.requirements + && nt.requirements.some(req => req.id === reqId)); + const requirementModel: RequirementModel = sourceNodeTemplate.requirements .find(req => req.id === reqId); const requirementDefinition: RequirementDefinitionModel = InheritanceUtils @@ -999,14 +1009,12 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI .find(reqDef => reqDef.name === requirementModel.name); const nonFulfilledReqCount = sourceNodeTemplate.requirements - .requirement .filter(r => r.name === requirementModel.name && r.relationship === requirementDefinition.relationship) .length; if (nonFulfilledReqCount > 0) { // there is no need to have more than one non-fulfilled requirement assignment - sourceNodeTemplate.requirements.requirement = sourceNodeTemplate.requirements - .requirement + sourceNodeTemplate.requirements = sourceNodeTemplate.requirements .filter( r => r.id !== requirementModel.id ); @@ -1068,7 +1076,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI if (this.topologyRendererState.buttonsState.layoutButton) { this.layoutDirective.layoutNodes(this.nodeComponentChildren.toArray(), this.allRelationshipTemplates) - .then(done => { + .then(() => { leaveNodesAsSelectedAfterLayouting = false; // This call might seem confusing as we are calling it again right after executing, // but this just toggles the button state back to false, so layout can be called again. @@ -1310,7 +1318,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI if (visual && visual.imageUrl) { labelString += ''; + ' max-width: 40px; max-height: 40px;" src="' + visual.imageUrl + '" alt="Policy icon" />'; } } } @@ -1320,8 +1328,8 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI if (!this.allNodesIds.includes(relationSource)) { // check if source reference is a requirement of a node template const findNode = this.allNodeTemplates - .find(node => node.requirements && node.requirements.requirement - && node.requirements.requirement.find(req => req.id === relationSource) + .find(node => node.requirements + && node.requirements.find(req => req.id === relationSource) ); if (findNode) { relationSource = findNode.id; @@ -1333,7 +1341,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI if (!this.allNodesIds.includes(relationTarget)) { // check if target reference is a capability of a node template const findNode = this.allNodeTemplates - .find(node => node.capabilities && node.capabilities.capability && node.capabilities.capability.find(cap => cap.id === relationTarget)); + .find(node => node.capabilities && node.capabilities.find(cap => cap.id === relationTarget)); if (findNode) { relationTarget = findNode.id; } @@ -1350,8 +1358,8 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI label: labelString, id: labelString, events: { - click: function (labelOverlay, originalEvent) { - setTimeout(() => me.onClickJsPlumbConnection(conn, newRelationship), 1); + click: function () { + setTimeout(() => me.onClickJsPlumbConnection(conn), 1); } }, labelStyle: { @@ -1460,9 +1468,8 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI /** * Handler for the DEL-Key - removes a node and resets everything associated with that deleted node - * @param event Keyboard event. */ - handleDeleteKeyEvent(event?: KeyboardEvent) { + handleDeleteKeyEvent() { this.unbindConnection(); // if name, min or max instances has changed, do not delete the node. if (this.selectedNodes.length > 0) { @@ -1758,8 +1765,8 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI const capIds: string[] = []; this.allNodeTemplates.forEach(node => { if (node.capabilities) { - if (node.capabilities.capability) { - node.capabilities.capability.forEach(cap => { + if (node.capabilities) { + node.capabilities.forEach(cap => { capIds.push(node.id + '.' + cap.id); }); } @@ -1818,7 +1825,6 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI * Tracks the time of mousedown, this is necessary * to decide whether a drag or a click is initiated * and resets dragSource, clears selectedNodes and unbinds the connection listener. - * @param $event The HTML event. */ trackTimeOfMouseDown(): void { if (this.newJsPlumbInstance) { @@ -1834,7 +1840,6 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI /** * Tracks the time of mouseup, this is necessary * to decide whether a drag or a click is initiated. - * @param $event The HTML event. */ trackTimeOfMouseUp(): void { this.endTime = new Date().getTime(); @@ -1873,15 +1878,14 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI } onClickRelationshipTemplateName(clickedRelTemplateId: string): void { - const currentRelTemplate = this.allRelationshipTemplates.find(rel => rel.id === clickedRelTemplateId); const connection = this.newJsPlumbInstance.getAllConnections().find(conn => conn.id === clickedRelTemplateId); - this.onClickJsPlumbConnection(connection, currentRelTemplate); + this.onClickJsPlumbConnection(connection); } /** * jsPlumb relationship/label click actions */ - onClickJsPlumbConnection(conn: any, rel: any) { + onClickJsPlumbConnection(conn: any) { this.clearSelectedNodes(); this.newJsPlumbInstance.select().removeType('marked'); const currentRel = this.allRelationshipTemplates.find(con => con.id === conn.id); @@ -2000,7 +2004,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI if (reqModel.unbounded) { const nonFulfilledReq = RequirementModel.fromRequirementDefinition(reqDef); nonFulfilledReq.id = TopologyTemplateUtil.generateYAMLRequirementID(sourceNodeTemplate, reqModel) + '_' + relNumber; - sourceNodeTemplate.requirements.requirement.push(nonFulfilledReq); + sourceNodeTemplate.requirements.push(nonFulfilledReq); } } for (const rel of this.newJsPlumbInstance.getConnections()) { @@ -2022,8 +2026,8 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI let capability: any = null; this.allNodeTemplates.forEach(node => { if (node.capabilities) { - if (node.capabilities.capability) { - node.capabilities.capability.forEach(cap => { + if (node.capabilities) { + node.capabilities.forEach(cap => { if (cap.id === capabilityId) { capability = cap; } @@ -2113,9 +2117,9 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI } } - handleUpdatedYamlPolicies(policies: { policy: TPolicy[] }) { + handleUpdatedYamlPolicies(policies: TPolicy[]) { if (this.entityTypes) { - this.entityTypes.yamlPolicies = policies.policy; + this.entityTypes.yamlPolicies = policies; this.copyOfYamlPolicies = this.getYamlPoliciesTableData(); } } @@ -2132,7 +2136,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI handleYamlPolicySelected($event: WineryRowData) { this.selectedYamlPolicy = this.entityTypes.yamlPolicies.find(policy => policy.name === ($event.row).name); this.selectedYamlPolicy.properties = InheritanceUtils.getEffectivePropertiesOfTemplateElement(this.selectedYamlPolicy.properties, - this.selectedYamlPolicy.policyType, this.entityTypes.policyTypes); + this.selectedYamlPolicy.policyType, this.entityTypes.policyTypes, this.notify); } savePolicyProperties(): void { @@ -2177,8 +2181,8 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI } addNewPrmMapping(newRelationship: TRelationshipTemplate) { - this.getDetectorNodeproperties(newRelationship.sourceElement); - this.getRefinementNodeproperties(newRelationship.targetElement); + this.getDetectorNodeProperties(newRelationship.sourceElement); + this.getRefinementNodeProperties(newRelationship.targetElement); this.getBehaviorPatterns(newRelationship.sourceElement); this.newRelationship = newRelationship; this.direction = undefined; @@ -2213,7 +2217,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI this.detectorProperty = data; } - setBehaviorPattern(data: Policy) { + setBehaviorPattern(data: TPolicy) { this.behaviorPattern = data; } @@ -2247,9 +2251,8 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI } else if (this.newRelationship.type === '{http://opentosca.org/prmMappingTypes}BehaviorPatternMapping' && this.refinementProperty && this.behaviorPattern) { return false; - } else { - return true; } + return true; } } @@ -2263,15 +2266,15 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI if (this.allIds.length > 0) { this.setId(node.id); if (node.requirements) { - if (node.requirements.requirement) { - node.requirements.requirement.forEach(req => { + if (node.requirements) { + node.requirements.forEach(req => { this.setId(req.id); }); } } if (node.capabilities) { - if (node.capabilities.capability) { - node.capabilities.capability.forEach(cap => { + if (node.capabilities) { + node.capabilities.forEach(cap => { this.setId(cap.id); }); } @@ -2319,14 +2322,14 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI // if in YAML mode, automatically add all requirement and capability definitions to the node template! if (this.configuration.isYaml()) { - this.newNode.requirements = { requirement: [] }; - this.newNode.capabilities = { capability: [] }; + this.newNode.requirements = []; + this.newNode.capabilities = []; const reqData = InheritanceUtils.getEffectiveRequirementDefinitionsOfNodeType(this.newNode.type, this.entityTypes); if (reqData) { reqData.forEach(reqDef => { const reqModel = RequirementModel.fromRequirementDefinition(reqDef); reqModel.id = TopologyTemplateUtil.generateYAMLRequirementID(this.newNode, reqModel); - this.newNode.requirements.requirement.push(reqModel); + this.newNode.requirements.push(reqModel); }); } const capData = InheritanceUtils.getEffectiveCapabilityDefinitionsOfNodeType(this.newNode.type, this.entityTypes); @@ -2334,7 +2337,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI capData.forEach(capDef => { const capModel = CapabilityModel.fromCapabilityDefinitionModel(capDef); capModel.id = TopologyTemplateUtil.generateYAMLCapabilityID(this.newNode, capModel.name); - this.newNode.capabilities.capability.push(capModel); + this.newNode.capabilities.push(capModel); }); } } @@ -2397,8 +2400,8 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI if (conn) { conn.id = newRelationship.id; conn.setType(newRelationship.type); - conn.bind('click', rel => { - this.onClickJsPlumbConnection(conn, rel); + conn.bind('click', () => { + this.onClickJsPlumbConnection(conn); }); } @@ -2502,7 +2505,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI */ private enhanceDragSelection(nodeId: string) { if (!this.arrayContainsNode(this.selectedNodes, nodeId)) { - this.selectedNodes.push(this.getNodeByID(this.allNodeTemplates, nodeId)); + this.selectedNodes.push(CanvasComponent.getNodeByID(this.allNodeTemplates, nodeId)); this.newJsPlumbInstance.addToPosse(nodeId, 'dragSelection'); this.nodeComponentChildren.forEach(node => { if (this.selectedNodes.find(selectedNode => selectedNode && selectedNode.id === node.nodeTemplate.id)) { @@ -2514,21 +2517,6 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI } } - /** - * Getter for Node by ID - * @param Nodes - * @param id - */ - private getNodeByID(nodes: Array, id: string): TNodeTemplate { - if (nodes !== null && nodes.length > 0) { - for (const node of nodes) { - if (node.id === id) { - return node; - } - } - } - } - /** * Binds to the JsPlumb connections listener which triggers every time a relationship is dragged from the dragSource * and pushes the new connection to the redux store @@ -2558,7 +2546,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI this.unbindMouseActions.push(this.renderer.listen(this.eref.nativeElement, 'mousemove', (event) => this.moveNewNode(event))); this.unbindMouseActions.push(this.renderer.listen(this.eref.nativeElement, 'mouseup', - ($event) => this.positionNewNode())); + () => this.positionNewNode())); } } @@ -2603,7 +2591,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI ); if (visual && visual.imageUrl) { labelString += ''; + ' max-width: 40px; max-height: 40px;" src="' + visual.imageUrl + '" alt="Icon" />'; } } const relationshipType = this.entityTypes.relationshipTypes.filter(rT => rT.qName === relationshipTemplate.type)[0]; @@ -2626,8 +2614,8 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI label: labelString, id: 'label', events: { - click: function (labelOverlay, originalEvent) { - setTimeout(() => me.onClickJsPlumbConnection(newCon, relationshipTemplate), 1); + click: function () { + setTimeout(() => me.onClickJsPlumbConnection(newCon), 1); } }, labelStyle: { @@ -2646,7 +2634,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI } } this.allRelationshipTemplates[this.allRelationshipTemplates.indexOf(rel)] = relationshipTemplate; - this.onClickJsPlumbConnection(oldCon, relationshipTemplate); + this.onClickJsPlumbConnection(oldCon); return true; } } @@ -2660,7 +2648,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI return '' + typeQName.localName + ''; } - private getDetectorNodeproperties(sourceElement: { ref: string }) { + private getDetectorNodeProperties(sourceElement: { ref: string }) { const props = this.allNodeTemplates.find(element => element.id === sourceElement.ref).properties; if (props && props.propertyType && props.propertyType === 'KV') { this.detectorNodeProperties = Object.keys(props.kvproperties) @@ -2668,7 +2656,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI } } - private getRefinementNodeproperties(targetElement: { ref: string }) { + private getRefinementNodeProperties(targetElement: { ref: string }) { const props = this.allNodeTemplates.find(element => element.id === targetElement.ref).properties; if (props && props.propertyType && props.propertyType === 'KV') { this.refinementNodeProperties = Object.keys(props.kvproperties) @@ -2679,7 +2667,7 @@ export class CanvasComponent implements OnInit, OnDestroy, OnChanges, AfterViewI private getBehaviorPatterns(sourceElement: { ref: string }) { const source = this.allNodeTemplates.find(element => element.id === sourceElement.ref); if (source.policies) { - this.behaviorPatterns = source.policies.policy + this.behaviorPatterns = source.policies .filter((policy) => this.patternNamespaces.has(new QName(policy.policyType).nameSpace)); } } diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/group-view/policies/policies.component.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/group-view/policies/policies.component.ts index 4dcdd3d995..757f5244d9 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/group-view/policies/policies.component.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/group-view/policies/policies.component.ts @@ -36,7 +36,7 @@ export class GroupViewPoliciesComponent implements OnInit { ngOnInit() { this.ngRedux.select((state) => state.wineryState.currentJsonTopology.policies) - .subscribe((policies) => this.policies = policies.policy); + .subscribe((policies) => this.policies = policies); } isEmpty(): boolean { diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/InheritanceUtils.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/InheritanceUtils.ts index 6bddbe4951..72f7ba8a85 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/InheritanceUtils.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/InheritanceUtils.ts @@ -17,6 +17,7 @@ import { CapabilityDefinitionModel } from './capabilityDefinitionModel'; import { RequirementDefinitionModel } from './requirementDefinitonModel'; import { EntityType, TPolicyType } from './ttopology-template'; import { PropertyDefinitionType } from './enums'; +import { ToastrService } from 'ngx-toastr'; export class InheritanceUtils { @@ -52,33 +53,13 @@ export class InheritanceUtils { ); } - /** - * Retrieves the effective value of a given field of an entity type by traversing the type ancestry upwards and getting the first occurrence found of - * this field. For example, you can get the effictive mime_type of an artifact type using this method. - * @param typeName the type of the entity as a qname string e.g., '{tosca.nodes}.Compute'. - * @param fieldName the name of the field we are interested in, e.g., 'documentation'. - * @param allTypes the set of all types of this specific entity type, e.g., the linear set of all node types. - */ - static getEffectiveSingleFieldValueOfAnEntityType(typeName: string, fieldName: string, allTypes: EntityType[]) { - const ancestry = this.getInheritanceAncestry(typeName, allTypes); - - for (const entityType of ancestry) { - if (entityType[fieldName]) { - return entityType[fieldName]; - } - } - - return undefined; - } - static getEffectiveCapabilityDefinitionsOfNodeType(nodeType: string, entityTypes: EntityTypesModel): CapabilityDefinitionModel[] { const listOfEffectiveCapabilityDefinitions: CapabilityDefinitionModel[] = []; const listOfBequeathingNodeTypes = this.getInheritanceAncestry(nodeType, entityTypes.unGroupedNodeTypes); for (const currentNodeType of listOfBequeathingNodeTypes) { - if (currentNodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].capabilityDefinitions && - currentNodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].capabilityDefinitions.capabilityDefinition) { + if (currentNodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].capabilityDefinitions) { for (const capabilityDefinition of currentNodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0] - .capabilityDefinitions.capabilityDefinition) { + .capabilityDefinitions) { if (!listOfEffectiveCapabilityDefinitions .some(value => value.name === capabilityDefinition.name)) { listOfEffectiveCapabilityDefinitions.push(capabilityDefinition); @@ -93,10 +74,9 @@ export class InheritanceUtils { const listOfEffectiveRequirementDefinitions: RequirementDefinitionModel[] = []; const listOfBequeathingNodeTypes = this.getInheritanceAncestry(nodeType, entityTypes.unGroupedNodeTypes); for (const currentNodeType of listOfBequeathingNodeTypes) { - if (currentNodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].requirementDefinitions && - currentNodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].requirementDefinitions.requirementDefinition) { + if (currentNodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].requirementDefinitions) { for (const requirementDefinition of currentNodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0] - .requirementDefinitions.requirementDefinition) { + .requirementDefinitions) { if (!listOfEffectiveRequirementDefinitions .some(value => value.name === requirementDefinition.name)) { listOfEffectiveRequirementDefinitions.push(requirementDefinition); @@ -108,9 +88,9 @@ export class InheritanceUtils { } /** - * Returns a list of decendants of an entity type. + * Returns a list of descendants of an entity type. * - * Returns a list of all decendants of the entity type in no particular order. + * Returns a list of all descendants of the entity type in no particular order. * The list contains the entity type itself at position 0. * @param entityType * @param entityTypes @@ -150,31 +130,33 @@ export class InheritanceUtils { return result; } - static getEffectivePropertiesOfTemplateElement(templateElementProperties: any, typeQName: string, entityTypes: EntityType[]): any { + static getEffectivePropertiesOfTemplateElement(templateElementProperties: any, typeQName: string, entityTypes: EntityType[], + notify: ToastrService): any { const defaultTypeProperties = this.getDefaultPropertiesFromEntityTypes(typeQName, entityTypes); const result = {}; if (!defaultTypeProperties) { - console.log('Could not find default type properties for type ' + typeQName); + notify.info('Could not find default type properties for type ' + typeQName); return { propertyType: PropertyDefinitionType.NONE }; } + if (defaultTypeProperties.propertyType === PropertyDefinitionType.KV) { Object.assign(result, defaultTypeProperties.kvproperties); - } - if (defaultTypeProperties.propertyType === PropertyDefinitionType.YAML) { + } else if (defaultTypeProperties.propertyType === PropertyDefinitionType.YAML) { Object.assign(result, defaultTypeProperties.properties); } // overwrite defaults from the entity type with the properties of the element if (templateElementProperties && templateElementProperties.properties) { Object.assign(result, templateElementProperties.properties); } + // FIXME: because this method is only used for Yaml Policies this forced mapping to YAML-properties is doable - // This is highly likely to break for anything beyond that specific usecase! + // This is highly likely to break for anything beyond that specific use case! return { propertyType: PropertyDefinitionType.YAML, properties: result }; } /** * This function gets KV properties of a type and sets their default values - * @param any type: the element type, e.g. capabilityType, requirementType etc. + * @param type: the element type, e.g. capabilityType, requirementType etc. * @returns newKVProperties: KV Properties as Object */ static getKVProperties(type: any): any { @@ -328,7 +310,7 @@ export class InheritanceUtils { }; return InheritanceUtils.hasKVPropDefinition(element) && selectedType.propertiesDefinition.elementName - && selectedType.propertiesDefinition.namespace + && selectedType.propertiesDefinition.namespace ? { ...properties, elementName: selectedType.propertiesDefinition.elementName, diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/topologyTemplateUtil.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/topologyTemplateUtil.ts index d0250685c9..306cec9413 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/topologyTemplateUtil.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/topologyTemplateUtil.ts @@ -39,7 +39,7 @@ export abstract class TopologyTemplateUtil { otherAttributes: {}, relationshipTemplates: [], nodeTemplates: [], - policies: { policy: new Array() }, + policies: new Array(), groups: [], participants: [], }; @@ -117,41 +117,41 @@ export abstract class TopologyTemplateUtil { } // look for missing capabilities and add them const capDefs: CapabilityDefinitionModel[] = InheritanceUtils.getEffectiveCapabilityDefinitionsOfNodeType(node.type, types); - if (!node.capabilities || !node.capabilities.capability) { - node.capabilities = { capability: [] }; + if (!node.capabilities ) { + node.capabilities = []; } capDefs.forEach(def => { - const capAssignment = node.capabilities.capability.find(capAss => capAss.name === def.name); + const capAssignment = node.capabilities.find(capAss => capAss.name === def.name); const cap: CapabilityModel = CapabilityModel.fromCapabilityDefinitionModel(def); if (capAssignment) { - const capAssignmentIndex = node.capabilities.capability.indexOf(capAssignment); + const capAssignmentIndex = node.capabilities.indexOf(capAssignment); cap.properties = capAssignment.properties; - node.capabilities.capability.splice(capAssignmentIndex, 1); + node.capabilities.splice(capAssignmentIndex, 1); } cap.id = this.generateYAMLCapabilityID(node, cap.name); - node.capabilities.capability.push(cap); + node.capabilities.push(cap); }); // we assume that either all requirements are in the template, or none are (and therefore must be retrieved from the type hierarchy) const reqDefs: RequirementDefinitionModel[] = InheritanceUtils.getEffectiveRequirementDefinitionsOfNodeType(node.type, types); if (!node.requirements) { - node.requirements = { requirement: [] }; + node.requirements = []; } reqDefs.forEach(reqDef => { const req = RequirementModel.fromRequirementDefinition(reqDef); - if (!node.requirements.requirement.find(r => { + if (!node.requirements.find(r => { if (req.unbounded) { return r.name === req.name && r.relationship === req.relationship; } else { return r.name === req.name; } })) { - node.requirements.requirement.push(req); + node.requirements.push(req); } }); - node.requirements.requirement.forEach(req => req.id = this.generateYAMLRequirementID(node, req)); + node.requirements.forEach(req => req.id = this.generateYAMLRequirementID(node, req)); } return new TNodeTemplate( @@ -167,11 +167,11 @@ export abstract class TopologyTemplateUtil { otherAttributes, node.x, node.y, - node.capabilities ? node.capabilities : { capability: [] }, - node.requirements ? node.requirements : { requirement: [] }, - node.deploymentArtifacts ? node.deploymentArtifacts : {}, - node.policies ? node.policies : { policy: [] }, - node.artifacts ? node.artifacts : { artifact: [] }, + node.capabilities ? node.capabilities : [] , + node.requirements ? node.requirements : [], + node.deploymentArtifacts ? node.deploymentArtifacts : [], + node.policies ? node.policies : [], + node.artifacts ? node.artifacts : [], state ); } @@ -243,7 +243,7 @@ export abstract class TopologyTemplateUtil { static handleYamlRelationship(relationship: TRelationshipTemplate, nodeTemplateArray: Array) { // First, we look for the source node template / requirement for (const nodeTemplate of nodeTemplateArray) { - const foundRequirement: RequirementModel = nodeTemplate.requirements.requirement + const foundRequirement: RequirementModel = nodeTemplate.requirements .find(requirement => requirement.relationship === relationship.id); if (foundRequirement) { // the id was calculated before by the init node template method @@ -251,7 +251,7 @@ export abstract class TopologyTemplateUtil { // now we look for the target node template / capability. const targetNodeTemplate = nodeTemplateArray.find(nt => nt.id === foundRequirement.node); if (targetNodeTemplate) { - const targetCapability = targetNodeTemplate.capabilities.capability + const targetCapability = targetNodeTemplate.capabilities .find(cap => cap.name === foundRequirement.capability); // the id was calculated before by the init node template method relationship.targetElement = { ref: targetCapability.id }; diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/ttopology-template.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/ttopology-template.ts index fa33852da8..64fa935e63 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/ttopology-template.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/models/ttopology-template.ts @@ -44,18 +44,31 @@ export interface OTParticipant { } /** - * This is the datamodel for node Templates and relationship templates + * This is the data model for node Templates and relationship templates */ export class TTopologyTemplate extends AbstractTEntity { nodeTemplates: Array = []; relationshipTemplates: Array = []; - policies: { policy: Array }; + policies: Array; groups: Array = []; participants: Array = []; } +export class TArtifact extends AbstractTEntity { + constructor(public id: string, + public type: string, + public file: string, + public targetLocation?: string, + public properties?: any, + public documentation?: any, + public any?: any, + public otherAttributes?: any) { + super(documentation, any, otherAttributes); + } +} + /** - * This is the datamodel for node Templates + * This is the data-model for node Templates */ export class TNodeTemplate extends AbstractTEntity { @@ -71,11 +84,11 @@ export class TNodeTemplate extends AbstractTEntity { otherAttributes?: any, public x?: number, public y?: number, - public capabilities?: { capability: any[] }, - public requirements?: { requirement: any[] }, - public deploymentArtifacts?: any, - public policies?: { policy: any[] }, - public artifacts?: { artifact: Array }, + public capabilities?: any[], + public requirements?: any[], + public deploymentArtifacts?: any[], + public policies?: Array, + public artifacts?: Array, public _state?: DifferenceStates) { super(documentation, any, otherAttributes); } @@ -102,22 +115,20 @@ export class TNodeTemplate extends AbstractTEntity { if (nodeTemplate.otherAttributes.hasOwnProperty(key)) { nameSpace = key.substring(key.indexOf('{'), key.indexOf('}') + 1); if (nameSpace) { - const otherAttributes = { + nodeTemplate.otherAttributes = { [nameSpace + 'location']: updatedValue, [nameSpace + 'x']: nodeTemplate.x, [nameSpace + 'y']: nodeTemplate.y }; - nodeTemplate.otherAttributes = otherAttributes; newOtherAttributesAssigned = true; break; } } } if (!newOtherAttributesAssigned) { - const otherAttributes = { + nodeTemplate.otherAttributes = { 'location': updatedValue, }; - nodeTemplate.otherAttributes = otherAttributes; } } else if (updatedAttribute === ('minInstances') || updatedAttribute === ('maxInstances')) { if (Number.isNaN(+updatedValue)) { @@ -300,19 +311,6 @@ export class TRelationshipTemplate extends AbstractTEntity { } -export class TArtifact extends AbstractTEntity { - constructor(public id: string, - public type: string, - public file: string, - public targetLocation?: string, - public properties?: any, - public documentation?: any, - public any?: any, - public otherAttributes?: any) { - super(documentation, any, otherAttributes); - } -} - export class TNodeType extends AbstractTEntity { constructor(public name: string, public interfaces: { interfaces: Interface[] }, diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/capabilities/capabilities.component.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/capabilities/capabilities.component.ts index 310a2074c5..8ca45c2730 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/capabilities/capabilities.component.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/capabilities/capabilities.component.ts @@ -21,7 +21,6 @@ import { Subscription } from 'rxjs'; import { CapabilityModel } from '../../models/capabilityModel'; import { TableType } from '../../models/enums'; import { ReqCapModalType, ShowReqCapModalEventData } from '../toscatype-table/showReqCapModalEventData'; -import { WineryRepositoryConfigurationService } from '../../../../../tosca-management/src/app/wineryFeatureToggleModule/WineryRepositoryConfiguration.service'; @Component({ selector: 'winery-capabilities', @@ -46,10 +45,10 @@ export class CapabilitiesComponent implements OnInit, OnChanges, OnDestroy { subscription: Subscription; currentCapability: CapabilityModel; - constructor(private ngRedux: NgRedux, private configuration: WineryRepositoryConfigurationService) { + constructor(private ngRedux: NgRedux) { this.toggleModalHandler = new EventEmitter(); this.subscription = this.ngRedux.select(state => state.wineryState.currentJsonTopology.nodeTemplates) - .subscribe(currentNodes => this.updateCaps()); + .subscribe(() => this.updateCaps()); } /** @@ -58,7 +57,7 @@ export class CapabilitiesComponent implements OnInit, OnChanges, OnDestroy { updateCaps(): void { if (this.currentNodeData) { if (this.currentNodeData.nodeTemplate.capabilities) { - this.capabilities = this.currentNodeData.nodeTemplate.capabilities.capability; + this.capabilities = this.currentNodeData.nodeTemplate.capabilities; this.capabilitiesExist = true; } } diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/node.component.html b/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/node.component.html index e4c3336eed..d32242f8f8 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/node.component.html +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/node.component.html @@ -22,7 +22,7 @@ [class.unselected]="!makeSelectionVisible" id={{nodeTemplate.id}} (mousedown)="mouseDownHandler($event)" - (mouseup)="mouseUpHandler($event)" + (mouseup)="mouseUpHandler()" [@onCreateNodeTemplateAnimation]='visibilityState' [class.removeZIndex]="removeZIndex"> @@ -31,7 +31,8 @@
- + Policy icon
@@ -63,8 +64,10 @@
Node Template icon placeholder - + Node Template icon placeholder
@@ -84,7 +87,7 @@ -
Pattern icon placeholder Pattern icon
@@ -118,12 +123,12 @@
+ (mouseover)="makeSource()">
@@ -135,10 +140,10 @@ + class="card-header-node-accordions" + #propertiesgroup + panelClass="accordionGroupPanel" + *ngIf="navbarButtonsState.buttonsState.propertiesButton">
Properties
+ [deploymentArtifacts]="nodeTemplate.deploymentArtifacts" + [yamlArtifacts]="nodeTemplate.artifacts">
@@ -187,10 +192,10 @@ >
@@ -209,9 +214,9 @@ >
@@ -243,7 +248,7 @@ [ngClass]="{'fa-chevron-down': participantsgroup?.isOpen, 'fa-chevron-right': !participantsgroup?.isOpen}">
- @@ -288,7 +293,7 @@ [currentNodeData]="{currentNodeId: nodeTemplate.id, currentNodePart: 'POLICIES', currentProperties: nodeTemplate}" - [policies]="nodeTemplate.policies?.policy"> + [policies]="nodeTemplate.policies"> @@ -305,7 +310,7 @@ diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/node.component.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/node.component.ts index 6bdbe4eeb7..c834afdb31 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/node.component.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/node.component.ts @@ -133,7 +133,7 @@ export class NodeComponent implements OnInit, AfterViewInit, OnDestroy, DoCheck public elRef: ElementRef, private backendService: BackendService, private renderer: Renderer2, - private configurationService: WineryRepositoryConfigurationService, + public configurationService: WineryRepositoryConfigurationService, private differs: KeyValueDiffers) { this.sendId = new EventEmitter(); this.askForRepaint = new EventEmitter(); @@ -155,7 +155,7 @@ export class NodeComponent implements OnInit, AfterViewInit, OnDestroy, DoCheck this.policyChangeSubscription = $ngRedux.select(wineryState => wineryState.wineryState.currentJsonTopology.policies) .subscribe(policies => { if (this.entityTypes) { - this.entityTypes.yamlPolicies = policies.policy; + this.entityTypes.yamlPolicies = policies; this.policiesOfNode = this.getAllowedPolicies(); } }); @@ -289,9 +289,9 @@ export class NodeComponent implements OnInit, AfterViewInit, OnDestroy, DoCheck * Get the icons of the policies. */ setPolicyIcons() { - if (this.nodeTemplate.policies && this.nodeTemplate.policies.policy) { + if (this.nodeTemplate.policies) { this.policyIcons = []; - const list: TPolicy[] = this.nodeTemplate.policies.policy; + const list: TPolicy[] = this.nodeTemplate.policies; for (const value of list) { let visual: Visuals; @@ -391,7 +391,7 @@ export class NodeComponent implements OnInit, AfterViewInit, OnDestroy, DoCheck y: offsetTop }; this.zone.runOutsideAngular(() => { - this.unbindMouseMove = this.renderer.listen(this.elRef.nativeElement, 'mousemove', (event) => this.mouseMove(event)); + this.unbindMouseMove = this.renderer.listen(this.elRef.nativeElement, 'mousemove', () => this.mouseMove()); }); } } @@ -399,7 +399,7 @@ export class NodeComponent implements OnInit, AfterViewInit, OnDestroy, DoCheck /** * If a node is moved, this saves the current position of the node into the store. */ - mouseMove($event): void { + mouseMove(): void { const offsetLeft = this.elRef.nativeElement.firstChild.offsetLeft; const offsetTop = this.elRef.nativeElement.firstChild.offsetTop; this.currentPosition = { @@ -411,10 +411,10 @@ export class NodeComponent implements OnInit, AfterViewInit, OnDestroy, DoCheck /** * Checks if it was a click or a drag operation on the node. */ - mouseUpHandler($event): void { + mouseUpHandler(): void { // mouseup this.endTime = new Date().getTime(); - this.testTimeDifference($event); + this.testTimeDifference(); if (this.previousPosition !== undefined && this.currentPosition !== undefined) { const differenceY = this.previousPosition.y - this.currentPosition.y; const differenceX = this.previousPosition.x - this.currentPosition.x; @@ -457,7 +457,7 @@ export class NodeComponent implements OnInit, AfterViewInit, OnDestroy, DoCheck /** * Creates a dragoperation for nodes */ - makeSource($event): void { + makeSource(): void { const dragSourceInfo = { dragSource: this.dragSource, nodeId: this.nodeTemplate.id @@ -493,7 +493,7 @@ export class NodeComponent implements OnInit, AfterViewInit, OnDestroy, DoCheck * Navigates to the corresponding node type in the management UI * $event */ - linkType($event: any): void { + linkType(): void { const qName = new QName(this.nodeTemplate.type); const typeURL = this.backendService.configuration.uiURL + urlElement.NodeTypeURL + encodeURIComponent(encodeURIComponent(qName.nameSpace)) + '/' + qName.localName @@ -538,7 +538,7 @@ export class NodeComponent implements OnInit, AfterViewInit, OnDestroy, DoCheck * Checks if it was a click or a drag operation on the node. * $event */ - private testTimeDifference($event): void { + private testTimeDifference(): void { if ((this.endTime - this.startTime) < 200) { this.longpress = false; } else if (this.endTime - this.startTime >= 200) { diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/requirements/requirements.component.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/requirements/requirements.component.ts index 7d02f516a6..70241ae15a 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/requirements/requirements.component.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/requirements/requirements.component.ts @@ -19,7 +19,6 @@ import { NgRedux } from '@angular-redux/store'; import { IWineryState } from '../../redux/store/winery.store'; import { Subscription } from 'rxjs'; import { RequirementModel } from '../../models/requirementModel'; -import { ToscaTypes } from '../../../../../tosca-management/src/app/model/enums'; import { TableType } from '../../models/enums'; @Component({ @@ -58,7 +57,7 @@ export class RequirementsComponent implements OnInit, OnChanges, OnDestroy { updateReqs(): void { if (this.currentNodeData) { if (this.currentNodeData.nodeTemplate.requirements) { - this.requirements = this.currentNodeData.nodeTemplate.requirements.requirement; + this.requirements = this.currentNodeData.nodeTemplate.requirements; this.requirementsExist = true; } } diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/toscatype-table/toscatype-table.component.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/toscatype-table/toscatype-table.component.ts index c753e10d98..7ec52a1fab 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/toscatype-table/toscatype-table.component.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/node/toscatype-table/toscatype-table.component.ts @@ -55,7 +55,7 @@ export class ToscatypeTableComponent implements OnInit, OnChanges { constructor(private entitiesModalService: EntitiesModalService, private backendService: BackendService, - private reqCapRelationshipService: ReqCapRelationshipService, + public reqCapRelationshipService: ReqCapRelationshipService, private configurationService: WineryRepositoryConfigurationService) { this.showClickedReqOrCapModal = new EventEmitter(); this.relationshipTemplateIdClicked = new EventEmitter(); @@ -337,14 +337,12 @@ export class ToscatypeTableComponent implements OnInit, OnChanges { .getInheritanceAncestry(this.currentNodeData.nodeTemplate.type, this.entityTypes.unGroupedNodeTypes); for (const nodeType of listOfBequeathingNodeTypes) { if (nodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0] && - nodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].requirementDefinitions && - nodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].requirementDefinitions.requirementDefinition) { + nodeType.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].requirementDefinitions) { const requirementDefinition = nodeType .full .serviceTemplateOrNodeTypeOrNodeTypeImplementation[0] .requirementDefinitions - .requirementDefinition .find((reqDef: RequirementDefinitionModel) => reqDef.name === req.name); if (requirementDefinition) { return requirementDefinition; diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/properties/yaml-properties/typeaware-input.component.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/properties/yaml-properties/typeaware-input.component.ts index 9f585479fd..ae31cf7c5a 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/properties/yaml-properties/typeaware-input.component.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/properties/yaml-properties/typeaware-input.component.ts @@ -13,7 +13,7 @@ *******************************************************************************/ import { Component, forwardRef, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; -import { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms'; +import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms'; import { TDataType } from '../../models/ttopology-template'; import { Subject } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; @@ -57,7 +57,7 @@ export class TypeawareInputComponent implements ControlValueAccessor, OnInit, On private availableDataTypes: TDataType[] = []; constructor(private dataTypes: BackendService) { - this.dataTypes.model.subscribe(backendModel => { + this.dataTypes.model.subscribe((backendModel) => { this.availableDataTypes = backendModel.dataTypes; }); } @@ -122,6 +122,9 @@ export class TypeawareInputComponent implements ControlValueAccessor, OnInit, On } // storage for callbacks - private _onChange: any = e => {}; - private _onTouch: any = e => {}; + private _onChange: any = () => { + } + + private _onTouch: any = () => { + } } diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/redux/actions/winery.actions.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/redux/actions/winery.actions.ts index 46b9bb62a6..7d09e2bb73 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/redux/actions/winery.actions.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/redux/actions/winery.actions.ts @@ -182,9 +182,7 @@ export interface SetPolicyAction extends Action { } export interface ChangeYamlPoliciesAction extends Action { - yamlPolicies: { - policies: { policy: TPolicy[] } - }; + yamlPolicies: TPolicy[]; } export interface UpdateParticipantsAction extends Action { @@ -402,11 +400,7 @@ export class WineryActions { changeYamlPolicies: ActionCreator = ((policies) => ({ type: WineryActions.UPDATE_YAML_POLICIES, - yamlPolicies: { - policies: { - policy: policies - } - } + yamlPolicies: policies })); updateGroupDefinitions: ActionCreator = ((groups) => ({ diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/redux/reducers/winery.reducer.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/redux/reducers/winery.reducer.ts index 991bdccc3a..86e05f50b0 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/redux/reducers/winery.reducer.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/redux/reducers/winery.reducer.ts @@ -276,9 +276,7 @@ export const WineryReducer = nodeTemplates: lastState.currentJsonTopology.nodeTemplates .map(nodeTemplate => nodeTemplate.id === newCapability.nodeId ? nodeTemplate.generateNewNodeTemplateWithUpdatedAttribute('capabilities', - { - capability: newCapability.capability - }) : nodeTemplate + newCapability.capability) : nodeTemplate ) } }; @@ -289,7 +287,7 @@ export const WineryReducer = .map(n => n.id).indexOf(newDepArt.nodeId); const nodeDepArtTemplate = lastState.currentJsonTopology.nodeTemplates .find(nodeTemplate => nodeTemplate.id === newDepArt.nodeId); - const depArtExist = nodeDepArtTemplate.deploymentArtifacts && nodeDepArtTemplate.deploymentArtifacts.deploymentArtifact; + const depArtExist = !!nodeDepArtTemplate.deploymentArtifacts; return { ...lastState, @@ -298,16 +296,12 @@ export const WineryReducer = nodeTemplates: lastState.currentJsonTopology.nodeTemplates .map(nodeTemplate => nodeTemplate.id === newDepArt.nodeId ? nodeTemplate.generateNewNodeTemplateWithUpdatedAttribute('deploymentArtifacts', - depArtExist ? { - deploymentArtifact: [ - ...lastState.currentJsonTopology.nodeTemplates[indexOfNodeDepArt].deploymentArtifacts.deploymentArtifact, - newDeploymentArtifact - ] - } : { - deploymentArtifact: [ - newDeploymentArtifact - ] - }) : nodeTemplate + depArtExist ? [ + ...lastState.currentJsonTopology.nodeTemplates[indexOfNodeDepArt].deploymentArtifacts, + newDeploymentArtifact + ] : [ + newDeploymentArtifact + ]) : nodeTemplate ) } }; @@ -318,7 +312,7 @@ export const WineryReducer = .map(n => n.id).indexOf(newArtActionData.nodeId); const containingNodeTemplate = lastState.currentJsonTopology.nodeTemplates .find(nodeTemplate => nodeTemplate.id === newArtActionData.nodeId); - const artifactsExistInNodeTemplate = containingNodeTemplate.artifacts && containingNodeTemplate.artifacts.artifact; + const artifactsExistInNodeTemplate = containingNodeTemplate.artifacts && containingNodeTemplate.artifacts; return { ...lastState, @@ -328,17 +322,12 @@ export const WineryReducer = .map(nodeTemplate => nodeTemplate.id === newArtActionData.nodeId ? nodeTemplate.generateNewNodeTemplateWithUpdatedAttribute('artifacts', artifactsExistInNodeTemplate ? - { - artifact: [ - ...lastState.currentJsonTopology.nodeTemplates[indexOfContainingNodeTemplate].artifacts.artifact, - newYamlArtifact - ] - } : - { - artifact: [ - newYamlArtifact - ] - }) : nodeTemplate + [ + ...lastState.currentJsonTopology.nodeTemplates[indexOfContainingNodeTemplate].artifacts, + newYamlArtifact + ] : [ + newYamlArtifact + ]) : nodeTemplate ) } }; @@ -355,13 +344,11 @@ export const WineryReducer = nodeTemplates: lastState.currentJsonTopology.nodeTemplates .map((nodeTemplate) => nodeTemplate.id === (action).nodeDeploymentArtifact.nodeId ? nodeTemplate.generateNewNodeTemplateWithUpdatedAttribute('deploymentArtifacts', - { - deploymentArtifact: [ - ...lastState.currentJsonTopology.nodeTemplates[indexOfNodeWithDeletedDeploymentArtifact] - .deploymentArtifacts.deploymentArtifact - .filter(da => da.name !== deletedDeploymentArtifact) - ] - }) : nodeTemplate + [ + ...lastState.currentJsonTopology.nodeTemplates[indexOfNodeWithDeletedDeploymentArtifact] + .deploymentArtifacts + .filter(da => da.name !== deletedDeploymentArtifact) + ]) : nodeTemplate ) } }; @@ -378,13 +365,11 @@ export const WineryReducer = nodeTemplates: lastState.currentJsonTopology.nodeTemplates .map((nodeTemplate) => nodeTemplate.id === (action).nodeYamlArtifact.nodeId ? nodeTemplate.generateNewNodeTemplateWithUpdatedAttribute('artifacts', - { - artifact: [ - ...lastState.currentJsonTopology.nodeTemplates[indexOfNodeWithDeletedYamlArtifact] - .artifacts.artifact - .filter(a => a.id !== deletedYamlArtifactId) - ] - }) + [ + ...lastState.currentJsonTopology.nodeTemplates[indexOfNodeWithDeletedYamlArtifact] + .artifacts + .filter(a => a.id !== deletedYamlArtifactId) + ]) : nodeTemplate ) } @@ -396,7 +381,7 @@ export const WineryReducer = .map(n => n.id).indexOf(newPolicy.nodeId); const nodePolicyTemplate = lastState.currentJsonTopology.nodeTemplates .find(nodeTemplate => nodeTemplate.id === newPolicy.nodeId); - const policyExist = nodePolicyTemplate.policies && nodePolicyTemplate.policies.policy; + const policyExist = !!nodePolicyTemplate.policies; return { ...lastState, @@ -405,16 +390,13 @@ export const WineryReducer = nodeTemplates: lastState.currentJsonTopology.nodeTemplates .map(nodeTemplate => nodeTemplate.id === newPolicy.nodeId ? nodeTemplate.generateNewNodeTemplateWithUpdatedAttribute('policies', - policyExist ? { - policy: [ - ...lastState.currentJsonTopology.nodeTemplates[indexOfNodePolicy].policies.policy, - policy - ] - } : { - policy: [ - policy - ] - }) : nodeTemplate + policyExist ? [ + ...lastState.currentJsonTopology.nodeTemplates[indexOfNodePolicy].policies, + policy + ] : [ + policy + ] + ) : nodeTemplate ) } }; @@ -423,7 +405,7 @@ export const WineryReducer = ...lastState, currentJsonTopology: { ...lastState.currentJsonTopology, - policies: (action).yamlPolicies.policies + policies: (action).yamlPolicies } }; case WineryActions.UPDATE_GROUP_DEFINITIONS: @@ -460,7 +442,7 @@ export const WineryReducer = relationshipTemplate.generateNewRelTemplateWithUpdatedAttribute('policies', policyExistCheck ? { policy: [ - ...lastState.currentJsonTopology.relationshipTemplates[indexOfRelationshipPolicy].policies.policy, + ...lastState.currentJsonTopology.relationshipTemplates[indexOfRelationshipPolicy].policies, relPolicy ] } : { @@ -501,7 +483,7 @@ export const WineryReducer = { policy: [ ...lastState.currentJsonTopology.nodeTemplates[indexOfNodeWithDeletedPolicy] - .policies.policy + .policies .filter(da => da.name !== deletedPolicy) ] }) : nodeTemplate @@ -573,8 +555,8 @@ export const WineryReducer = relationshipTemplate => relationshipTemplate.sourceElement.ref !== deletedNodeId && relationshipTemplate.targetElement.ref !== deletedNodeId), // we check if the targets of YAML policies include the deleted node template< - policies: { - policy: lastState.currentJsonTopology.policies.policy && lastState.currentJsonTopology.policies.policy.map(pol => { + policies: lastState.currentJsonTopology.policies && lastState.currentJsonTopology.policies + .map((pol) => { if (pol.targets) { pol.targets = pol.targets.filter(target => target !== deletedNodeId); // to keep a consistent behavior, if no targets remain, remove the field. @@ -583,8 +565,7 @@ export const WineryReducer = } } return pol; - }) - }, + }), // update groups groups: lastState.currentJsonTopology.groups && lastState.currentJsonTopology.groups.map((group) => { group.members = group.members.filter((member) => member !== deletedNodeId); diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/services/backend.service.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/services/backend.service.ts index 5eefec058a..ef1de2d781 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/services/backend.service.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/services/backend.service.ts @@ -200,7 +200,7 @@ export class BackendService { */ saveTopologyTemplate(topologyTemplate: TTopologyTemplate): Observable> { if (this.configuration) { - let url = ''; + let url: string; if (this.configuration.elementPath === SubMenuItems.graficPrmModelling.urlFragment) { url = this.configuration.parentElementUrl + 'graphicPrmTopology'; } else { @@ -432,7 +432,7 @@ export class BackendService { this.initEntityType(entityTypes[10], 'dataTypes'); // init YAML policies if they exist if (this.topologyTemplate.policies) { - this.initEntityType(this.topologyTemplate.policies.policy, 'yamlPolicies'); + this.initEntityType(this.topologyTemplate.policies, 'yamlPolicies'); } else { this.initEntityType([], 'yamlPolicies'); } @@ -575,7 +575,7 @@ export class BackendService { element.full); if (element.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].appliesTo) { policyType.targets = element.full.serviceTemplateOrNodeTypeOrNodeTypeImplementation[0].appliesTo - .nodeTypeReference.map(ntr => ntr.typeRef); + .map(ntr => ntr.typeRef); } this.storedModel.policyTypes.push(policyType); }); diff --git a/org.eclipse.winery.frontends/app/topologymodeler/src/app/winery.component.ts b/org.eclipse.winery.frontends/app/topologymodeler/src/app/winery.component.ts index 44aa85a525..4fa8b3adaf 100644 --- a/org.eclipse.winery.frontends/app/topologymodeler/src/app/winery.component.ts +++ b/org.eclipse.winery.frontends/app/topologymodeler/src/app/winery.component.ts @@ -71,7 +71,6 @@ export class WineryComponent implements OnInit, AfterViewInit { public loaded: ILoaded; private loadedRelationshipVisuals = 0; - private requiredRelationshipVisuals: number; constructor(private loadedService: LoadedService, private appReadyEvent: AppReadyEventService, @@ -173,7 +172,7 @@ export class WineryComponent implements OnInit, AfterViewInit { initiateData(): void { // TODO well, this is a mess - this.backendService.model.subscribe(m => { + this.backendService.model.subscribe((m) => { this.entityTypes = m; this.ngRedux.dispatch(this.uiActions.addEntityTypes(this.entityTypes)); }); diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/instance.service.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/instance.service.ts index d7469c19fc..40db344f73 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/instance.service.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/instance.service.ts @@ -123,7 +123,7 @@ export class InstanceService { subMenu = [SubMenuItems.readme, SubMenuItems.license, SubMenuItems.appliesTo, SubMenuItems.propertiesDefinition, SubMenuItems.inheritance, SubMenuItems.appearance, SubMenuItems.documentation]; } else { - subMenu = [SubMenuItems.readme, SubMenuItems.license, SubMenuItems.propertiesDefinition, + subMenu = [SubMenuItems.readme, SubMenuItems.license, SubMenuItems.appliesTo, SubMenuItems.propertiesDefinition, SubMenuItems.inheritance, SubMenuItems.templates, SubMenuItems.appearance, SubMenuItems.documentation, SubMenuItems.xml]; } break; diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/nodeTypes/capabilityOrRequirementDefinitions/capOrReqDef.component.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/nodeTypes/capabilityOrRequirementDefinitions/capOrReqDef.component.ts index f417a7f1ce..b15b726c27 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/nodeTypes/capabilityOrRequirementDefinitions/capOrReqDef.component.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/nodeTypes/capabilityOrRequirementDefinitions/capOrReqDef.component.ts @@ -96,8 +96,8 @@ export class CapOrReqDefComponent implements OnInit { @ViewChild('lowerBoundSpinner') lowerBoundSpinner: SpinnerWithInfinityComponent; @ViewChild('upperBoundSpinner') upperBoundSpinner: SpinnerWithInfinityComponent; @ViewChild('editor') editor: any; - private currentNodeTypes: SelectData[]; - private selectedNodeType: QName; + currentNodeTypes: SelectData[]; + selectedNodeType: QName; constructor(public sharedData: InstanceService, private service: CapabilityOrRequirementDefinitionsService, @@ -278,11 +278,11 @@ export class CapOrReqDefComponent implements OnInit { * @param constraint to be edited */ openEditConstraintModal(constraint?: Constraint) { - const re = /\#\#/; + const re = /##/; const xmlDef = /<\?xml.*>\n/; let constraintTypeElement: SelectData = null; - let constraintEditorContent = this.defaultConstraintDataModel; + let constraintEditorContent: string; if (constraint) { this.activeConstraint = constraint; @@ -435,7 +435,7 @@ export class CapOrReqDefComponent implements OnInit { const lowerBound = entry.lowerBound; const upperBound = entry.upperBound === 'UNBOUNDED' ? '∞' : entry.upperBound; const type = this.capOrReqTypeToHref( - !entry.capabilityType + entry.capabilityType ? entry.capabilityType : entry.requirementType ); @@ -453,7 +453,7 @@ export class CapOrReqDefComponent implements OnInit { private deleteConstraint(capabilityOrRequirementDefinition: CapabilityOrRequirementDefinition, constraint: Constraint) { this.service.deleteConstraint(capabilityOrRequirementDefinition.name, constraint.id) .subscribe( - data => this.handleDeleteConstraint(), + () => this.handleDeleteConstraint(), error => this.handleError(error) ); } @@ -518,7 +518,7 @@ export class CapOrReqDefComponent implements OnInit { private addNewCapability(capOrReqDef: CapOrReqDefinition): void { this.loading = true; this.service.sendPostRequest(capOrReqDef).subscribe( - data => this.handlePostResponse(), + () => this.handlePostResponse(), error => this.handleError(error) ); } @@ -546,7 +546,7 @@ export class CapOrReqDefComponent implements OnInit { } private handlePostResponse() { - let notification = ''; + let notification: string; if (this.types === 'capabilitytypes') { notification = 'New Capability added!'; } else { @@ -577,13 +577,13 @@ export class CapOrReqDefComponent implements OnInit { private deleteCapOrReqDef(elementToRemove: CapOrRegDefinitionsTableData) { this.service.deleteCapOrReqDef(elementToRemove.name) .subscribe( - data => this.handleCapOrReqDelete(), + () => this.handleCapOrReqDelete(), error => this.handleError(error) ); } private handleCapOrReqDelete() { - let notification = ''; + let notification: string; if (this.types === 'capabilitytypes') { notification = 'Capability deleted!'; } else { diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/nodeTypes/capabilityOrRequirementDefinitions/capOrReqDefResourceApiData.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/nodeTypes/capabilityOrRequirementDefinitions/capOrReqDefResourceApiData.ts index c1b31357a4..163ae125e6 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/nodeTypes/capabilityOrRequirementDefinitions/capOrReqDefResourceApiData.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/nodeTypes/capabilityOrRequirementDefinitions/capOrReqDefResourceApiData.ts @@ -18,7 +18,7 @@ export class CapabilityOrRequirementDefinition { requirementType: string = null; lowerBound: string = null; upperBound: string = null; - constraints: Constraints = null; + constraints: Constraint[] = null; documentation: any[] = []; any: any[] = []; otherAttributes: any = null; @@ -39,10 +39,6 @@ export class Constraint { id: string = null; } -export class Constraints { - constraint: Constraint[] = []; -} - export class CapabilityDefinitionPostData { name: string = null; capabilityType: string = null; diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/policyTypes/appliesTo/appliesTo.component.html b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/policyTypes/appliesTo/appliesTo.component.html index d12f2ad9bd..c079b56087 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/policyTypes/appliesTo/appliesTo.component.html +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/policyTypes/appliesTo/appliesTo.component.html @@ -1,5 +1,5 @@ - - Feature not implemented yet! diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/refinementModels/behavior-pattern-mappings/behavior-pattern-mappings.component.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/refinementModels/behavior-pattern-mappings/behavior-pattern-mappings.component.ts index 06ae26b313..6b7e206866 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/refinementModels/behavior-pattern-mappings/behavior-pattern-mappings.component.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/refinementModels/behavior-pattern-mappings/behavior-pattern-mappings.component.ts @@ -18,7 +18,7 @@ import { RefinementMappingsService } from '../refinementMappings.service'; import { forkJoin } from 'rxjs'; import { HttpErrorResponse } from '@angular/common/http'; import { WineryNotificationService } from '../../../wineryNotificationModule/wineryNotification.service'; -import { Policy, WineryTemplateWithPolicies } from '../../../model/wineryComponent'; +import { WineryTemplateWithPolicies } from '../../../model/wineryComponent'; import { WineryTableColumn } from '../../../wineryTableModule/wineryTable.component'; import { InstanceService } from '../../instance.service'; import { BsModalRef, BsModalService, ModalDirective } from 'ngx-bootstrap'; @@ -27,6 +27,7 @@ import { NamespaceProperties } from '../../../model/namespaceProperties'; import { WineryNamespaceSelectorService } from '../../../wineryNamespaceSelector/wineryNamespaceSelector.service'; import { QName } from '../../../../../../shared/src/app/model/qName'; import { KvProperty } from '../../../model/keyValueItem'; +import { TPolicy } from '../../../../../../topologymodeler/src/app/models/policiesModalData'; @Component({ templateUrl: 'behavior-pattern-mappings.component.html', @@ -60,7 +61,7 @@ export class BehaviorPatternMappingsComponent implements OnInit { mapping: BehaviorPatternMapping; selectedDetectorElement: WineryTemplateWithPolicies; - behaviorPatterns: Policy[]; + behaviorPatterns: TPolicy[]; selectedRefinementElement: WineryTemplateWithPolicies; refinementProperties: KvProperty[]; @@ -97,7 +98,7 @@ export class BehaviorPatternMappingsComponent implements OnInit { this.selectedDetectorElement = this.detectorTemplates .find((value) => value.id === element.id); if (this.selectedDetectorElement.policies) { - this.behaviorPatterns = this.selectedDetectorElement.policies.policy + this.behaviorPatterns = this.selectedDetectorElement.policies .filter((policy) => this.patternNamespaces.has(new QName(policy.policyType).nameSpace)); } } diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.component.html b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.component.html index 7c73f423d2..aa90067187 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.component.html +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.component.html @@ -13,7 +13,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
@@ -115,11 +113,9 @@ else editTargetProps"> diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.component.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.component.ts index ec15d92c27..046cefc8e0 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.component.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.component.ts @@ -12,7 +12,7 @@ * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 *******************************************************************************/ import { Component, OnInit, ViewChild } from '@angular/core'; -import { Property, PropertyMappingsApiData, PropertyMappingService } from './propertyMappings.service'; +import { PropertyMapping, PropertyMappingsApiData, PropertyMappingService } from './propertyMappings.service'; import { WineryRowData, WineryTableColumn } from '../../../../wineryTableModule/wineryTable.component'; import { WineryNotificationService } from '../../../../wineryNotificationModule/wineryNotification.service'; import { ModalDirective } from 'ngx-bootstrap'; @@ -49,7 +49,7 @@ export class PropertyMappingsComponent implements OnInit { @ViewChild('propertyMappingForm') propertyMappingForm: NgForm; @ViewChild('tempList') templateSelect: any; @ViewChild('propertiesSelect') propertiesSelect: any; - currentSelectedItem: Property = new Property(); + currentSelectedItem: PropertyMapping = new PropertyMapping(); addOrUpdate = 'Add'; properties: { name: string, property: string } = { name: '', property: '' }; xmlData: any; @@ -84,7 +84,7 @@ export class PropertyMappingsComponent implements OnInit { getTopologyTemplate() { this.instanceService.getTopologyTemplate().subscribe( data => this.handleTopologyTemplateData(data), - error => this.notify.error('Could not get topology data') + () => this.notify.error('Could not get topology data') ); } @@ -210,12 +210,12 @@ export class PropertyMappingsComponent implements OnInit { removeConfirmed() { this.service.removePropertyMapping(this.currentSelectedItem.serviceTemplatePropertyRef).subscribe( - data => this.handleSuccess('Deleted property mapping'), + () => this.handleSuccess('Deleted property mapping'), error => this.handleError(error) ); } - onRemoveClick(elementToRemove: Property) { + onRemoveClick(elementToRemove: PropertyMapping) { if (elementToRemove && this.currentSelectedItem) { this.confirmDeleteModal.show(); } else { @@ -225,7 +225,7 @@ export class PropertyMappingsComponent implements OnInit { onAddClick() { this.addOrUpdate = 'Add'; - this.currentSelectedItem = new Property(); + this.currentSelectedItem = new PropertyMapping(); this.propertyMappingForm.reset(); this.targetObject = null; this.targetTypeSelected = false; @@ -251,8 +251,8 @@ export class PropertyMappingsComponent implements OnInit { if (element) { // Get the last value defined in local-name()='valueWeWantToGet' - const splittedProperty = this.currentSelectedItem.targetPropertyRef.split('\''); - this.selectedProperty = splittedProperty[splittedProperty.length - 2]; + const splitProperty = this.currentSelectedItem.targetPropertyRef.split('\''); + this.selectedProperty = splitProperty[splitProperty.length - 2]; this.targetObject = new WineryTemplate(); this.addOrUpdate = 'Update'; this.radioBtnSelected({ target: { value: elementType } }, false); @@ -269,7 +269,7 @@ export class PropertyMappingsComponent implements OnInit { } this.service.addPropertyMapping(this.currentSelectedItem) .subscribe( - data => this.handleSuccess('Added new property mapping'), + () => this.handleSuccess('Added new property mapping'), error => this.handleError(error) ); this.addPropertyMappingModal.hide(); diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.service.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.service.ts index 1cc54d3ed1..12767c2369 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.service.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/boundaryDefinitions/propertyMappings/propertyMappings.service.ts @@ -19,18 +19,14 @@ import { ModalDirective } from 'ngx-bootstrap'; import { PropertiesDefinitionsResourceApiData } from '../../../sharedComponents/propertiesDefinition/propertiesDefinitionsResourceApiData'; import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; -export class Property { +export class PropertyMapping { serviceTemplatePropertyRef: string; targetObjectRef: string; targetPropertyRef: string; } -export interface PropertyMappings { - propertyMapping: Property[]; -} - export interface PropertyMappingsApiData { - propertyMappings: PropertyMappings; + propertyMappings: PropertyMapping[]; } @Injectable() @@ -48,7 +44,7 @@ export class PropertyMappingService { return this.http.get(this.path); } - addPropertyMapping(propertyMapping: Property): Observable> { + addPropertyMapping(propertyMapping: PropertyMapping): Observable> { const headers = new HttpHeaders({ 'Content-Type': 'application/json' }); return this.http .post( diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/plans/plans.component.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/plans/plans.component.ts index 0feabb5a5c..bbb61e9e3d 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/plans/plans.component.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/serviceTemplates/plans/plans.component.ts @@ -19,7 +19,6 @@ import { WineryNotificationService } from '../../../wineryNotificationModule/win import { SelectData } from '../../../model/selectData'; import { WineryUploaderComponent } from '../../../wineryUploader/wineryUploader.component'; import { SelectItem } from 'ng2-select'; -import { InputParameters, OutputParameters } from '../../../model/parameters'; import { backendBaseURL } from '../../../configuration'; import { InstanceService } from '../../instance.service'; import { HttpErrorResponse } from '@angular/common/http'; @@ -139,10 +138,10 @@ export class PlansComponent implements OnInit { onEditPlanIOParameters(selectedType: PlansApiData) { this.newPlan = selectedType; if (!this.newPlan.inputParameters) { - this.newPlan.inputParameters = new InputParameters(); + this.newPlan.inputParameters = []; } if (!this.newPlan.outputParameters) { - this.newPlan.outputParameters = new OutputParameters(); + this.newPlan.outputParameters = []; } this.ioModalRef = this.modalService.show(this.ioModal); } diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/artifacts/artifacts.component.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/artifacts/artifacts.component.ts index ed5b3ae54b..62558d34de 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/artifacts/artifacts.component.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/artifacts/artifacts.component.ts @@ -55,11 +55,11 @@ export class ArtifactsComponent implements OnInit { ngOnInit(): void { this.loading = true; - this.artifactsService.getArtifacts().subscribe(data => { + this.artifactsService.getArtifacts().subscribe((data) => { this.artifacts = []; data.forEach(item => this.artifacts.push({ ...new Artifact(), ...item })); this.loading = false; - }, error => this.handleError(error)); + }, (error) => this.handleError(error)); this.artifactsService.getArtifactTypes().subscribe(data => { this.artifactTypes.classes = data; }, error => this.handleError(error)); diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/interfaces.component.html b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/interfaces.component.html index a792d3308b..478aea2568 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/interfaces.component.html +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/interfaces.component.html @@ -25,7 +25,7 @@ [rows]="interfacesData" (addButtonClicked)="addInterface()" (selectionChanged)="onInterfaceSelect($event)" - (removeButtonClicked)="removeInterface($event)"> + (removeButtonClicked)="removeInterface()"> this.createImplementation = false, - error => this.createImplementation = true + () => this.createImplementation = false, + () => this.createImplementation = true ); } } @@ -314,8 +312,8 @@ export class InterfacesComponent implements OnInit { + encodeURIComponent(encodeURIComponent(this.generateArtifactApiData.artifactTemplateNamespace)) + '/' + this.generateArtifactApiData.artifactTemplateName + '/' ).subscribe( - data => this.createArtifactTemplate = false, - error => this.createArtifactTemplate = true + () => this.createArtifactTemplate = false, + () => this.createArtifactTemplate = true ); } } @@ -339,7 +337,7 @@ export class InterfacesComponent implements OnInit { this.loading = true; this.service.save(this.interfacesData) .subscribe( - data => this.handleSave(), + () => this.handleSave(), error => this.handleError(error) ); } @@ -348,7 +346,7 @@ export class InterfacesComponent implements OnInit { // region ########## Private Methods ########## private handleInterfacesApiData(data: InterfacesApiData[]) { - this.interfacesData = data; + this.interfacesData = data ? data : []; this.loading = false; } diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/interfacesApiData.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/interfacesApiData.ts index 8ca15ecfa9..3f5a2e08ae 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/interfacesApiData.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/interfacesApiData.ts @@ -11,12 +11,12 @@ * * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 *******************************************************************************/ -import {InputParameters, OutputParameters} from '../../../model/parameters'; -import {WineryComponent} from '../../../model/wineryComponent'; -import {NodeOperation, PlanOperation, RelationshipOperation} from './targetInterface/operations'; +import { InterfaceParameter } from '../../../model/parameters'; +import { WineryComponent } from '../../../model/wineryComponent'; +import { NodeOperation, PlanOperation, RelationshipOperation } from './targetInterface/operations'; export class InterfacesApiData { - operation: InterfaceOperationApiData[] = []; + operations: InterfaceOperationApiData[] = []; name: string; id: string; text: string; @@ -27,8 +27,8 @@ export class InterfacesApiData { } export class InterfaceOperationApiData extends WineryComponent { - inputParameters: InputParameters = new InputParameters(); - outputParameters: OutputParameters = new OutputParameters(); + inputParameters: InterfaceParameter[] = []; + outputParameters: InterfaceParameter[] = []; nodeOperation: NodeOperation; relationshipOperation: RelationshipOperation; plan: PlanOperation; diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/targetInterface/wineryTargetInterface.component.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/targetInterface/wineryTargetInterface.component.ts index a3444bc677..219aeecb54 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/targetInterface/wineryTargetInterface.component.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/interfaces/targetInterface/wineryTargetInterface.component.ts @@ -158,12 +158,12 @@ export class WineryTargetInterfaceComponent implements OnInit, OnChanges { this.activeInterface = this.interfaces.find((element) => { return element.name === event.id; }); - this.activeOperation = this.activeInterface.operation[0]; + this.activeOperation = this.activeInterface.operations[0]; this.setInterfaceAndOperation(); } onOperationSelected(event: SelectItem) { - this.activeOperation = this.activeInterface.operation.find((element) => { + this.activeOperation = this.activeInterface.operations.find((element) => { return element.name === event.id; }); this.setInterfaceAndOperation(); @@ -178,7 +178,7 @@ export class WineryTargetInterfaceComponent implements OnInit, OnChanges { let relationshipInterfaces = false; if (this.currentSelected === CurrentSelectedEnum.nodeTemplate) { - this.activeReference = this.sharedData.topologyTemplate.nodeTemplates.find((element, id, context) => { + this.activeReference = this.sharedData.topologyTemplate.nodeTemplates.find((element) => { return element.id === this.operation.nodeOperation.nodeRef; }); @@ -187,7 +187,7 @@ export class WineryTargetInterfaceComponent implements OnInit, OnChanges { } } else if (this.currentSelected === CurrentSelectedEnum.relationshipTemplate) { relationshipInterfaces = true; - this.activeReference = this.sharedData.topologyTemplate.relationshipTemplates.find((element, id, context) => { + this.activeReference = this.sharedData.topologyTemplate.relationshipTemplates.find((element) => { return element.id === this.operation.relationshipOperation.relationshipRef; }); @@ -234,33 +234,33 @@ export class WineryTargetInterfaceComponent implements OnInit, OnChanges { this.interfaces = data; if (this.currentSelected === CurrentSelectedEnum.nodeTemplate) { - const nodeInterface = this.interfaces.find((element, id, arr) => { + const nodeInterface = this.interfaces.find((element) => { return element.name === this.operation.nodeOperation.interfaceName; }); this.activeInterface = nodeInterface ? nodeInterface : this.interfaces[0]; if (this.activeInterface) { - this.activeOperation = this.activeInterface.operation.find((element, id, arr) => { + this.activeOperation = this.activeInterface.operations.find((element) => { return element.name === this.operation.nodeOperation.operationName; }); } } else if (this.currentSelected === CurrentSelectedEnum.relationshipTemplate) { - const relInterface = this.interfaces.find((element, id, arr) => { + const relInterface = this.interfaces.find((element) => { return element.name === this.operation.relationshipOperation.interfaceName; }); this.activeInterface = relInterface ? relInterface : this.interfaces[0]; if (this.activeInterface) { - this.activeOperation = this.activeInterface.operation.find((element, id, arr) => { + this.activeOperation = this.activeInterface.operations.find((element) => { return element.name === this.operation.relationshipOperation.operationName; }); } } if (this.activeInterface && !this.activeOperation) { - this.activeOperation = this.activeInterface.operation[0]; + this.activeOperation = this.activeInterface.operations[0]; } this.setInterfaceAndOperation(); diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/wineryArtifacts/artifact.component.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/wineryArtifacts/artifact.component.ts index 4da36608c0..875793ce18 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/wineryArtifacts/artifact.component.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/instance/sharedComponents/wineryArtifacts/artifact.component.ts @@ -81,7 +81,6 @@ export class WineryArtifactComponent implements OnInit { toscaType = ToscaTypes.ArtifactTemplate; valid: boolean; validation: any; - hideHelp = true; typeRequired = false; types: SelectData[]; @@ -103,6 +102,36 @@ export class WineryArtifactComponent implements OnInit { private router: Router) { } + private static getLocalName(qName: string): string { + if (qName) { + return qName.slice(qName.indexOf('}') + 1); + } else { + return ''; + } + } + + private static getNamespaceAndLocalNameFromQName(qname: string): { namespace: string; localname: string; } { + const i = qname.indexOf('}'); + return { + namespace: qname.substr(1, i - 1), + localname: qname.substr(i + 1) + }; + } + + private static createArtifactTemplateUrl(qname: string): string { + const nameAndNamespace = WineryArtifactComponent.getNamespaceAndLocalNameFromQName(qname); + return '/artifacttemplates/' + encodeURIComponent(encodeURIComponent(nameAndNamespace.namespace)) + + '/' + nameAndNamespace.localname + '/'; + + } + + private static createArtifactTypeUrl(qname: string): string { + const nameAndNamespace = WineryArtifactComponent.getNamespaceAndLocalNameFromQName(qname); + return '/artifacttypes/' + encodeURIComponent(encodeURIComponent(nameAndNamespace.namespace)) + + '/' + nameAndNamespace.localname + '/'; + + } + ngOnInit() { this.columns = this.columns.concat(this.commonColumns); @@ -200,7 +229,6 @@ export class WineryArtifactComponent implements OnInit { } if (this.selectedRadioButton === 'createArtifactTemplate') { - const version = new WineryVersion('', 1, 1); this.newArtifact.autoCreateArtifactTemplate = 'true'; this.newArtifact.artifactTemplateNamespace = this.artifact.namespace; this.makeArtifactUrl(); @@ -220,38 +248,38 @@ export class WineryArtifactComponent implements OnInit { createNewImplementationArtifact() { this.loading = true; this.service.createNewArtifact(this.newArtifact).subscribe( - data => this.handlePostResponse(), - error => this.showError(error) + () => this.handlePostResponse(), + (error) => this.showError(error) ); } getArtifacts() { this.service.getAllArtifacts().subscribe( - data => { + (data) => { this.handleArtifactsData(data); }, - error => this.showError(error) + (error) => this.showError(error) ); } getInterfacesOfAssociatedType() { this.service.getInterfacesOfAssociatedType().subscribe( - data => this.handleInterfaceData(data), - error => this.showError(error) + (data) => this.handleInterfaceData(data), + (error) => this.showError(error) ); } getArtifactTypes() { this.service.getAllArtifactTypes().subscribe( - data => this.handleArtifactTypeData(data), - error => this.showError(error) + (data) => this.handleArtifactTypeData(data), + (error) => this.showError(error) ); } getArtifactTemplates() { this.service.getAllArtifactTemplates().subscribe( - data => this.handleArtifactTemplateData(data), - error => this.showError(error) + (data) => this.handleArtifactTemplateData(data), + (error) => this.showError(error) ); } @@ -260,14 +288,14 @@ export class WineryArtifactComponent implements OnInit { this.artifactsData = this.artifactsData.map( obj => { if (obj.artifactType) { - obj.artifactTypeLocalName = '' + this.getLocalName(obj.artifactType) + ''; + obj.artifactTypeLocalName = '' + WineryArtifactComponent.getLocalName(obj.artifactType) + ''; } else { obj.artifactTypeLocalName = ''; } if (obj.artifactRef) { - obj.artifactRefLocalName = '' + this.getLocalName(obj.artifactRef) + ''; + obj.artifactRefLocalName = '' + WineryArtifactComponent.getLocalName(obj.artifactRef) + ''; } else { obj.artifactRefLocalName = ''; } @@ -287,19 +315,19 @@ export class WineryArtifactComponent implements OnInit { removeConfirmed() { this.service.deleteArtifact(this.elementToRemove.name).subscribe( - data => { + () => { this.notify.success('Artifact deleted'); this.getArtifacts(); }, - error => this.notify.error(error.message) + (error) => this.notify.error(error.message) ); } loadFiles(templateUrl: string) { this.fileService.getFiles(templateUrl) .subscribe( - data => this.filesList = data.files, - error => this.notify.error(error.message + 'error while loading files!') + (data) => this.filesList = data.files, + (error) => this.notify.error(error.message + 'error while loading files!') ); } @@ -312,8 +340,8 @@ export class WineryArtifactComponent implements OnInit { this.loading = true; this.fileService.delete(this.fileToRemove) .subscribe( - data => this.handleDelete(), - error => this.showError(error) + () => this.handleDelete(), + (error) => this.showError(error) ); } @@ -344,14 +372,6 @@ export class WineryArtifactComponent implements OnInit { } } - private getLocalName(qName: string): string { - if (qName) { - return qName.slice(qName.indexOf('}') + 1); - } else { - return ''; - } - } - private handleInterfaceData(data: SelectableInterface[]) { this.interfacesList = data; } @@ -406,28 +426,6 @@ export class WineryArtifactComponent implements OnInit { this.uploadUrl = this.artifactUrl + 'files'; } - private getNamespaceAndLocalNameFromQName(qname: string): { namespace: string; localname: string; } { - const i = qname.indexOf('}'); - return { - namespace: qname.substr(1, i - 1), - localname: qname.substr(i + 1) - }; - } - - private createArtifactTemplateUrl(qname: string): string { - const nameAndNamespace = this.getNamespaceAndLocalNameFromQName(qname); - return '/artifacttemplates/' + encodeURIComponent(encodeURIComponent(nameAndNamespace.namespace)) - + '/' + nameAndNamespace.localname + '/'; - - } - - private createArtifactTypeUrl(qname: string): string { - const nameAndNamespace = this.getNamespaceAndLocalNameFromQName(qname); - return '/artifacttypes/' + encodeURIComponent(encodeURIComponent(nameAndNamespace.namespace)) - + '/' + nameAndNamespace.localname + '/'; - - } - private getTypes(componentType?: SelectData) { const typesUrl = Utils.getTypeOfTemplateOrImplementation(this.toscaType); if (typesUrl && !componentType) { diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/model/parameters.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/model/parameters.ts index 52c988d44f..5a55e047f3 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/model/parameters.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/model/parameters.ts @@ -20,14 +20,6 @@ export type XmlTypes = 'xsd:string' | 'xsd:float' | 'xsd:decimal' | 'xsd:anyURI' // these types are allowed to be used for Parameters and Properties if YAML mode is used export type YamlTypes = 'string' | 'integer' | 'float' | 'boolean' | 'timestamp'; -export class InputParameters { - inputParameter: InterfaceParameter[] = []; -} - -export class OutputParameters { - outputParameter: InterfaceParameter[] = []; -} - export class InterfaceParameter { name: string; diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/model/wineryComponent.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/model/wineryComponent.ts index 3fa053034e..d2c066bbaa 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/model/wineryComponent.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/model/wineryComponent.ts @@ -12,6 +12,7 @@ * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 *******************************************************************************/ import { PlansApiData } from '../instance/serviceTemplates/plans/plansApiData'; +import { TPolicy } from '../../../../topologymodeler/src/app/models/policiesModalData'; export class WineryComponent { documentation: Array = null; @@ -65,18 +66,8 @@ export class WineryTopologyTemplate extends WineryComponent { relationshipTemplates: RelationshipTemplate[]; } -export class Policy { - name?: string; - policyType: string; - policyRef?: string; -} - -export class Policies { - policy: Policy[]; -} - export abstract class WineryTemplateWithPolicies extends WineryTemplate { - policies: Policies = null; + policies: TPolicy[]; } export class NodeTemplate extends WineryTemplateWithPolicies { @@ -88,7 +79,7 @@ export class NodeTemplate extends WineryTemplateWithPolicies { } export class RelationshipTemplate extends WineryTemplateWithPolicies { - relationshipConstraing: Object = null; + relationshipConstraint: Object = null; sourceElement: RelationshipElement; targetElement: RelationshipElement; } diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryAddComponentDataModule/addComponentData.component.html b/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryAddComponentDataModule/addComponentData.component.html index 051daa0f20..ead4a537af 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryAddComponentDataModule/addComponentData.component.html +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryAddComponentDataModule/addComponentData.component.html @@ -109,8 +109,8 @@
- - {{ newComponentFinalName }} + + {{ newComponentFinalName }} diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryFeatureToggleModule/wineryRepository.showOnFeature.direct.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryFeatureToggleModule/wineryRepository.showOnFeature.direct.ts index 6bf97c4af3..f2ba0f7c2f 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryFeatureToggleModule/wineryRepository.showOnFeature.direct.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryFeatureToggleModule/wineryRepository.showOnFeature.direct.ts @@ -27,16 +27,13 @@ export class ShowOnFeatureDirective implements OnInit { ngOnInit() { if (Array.isArray(this.featuresToShow)) { - let found = false; for (const feature of this.featuresToShow) { if (this.configurationService.configuration.features[feature]) { this.viewContainerRef.createEmbeddedView(this.templateRef); - found = true; + return; } } - if (!found) { - this.viewContainerRef.clear(); - } + this.viewContainerRef.clear(); } else if (typeof this.featuresToShow === 'string') { if (this.configurationService.configuration.features[this.featuresToShow]) { this.viewContainerRef.createEmbeddedView(this.templateRef); diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryTargetAllocation/policySelection/policySelection.component.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryTargetAllocation/policySelection/policySelection.component.ts index 6717821a8d..aac1dbce33 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryTargetAllocation/policySelection/policySelection.component.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryTargetAllocation/policySelection/policySelection.component.ts @@ -17,7 +17,7 @@ import { WineryTableColumn } from '../../wineryTableModule/wineryTable.component import { SelectComponent, SelectItem } from 'ng2-select'; import { WineryNotificationService } from '../../wineryNotificationModule/wineryNotification.service'; import { TargetAllocationService } from '../targetAllocation.service'; -import { Policy } from '../../model/wineryComponent'; +import { TPolicy } from '../../../../../topologymodeler/src/app/models/policiesModalData'; @Component({ selector: 'winery-target-allocation-policy-selection-component', @@ -55,7 +55,7 @@ export class PolicySelectionComponent implements OnInit { private policyProperty: string; private operator: string; - private policies: Policy[]; + private policies: TPolicy[]; constructor(private service: TargetAllocationService, private notify: WineryNotificationService) { this.getPolicies(); @@ -121,7 +121,7 @@ export class PolicySelectionComponent implements OnInit { continue; } - for (const policy of nt.policies.policy) { + for (const policy of nt.policies) { const selectItem = new SelectItem(''); selectItem.id = policy.name; selectItem.text = policy.name; @@ -134,6 +134,6 @@ export class PolicySelectionComponent implements OnInit { this.notify.error('No Policy Templates present'); } }, - error => this.notify.error('Couldn\'t load policies')); + () => this.notify.error('Couldn\'t load policies')); } } diff --git a/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryTargetAllocation/targetAllocation.service.ts b/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryTargetAllocation/targetAllocation.service.ts index 758a66fffb..79b49664f8 100644 --- a/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryTargetAllocation/targetAllocation.service.ts +++ b/org.eclipse.winery.frontends/app/tosca-management/src/app/wineryTargetAllocation/targetAllocation.service.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018 Contributors to the Eclipse Foundation + * Copyright (c) 2018-2021 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -17,7 +17,8 @@ import { Observable } from 'rxjs/Observable'; import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http'; import { backendBaseURL } from '../configuration'; import { AllocationRequest } from './request'; -import { NodeTemplate, Policy } from '../model/wineryComponent'; +import { NodeTemplate } from '../model/wineryComponent'; +import { TPolicy } from 'app/topologymodeler/src/app/models/policiesModalData'; @Injectable() export class TargetAllocationService { @@ -43,7 +44,7 @@ export class TargetAllocationService { return this.http.get(url); } - getProperties(policy: Policy): Observable { + getProperties(policy: TPolicy): Observable { const qName = policy.policyRef.slice(1).split('}'); return this.http.get(backendBaseURL + '/policytemplates/' + encodeURIComponent(encodeURIComponent(qName[0])) + '/' + qName[1] + '/properties'); diff --git a/org.eclipse.winery.generators.ia/src/main/java/org/eclipse/winery/generators/ia/Generator.java b/org.eclipse.winery.generators.ia/src/main/java/org/eclipse/winery/generators/ia/Generator.java index 299588fac6..95061522a4 100644 --- a/org.eclipse.winery.generators.ia/src/main/java/org/eclipse/winery/generators/ia/Generator.java +++ b/org.eclipse.winery.generators.ia/src/main/java/org/eclipse/winery/generators/ia/Generator.java @@ -211,7 +211,7 @@ private void generateJavaFile(File javaService) throws IOException { // Generate methods StringBuilder sb = new StringBuilder(); - for (TOperation op : this.tInterface.getOperation()) { + for (TOperation op : this.tInterface.getOperations()) { // Annotations sb.append("\t@WebMethod\n"); sb.append("\t@SOAPBinding\n"); @@ -224,7 +224,7 @@ private void generateJavaFile(File javaService) throws IOException { // Parameter boolean first = true; if (op.getInputParameters() != null) { - for (TParameter parameter : op.getInputParameters().getInputParameter()) { + for (TParameter parameter : op.getInputParameters()) { String parameterName = parameter.getName(); if (first) { @@ -243,7 +243,7 @@ private void generateJavaFile(File javaService) throws IOException { sb.append("\n\t) {\n"); // If there are output parameters we generate the respective HashMap - boolean outputParamsExist = (op.getOutputParameters() != null) && (!op.getOutputParameters().getOutputParameter().isEmpty()); + boolean outputParamsExist = (op.getOutputParameters() != null) && (!op.getOutputParameters().isEmpty()); if (outputParamsExist) { sb.append("\t\t// This HashMap holds the return parameters of this operation.\n"); sb.append("\t\tfinal HashMap returnParameters = new HashMap();\n\n"); @@ -253,7 +253,7 @@ private void generateJavaFile(File javaService) throws IOException { // Generate code to set output parameters if (outputParamsExist) { - for (TParameter outputParam : op.getOutputParameters().getOutputParameter()) { + for (TParameter outputParam : op.getOutputParameters()) { sb.append("\n\n\t\t// Output Parameter '").append(outputParam.getName()).append("' "); if (outputParam.getRequired()) { sb.append("(required)"); diff --git a/org.eclipse.winery.generators.ia/src/test/java/org/eclipse/winery/generators/ia/GeneratorTest.java b/org.eclipse.winery.generators.ia/src/test/java/org/eclipse/winery/generators/ia/GeneratorTest.java index 8706e95cb2..0822441471 100644 --- a/org.eclipse.winery.generators.ia/src/test/java/org/eclipse/winery/generators/ia/GeneratorTest.java +++ b/org.eclipse.winery.generators.ia/src/test/java/org/eclipse/winery/generators/ia/GeneratorTest.java @@ -16,6 +16,8 @@ import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collections; import org.eclipse.winery.model.tosca.TInterface; import org.eclipse.winery.model.tosca.TOperation; @@ -42,67 +44,62 @@ public static void destroy() throws Exception { @Test public void testMultipleOpsWithInOutParams() throws Exception { - TInterface i = new TInterface(); - i.setName("http://www.example.org/interfaces/lifecycle"); - - TOperation op; - TOperation.InputParameters input; - TOperation.OutputParameters output; - TParameter param; - - op = new TOperation(); - op.setName("install"); - i.getOperation().add(op); - - input = new TOperation.InputParameters(); - param = new TParameter(); - param.setName("VMIP"); - param.setType("xs:string"); - input.getInputParameter().add(param); - param = new TParameter(); - param.setName("DBMSUsername"); - param.setType("xs:string"); - input.getInputParameter().add(param); - op.setInputParameters(input); - - output = new TOperation.OutputParameters(); - param = new TParameter(); - param.setName("Output"); - param.setType("xs:string"); - output.getOutputParameter().add(param); - op.setOutputParameters(output); - - op = new TOperation(); - op.setName("uninstall"); - i.getOperation().add(op); - - input = new TOperation.InputParameters(); - param = new TParameter(); - param.setName("SomeLongParameterName"); - param.setType("xs:string"); - input.getInputParameter().add(param); - param = new TParameter(); - param.setName("Port"); - param.setType("xs:string"); - input.getInputParameter().add(param); - op.setInputParameters(input); - - op.setOutputParameters(output); - - Generator gen = new Generator(i, "org.opentosca.ia.test", new URL("http://test.com"), "TestMultipleOpsWithInOutParams", wd.toFile()); + TOperation install = new TOperation.Builder("install") + .addInputParameter( + new TParameter.Builder("VMIP", "xs:string").build() + ) + .addInputParameter( + new TParameter.Builder("DBMSUsername", "xs:string").build() + ) + .addOutputParameter( + new TParameter.Builder("Output", "xs:string").build() + ) + .build(); + + TOperation uninstall = new TOperation.Builder("uninstall") + .addInputParameter( + new TParameter.Builder("SomeLongParameterName", "xs:string").build() + ) + .addInputParameter( + new TParameter.Builder("Port", "xs:string").build() + ) + .addOutputParameter( + new TParameter.Builder("Output", "xs:string").build() + ) + .build(); + + TInterface iFace = new TInterface.Builder( + "http://www.example.org/interfaces/lifecycle", + Arrays.asList( + install, + uninstall + ) + ).build(); + + Generator gen = new Generator(iFace, + "org.opentosca.ia.test", + new URL("http://test.com"), + "TestMultipleOpsWithInOutParams", + wd.toFile() + ); gen.generateProject(); } @Test public void testOneOpNoParams() throws Exception { - TInterface i = new TInterface(); - i.setName("http://www.example.org/interfaces/lifecycle"); - - TOperation op = new TOperation(); - op.setName("install"); - i.getOperation().add(op); - - Generator gen = new Generator(i, "org.opentosca.ia.test", new URL("http://test.com"), "TestOneOpNoParams", wd.toFile()); + TInterface iFace = new TInterface.Builder( + "http://www.example.org/interfaces/lifecycle", + Collections.singletonList( + new TOperation.Builder("install").build() + ) + ).build(); + + Generator gen = new Generator(iFace, + "org.opentosca.ia.test", + new URL("http://test.com"), + "TestOneOpNoParams", + wd.toFile() + ); gen.generateProject(); } } diff --git a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtils.java b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtils.java index 7842fc0cd2..e15b545477 100644 --- a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtils.java +++ b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtils.java @@ -26,15 +26,12 @@ import javax.xml.namespace.QName; +import org.eclipse.winery.common.version.VersionUtils; +import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.model.ids.definitions.NodeTypeId; import org.eclipse.winery.model.ids.definitions.NodeTypeImplementationId; import org.eclipse.winery.model.ids.definitions.RelationshipTypeId; -import org.eclipse.winery.common.version.VersionUtils; -import org.eclipse.winery.common.version.WineryVersion; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; import org.eclipse.winery.model.tosca.TInterface; -import org.eclipse.winery.model.tosca.TInterfaces; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; @@ -53,10 +50,11 @@ import org.eclipse.winery.repository.backend.RepositoryFactory; import org.eclipse.winery.repository.backend.filebased.NamespaceProperties; -import org.eclipse.jdt.annotation.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.eclipse.winery.common.ListUtils.listIsNotNullOrEmpty; + /** * This class exposes utility functions which enhance a given topology. It also provides some semantic utilities as, * e.g., returning the hostedOn relation of a NodeTemplate. @@ -74,11 +72,11 @@ public static TTopologyTemplate determineStatefulComponents(TTopologyTemplate to .filter(nodeTemplate -> { TNodeType type = nodeTypes.get(nodeTemplate.getType()); if (Objects.nonNull(type.getTags())) { - return type.getTags().getTag() + return type.getTags() .stream() .anyMatch( - tag -> "stateful".equals(tag.getName().toLowerCase()) - || "isStateful".toLowerCase().equals(tag.getName().toLowerCase()) + tag -> "stateful".equalsIgnoreCase(tag.getName()) + || "isStateful".equalsIgnoreCase(tag.getName()) ); } @@ -143,8 +141,9 @@ public static TTopologyTemplate cleanFreezableComponents(TTopologyTemplate topol TRelationshipTemplate hostedOnRelationship = getHostedOnRelationship(topology, node); while (Objects.nonNull(hostedOnRelationship)) { TNodeTemplate host = (TNodeTemplate) hostedOnRelationship.getTargetElement().getRef(); - if (ModelUtilities.containsPolicyType(host, OpenToscaBaseTypes.freezableComponentPolicyType)) { - node.getPolicies().getPolicy() + if (node.getPolicies() != null + && ModelUtilities.containsPolicyType(host, OpenToscaBaseTypes.freezableComponentPolicyType)) { + node.getPolicies() .removeIf(policy -> policy.getPolicyType().equals(OpenToscaBaseTypes.freezableComponentPolicyType)); hostedOnRelationship = null; } else { @@ -185,14 +184,20 @@ private static String generateNewGeneratedNamespace(QName qName) { private static void addAllDAsAndIAsToImplementation(TNodeTypeImplementation target, TNodeTypeImplementation source) { if (Objects.nonNull(source.getDeploymentArtifacts())) { - target.getDeploymentArtifacts().getDeploymentArtifact().addAll( - source.getDeploymentArtifacts().getDeploymentArtifact() + if (target.getDeploymentArtifacts() == null) { + target.setDeploymentArtifacts(new ArrayList<>()); + } + target.getDeploymentArtifacts().addAll( + source.getDeploymentArtifacts() ); } if (Objects.nonNull(source.getImplementationArtifacts())) { - target.getImplementationArtifacts().getImplementationArtifact().addAll( - source.getImplementationArtifacts().getImplementationArtifact() + if (target.getImplementationArtifacts() == null) { + target.setImplementationArtifacts(new ArrayList<>()); + } + target.getImplementationArtifacts().addAll( + source.getImplementationArtifacts() ); } } @@ -224,8 +229,8 @@ public static Map> getAvailableFeaturesForTopology(TT // Check requirements featureChildren.forEach((featureType, value) -> { - if (Objects.nonNull(featureType.getRequirementDefinitions())) { - List requirements = featureType.getRequirementDefinitions().getRequirementDefinition().stream() + if (listIsNotNullOrEmpty(featureType.getRequirementDefinitions())) { + List requirements = featureType.getRequirementDefinitions().stream() .filter(req -> req.getRequirementType().equals(OpenToscaBaseTypes.managementFeatureRequirement)) .collect(Collectors.toList()); @@ -235,7 +240,7 @@ public static Map> getAvailableFeaturesForTopology(TT WineryVersion reqVersion = VersionUtils.getVersion(req.getName()); String reqName = VersionUtils.getNameWithoutVersion(req.getName()); - String type = hosts.getTypeAsQName().getLocalPart(); + String type = hosts.getType().getLocalPart(); if (VersionUtils.getNameWithoutVersion(type).equals(reqName)) { return reqVersion.getComponentVersion().isEmpty() || reqVersion.getComponentVersion().equals(VersionUtils.getVersion(type).getComponentVersion()); @@ -283,9 +288,10 @@ public static TTopologyTemplate applyFeaturesForTopology(TTopologyTemplate topol List definedProperties = generatedNodeType.getWinerysPropertiesDefinition() .getPropertyDefinitions(); - final @NonNull LinkedHashMap kvProperties = ModelUtilities.getPropertiesKV(nodeTemplate) == null + LinkedHashMap propertiesKV = ModelUtilities.getPropertiesKV(nodeTemplate); + final LinkedHashMap kvProperties = propertiesKV == null ? new LinkedHashMap<>() - : ModelUtilities.getPropertiesKV(nodeTemplate); + : propertiesKV; if (kvProperties.isEmpty()) { definedProperties.stream().map(PropertyDefinitionKV::getKey) .forEach(k -> kvProperties.put(k, "")); @@ -335,7 +341,7 @@ public static TNodeType createFeatureNodeType(TNodeTemplate nodeTemplate, Map()); } - List baseInterfaces = featureEnrichedNodeType.getInterfaces().getInterface(); + List baseInterfaces = featureEnrichedNodeType.getInterfaces(); // merge impl accordingly - TNodeTypeImplementation generatedImplementation = new TNodeTypeImplementation(); - generatedImplementation.setNodeType(featureEnrichedNodeType.getQName()); - generatedImplementation.setName( + TNodeTypeImplementation generatedImplementation = new TNodeTypeImplementation.Builder( featureEnrichedNodeType.getName() + "_Impl" - + WineryVersion.WINERY_VERSION_SEPARATOR + WineryVersion.WINERY_VERSION_PREFIX + "1" - ); + + WineryVersion.WINERY_VERSION_SEPARATOR + WineryVersion.WINERY_VERSION_PREFIX + "1", + featureEnrichedNodeType.getQName() + ).build(); // ensure that the lists are initialized - generatedImplementation.setImplementationArtifacts(new TImplementationArtifacts()); - generatedImplementation.setDeploymentArtifacts(new TDeploymentArtifacts()); + generatedImplementation.setImplementationArtifacts(new ArrayList<>()); + generatedImplementation.setDeploymentArtifacts(new ArrayList<>()); Collection baseTypeImplementations = repository.getAllElementsReferencingGivenType(NodeTypeImplementationId.class, nodeTemplate.getType()); @@ -402,15 +407,18 @@ public static TNodeType createFeatureNodeType(TNodeTemplate nodeTemplate, Map { - addAllDAsAndIAsToImplementation(generatedImplementation, nodeTypeImplementations.get(id.getQName())); - }); + .forEach(id -> + addAllDAsAndIAsToImplementation( + generatedImplementation, + nodeTypeImplementations.get(id.getQName()) + ) + ); }); // In the case that neither the basic type, nor the feature types define properties, diff --git a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/placement/PlacementUtils.java b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/placement/PlacementUtils.java index b4f8a1cc42..965f30c54c 100644 --- a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/placement/PlacementUtils.java +++ b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/placement/PlacementUtils.java @@ -16,7 +16,6 @@ import java.security.InvalidParameterException; import java.util.ArrayList; -import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -54,7 +53,7 @@ import static org.eclipse.winery.model.adaptation.placement.Constants.TAG_NAME_LOCATION; import static org.eclipse.winery.model.adaptation.placement.Constants.TAG_NAME_PROVIDER; import static org.eclipse.winery.model.tosca.utils.ModelUtilities.QNAME_LOCATION; -import static org.eclipse.winery.repository.targetallocation.util.AllocationUtils.deepcopy; +import static org.eclipse.winery.repository.targetallocation.util.AllocationUtils.deepCopy; /** * This class exposes utility functions which group components of an incomplete topology together based on the data flow @@ -92,7 +91,7 @@ public class PlacementUtils { public static TTopologyTemplate groupAndPlaceComponents(ServiceTemplateId serviceTemplateId, TTopologyTemplate topology) { // input TopologyTemplate to reset if the completion fails - TTopologyTemplate topologyBackup = deepcopy(topology, false); + TTopologyTemplate topologyBackup = deepCopy(topology, false); // initialize the black list for each NodeTemplate of the TopologyTemplate Map> blackList = new HashMap<>(); @@ -102,7 +101,7 @@ public static TTopologyTemplate groupAndPlaceComponents(ServiceTemplateId servic TTopologyTemplate completedTopology = null; while (Objects.isNull(completedTopology)) { - topology = deepcopy(topologyBackup, false); + topology = deepCopy(topologyBackup, false); assignToLocation(topology, blackList); assignToProviders(topology, blackList); completedTopology = completeModel(serviceTemplateId, topology, blackList); @@ -139,7 +138,7 @@ private static TTopologyTemplate completeModel(ServiceTemplateId serviceTemplate placementServiceTemplate.setId(placementServiceTemplate.getName()); // resolve open requirements until the topology is completed - while (!splitting.getOpenRequirements(topology).isEmpty()) { + while (topology != null && !splitting.getOpenRequirements(topology).isEmpty()) { // add a target label to the topology based on the provider and location assignment assignNodesToTargetLabels(topology); placementServiceTemplate.setTopologyTemplate(topology); @@ -525,12 +524,9 @@ private static boolean isDataSource(TTopologyTemplate topology, TNodeTemplate no } private static > SortedSet> entriesSortedByValues(Map map) { - SortedSet> sortedEntries = new TreeSet<>(new Comparator>() { - @Override - public int compare(Map.Entry e1, Map.Entry e2) { - int res = e2.getValue().compareTo(e1.getValue()); - return res != 0 ? res : 1; - } + SortedSet> sortedEntries = new TreeSet<>((e1, e2) -> { + int res = e2.getValue().compareTo(e1.getValue()); + return res != 0 ? res : 1; } ); sortedEntries.addAll(map.entrySet()); @@ -563,7 +559,7 @@ private static List getServiceTemplatesWithTags() { */ private static boolean isUnsuitedProvider(TServiceTemplate template, TNodeTemplate node, String location, Map> blackList) { - List tags = template.getTags().getTag(); + List tags = template.getTags(); TTag providerTag = getTag(tags, TAG_NAME_PROVIDER); TTag locationTag = getTag(tags, TAG_NAME_LOCATION); @@ -612,15 +608,15 @@ private static List getViableProviders(TNodeTemplate node, String locati // the provider has to support all defined policies if (Objects.nonNull(node.getPolicies())) { - for (TPolicy policy : node.getPolicies().getPolicy()) { + for (TPolicy policy : node.getPolicies()) { // check the tags of the provider for the policy name - if (Objects.isNull(getTag(template.getTags().getTag(), policy.getPolicyType().toString()))) { + if (Objects.isNull(getTag(template.getTags(), policy.getPolicyType().toString()))) { continue template; } } } - providers.add(getTag(template.getTags().getTag(), TAG_NAME_PROVIDER).getValue()); + providers.add(getTag(template.getTags(), TAG_NAME_PROVIDER).getValue()); } return providers; } diff --git a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/Substitution.java b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/Substitution.java index 91efaf5397..f759d5decf 100644 --- a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/Substitution.java +++ b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/Substitution.java @@ -93,7 +93,7 @@ private void updateTopology(TTopologyTemplate topologyTemplate, Map { TServiceTemplate serviceTemplate = this.nodeTypeSubstitutableWithServiceTemplate.get(tNodeTemplate.getType()); if (Objects.nonNull(serviceTemplate)) { - // We need to replace the Node Template with the serviceTemplate but we cannot do that here + // We need to replace the Node Template with the serviceTemplate, but we cannot do that here // -> save it for later processing nodeTemplateToBeSubstitutedWithTopology.put(tNodeTemplate, serviceTemplate); } else { @@ -145,47 +145,47 @@ private void replaceNodeTemplateWithServiceTemplate(TTopologyTemplate topologyTe BackendUtils.mergeTopologyTemplateAinTopologyTemplateB(topologyToImport, topologyTemplate); // 3. update the references accordingly - if (ingoingRelations.size() > 0) { + if (topologyToImport != null && ingoingRelations.size() > 0) { if (Objects.nonNull(stSubstitutingTheNodeTemplate.getBoundaryDefinitions().getCapabilities())) { - List capabilities = stSubstitutingTheNodeTemplate.getBoundaryDefinitions().getCapabilities().getCapability(); - ingoingRelations.forEach(ingoing -> { - capabilities.forEach(tCapabilityRef -> { + List capabilities = stSubstitutingTheNodeTemplate.getBoundaryDefinitions().getCapabilities(); + ingoingRelations.forEach(ingoing -> + capabilities.forEach(tCapabilityRef -> topologyToImport.getNodeTemplates().stream() + .filter(tNodeTemplate -> Objects.nonNull(tNodeTemplate.getCapabilities())) .filter(tNodeTemplate -> // find the node template which defines the capability in the boundaries - Objects.nonNull(tNodeTemplate.getCapabilities()) && tNodeTemplate.getCapabilities().getCapability() + tNodeTemplate.getCapabilities() .stream() .anyMatch(tCapability -> tCapability.equals(tCapabilityRef.getRef())) ) .findFirst() - .ifPresent(tNodeTemplate -> { - ingoing.getTargetElement().setRef(tNodeTemplate); - }); - }); - }); + .ifPresent(tNodeTemplate -> + ingoing.getTargetElement().setRef(tNodeTemplate) + ) + ) + ); } else { throw new UnsupportedOperationException("Mapping without Reqs/Caps is currently not supported"); } } - if (outgoingRelations.size() > 0) { + if (topologyToImport != null && outgoingRelations.size() > 0) { if (Objects.nonNull(stSubstitutingTheNodeTemplate.getBoundaryDefinitions().getRequirements())) { - List requirements = stSubstitutingTheNodeTemplate.getBoundaryDefinitions().getRequirements().getRequirement(); - outgoingRelations.forEach(outgoing -> { - requirements.forEach(requirementRef -> { + List requirements = stSubstitutingTheNodeTemplate.getBoundaryDefinitions().getRequirements(); + outgoingRelations.forEach(outgoing -> + requirements.forEach(requirementRef -> topologyToImport.getNodeTemplates().stream() .filter(tNodeTemplate -> Objects.nonNull(tNodeTemplate.getRequirements()) && - tNodeTemplate.getRequirements().getRequirement() + tNodeTemplate.getRequirements() .stream() .anyMatch(tRequirement -> tRequirement.equals(requirementRef.getRef())) ) .findFirst() - .ifPresent(tNodeTemplate -> { - outgoing.getSourceElement().setRef(tNodeTemplate); - }); - }); - }); + .ifPresent(tNodeTemplate -> + outgoing.getSourceElement().setRef(tNodeTemplate) + )) + ); } else { throw new UnsupportedOperationException("Mapping without Reqs/Caps is currently not supported"); } diff --git a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/SubstitutionUtils.java b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/SubstitutionUtils.java index 545d7cf037..129eb82121 100644 --- a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/SubstitutionUtils.java +++ b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/SubstitutionUtils.java @@ -96,7 +96,7 @@ public static boolean containsPatterns(List topologyNodes, Map namespaceManager.isPatternNamespace(tPolicy.getPolicyType().getNamespaceURI())); } diff --git a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/BehaviorPatternDetection.java b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/BehaviorPatternDetection.java index 300182598f..7ef5df9290 100644 --- a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/BehaviorPatternDetection.java +++ b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/BehaviorPatternDetection.java @@ -15,6 +15,7 @@ package org.eclipse.winery.model.adaptation.substitution.patterndetection; import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.eclipse.winery.model.adaptation.substitution.refinement.RefinementCandidate; @@ -24,7 +25,6 @@ import org.eclipse.winery.model.tosca.HasPolicies; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.extensions.OTPatternRefinementModel; @@ -104,21 +104,21 @@ private void addCompatibleBehaviorPatterns(TEntityTemplate refinementElement, Re ToscaEntity detectorEntity = refinement.getDetectorGraph().getVertexOrEdge(detectorElement.getId()).get(); TEntityTemplate stayingElement = getEntityCorrespondence(detectorEntity, refinement.getGraphMapping()); - TPolicies refinementPolicies = ((HasPolicies) refinementElement).getPolicies(); - TPolicies stayingPolicies = ((HasPolicies) stayingElement).getPolicies(); + List refinementPolicies = ((HasPolicies) refinementElement).getPolicies(); + List stayingPolicies = ((HasPolicies) stayingElement).getPolicies(); if (refinementPolicies != null) { if (stayingPolicies != null) { // avoid duplicates - refinementPolicies.getPolicy().forEach(refinementPolicy -> { - boolean policyExists = stayingPolicies.getPolicy().stream() + refinementPolicies.forEach(refinementPolicy -> { + boolean policyExists = stayingPolicies.stream() .anyMatch(stayingPolicy -> stayingPolicy.getPolicyType().equals(refinementPolicy.getPolicyType())); if (!policyExists) { - stayingPolicies.getPolicy().add(refinementPolicy); + stayingPolicies.add(refinementPolicy); } }); } else { ((HasPolicies) stayingElement) - .setPolicies(new TPolicies(new ArrayList<>(refinementPolicies.getPolicy()))); + .setPolicies(new ArrayList<>(refinementPolicies)); } removeIncompatibleBehaviorPatterns(refinementElement, stayingElement, refinement); } @@ -127,7 +127,7 @@ private void addCompatibleBehaviorPatterns(TEntityTemplate refinementElement, Re private void removeIncompatibleBehaviorPatterns(TEntityTemplate refinementElement, TEntityTemplate addedElement, RefinementCandidate refinement) { OTPatternRefinementModel prm = (OTPatternRefinementModel) refinement.getRefinementModel(); - TPolicies addedElementPolicies = ((HasPolicies) addedElement).getPolicies(); + List addedElementPolicies = ((HasPolicies) addedElement).getPolicies(); prm.getBehaviorPatternMappings().stream() .filter(bpm -> bpm.getRefinementElement().getId().equals(refinementElement.getId())) @@ -147,10 +147,10 @@ private void removeIncompatibleBehaviorPatterns(TEntityTemplate refinementElemen && (!detectorValue.equals("*") || (candidateValue == null || candidateValue.isEmpty())); if (propsNotCompatible) { - TPolicy behaviorPattern = ((HasPolicies) refinementElement).getPolicies().getPolicy().stream() + TPolicy behaviorPattern = ((HasPolicies) refinementElement).getPolicies().stream() .filter(policy -> bpm.getBehaviorPattern().equals(policy.getName())) .findFirst().get(); - addedElementPolicies.getPolicy() + addedElementPolicies .removeIf(policy -> policy.getPolicyType().equals(behaviorPattern.getPolicyType())); } } diff --git a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/ComponentPatternDetection.java b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/ComponentPatternDetection.java index 51bda8809d..d241e5b2c1 100644 --- a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/ComponentPatternDetection.java +++ b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/ComponentPatternDetection.java @@ -17,6 +17,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -132,7 +133,7 @@ private void addRelationMappings(ComponentPatternCandidate componentPatternCandi OTPatternRefinementModel otherPrm = componentPatternCandidate.getOtherPrm(); TNodeTemplate otherDetectorElement = componentPatternCandidate.getOtherDetectorElement(); - // Redirect and add Relation Mappings of pdrm_x + // Redirect and add Relation Mappings of PDRM_x if (otherPrm.getRelationMappings() != null) { otherPrm.getRelationMappings().stream() .filter(mapping -> mapping.getDetectorElement().getId().equals(otherDetectorElement.getId()) @@ -146,7 +147,7 @@ private void addRelationMappings(ComponentPatternCandidate componentPatternCandi } private void removeNotApplicable(OTPatternRefinementModel adaptedPrm) { - // Remove Property Mappings of pdrm + // Remove Property Mappings of PDRM if (adaptedPrm.getAttributeMappings() != null) { adaptedPrm.getAttributeMappings().clear(); } @@ -154,15 +155,15 @@ private void removeNotApplicable(OTPatternRefinementModel adaptedPrm) { // Remove all Behavior Patterns not in the Executable Structure Set detectorPolicies = adaptedPrm.getDetector().getNodeTemplateOrRelationshipTemplate().stream() .map(HasPolicies.class::cast) - .filter(hasPolicies -> hasPolicies.getPolicies() != null) - .map(hasPolicies -> hasPolicies.getPolicies().getPolicy()) + .map(HasPolicies::getPolicies) + .filter(Objects::nonNull) .flatMap(List::stream) .map(TPolicy::getPolicyType) .collect(Collectors.toSet()); adaptedPrm.getRefinementStructure().getNodeTemplateOrRelationshipTemplate().stream() .map(HasPolicies.class::cast) .filter(hasPolicies -> hasPolicies.getPolicies() != null) - .forEach(hasPolicies -> hasPolicies.getPolicies().getPolicy() + .forEach(hasPolicies -> hasPolicies.getPolicies() .removeIf(policy -> !detectorPolicies.contains(policy.getPolicyType()))); } } diff --git a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinement.java b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinement.java index 268018c2c3..76253b79e9 100644 --- a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinement.java +++ b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinement.java @@ -14,6 +14,7 @@ package org.eclipse.winery.model.adaptation.substitution.refinement.topologyrefinement; +import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -35,7 +36,7 @@ import org.eclipse.winery.model.ids.extensions.TopologyFragmentRefinementModelId; import org.eclipse.winery.model.tosca.HasId; import org.eclipse.winery.model.tosca.TArtifactType; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; +import org.eclipse.winery.model.tosca.TDeploymentArtifact; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TRelationshipTemplate; @@ -74,6 +75,7 @@ public TopologyFragmentRefinement(RefinementChooser refinementChooser) { this(refinementChooser, TopologyFragmentRefinementModelId.class, "refined"); } + @SuppressWarnings("unused") public TopologyFragmentRefinement() { this(new DefaultRefinementChooser()); } @@ -150,10 +152,13 @@ public Map applyRefinement(RefinementCandidate refinement, TTopo if (!getStayMappingsOfCurrentElement(prm, vertex.getTemplate()).findFirst().isPresent()) { topology.getNodeTemplateOrRelationshipTemplate().remove(matchingNode); } else if (shouldRemoveBehaviorPatterns(vertex.getTemplate(), matchingNode)) { - vertex.getTemplate().getPolicies().getPolicy().forEach(detectorPolicy -> - matchingNode.getPolicies().getPolicy() - .removeIf(matchingPolicy -> matchingPolicy.getPolicyType().equals(detectorPolicy.getPolicyType())) - ); + if (vertex.getTemplate().getPolicies() != null && matchingNode.getPolicies() != null) + vertex.getTemplate().getPolicies().forEach(detectorPolicy -> + matchingNode.getPolicies() + .removeIf(matchingPolicy -> + matchingPolicy.getPolicyType().equals(detectorPolicy.getPolicyType()) + ) + ); } }); refinement.getDetectorGraph().edgeSet() @@ -179,9 +184,10 @@ private boolean applyDeploymentArtifactMapping(RefinementCandidate refinement, T List deploymentArtifactMappings = ((OTTopologyFragmentRefinementModel) refinement.getRefinementModel()).getDeploymentArtifactMappings(); return matchingNode.getDeploymentArtifacts() == null - || matchingNode.getDeploymentArtifacts().getDeploymentArtifact().isEmpty() + || matchingNode.getDeploymentArtifacts().isEmpty() || ( - deploymentArtifactMappings != null && matchingNode.getDeploymentArtifacts().getDeploymentArtifact().stream() + deploymentArtifactMappings != null && matchingNode.getDeploymentArtifacts().stream() + .filter(deploymentArtifact -> deploymentArtifact.getArtifactType() != null) .allMatch(deploymentArtifact -> deploymentArtifactMappings.stream() .filter(mapping -> mapping.getDetectorElement().getId().equals(detectorNode.getId())) @@ -190,14 +196,17 @@ private boolean applyDeploymentArtifactMapping(RefinementCandidate refinement, T if (idMapping != null) { TNodeTemplate addedNode = topology.getNodeTemplate(idMapping.get(mapping.getRefinementElement().getId())); if (addedNode != null) { - TDeploymentArtifacts existingDeploymentArtifactsOfRefinement = addedNode.getDeploymentArtifacts(); - if (existingDeploymentArtifactsOfRefinement == null) { - existingDeploymentArtifactsOfRefinement = new TDeploymentArtifacts(); - addedNode.setDeploymentArtifacts(existingDeploymentArtifactsOfRefinement); - } else if (existingDeploymentArtifactsOfRefinement.getDeploymentArtifact(deploymentArtifact.getName()) != null) { + List existingDAs = addedNode.getDeploymentArtifacts(); + if (existingDAs == null) { + existingDAs = new ArrayList<>(); + addedNode.setDeploymentArtifacts(existingDAs); + } else if ( + existingDAs.stream() + .anyMatch(da -> da.getName().equals(deploymentArtifact.getName())) + ) { deploymentArtifact.setName(deploymentArtifact.getName() + UUID.randomUUID()); } - existingDeploymentArtifactsOfRefinement.getDeploymentArtifact().add(deploymentArtifact); + existingDAs.add(deploymentArtifact); } else { LOGGER.error("Error while adding Deployment Artifacts! Node was not added to the topology!"); } @@ -307,7 +316,7 @@ public Stream getExternalRelations(TNodeTemplate matching matchingNode.getId().equals(relationship.getTargetElement().getRef().getId()) ).filter(relationship -> { // ignore all relationships which are part of the sub-graph - // \nexists sgm_y \in sgms : \pi_1(sgm_y) = r_j + // !\exists sgm_y \in SGMs : \pi_1(sgm_y) = r_j return candidate.getDetectorGraph().edgeSet() .stream() .noneMatch(toscaEdge -> { diff --git a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtilsTestWithGitBackedRepository.java b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtilsTestWithGitBackedRepository.java index 839fe788d3..ed51979e1b 100644 --- a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtilsTestWithGitBackedRepository.java +++ b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/enhance/EnhancementUtilsTestWithGitBackedRepository.java @@ -61,7 +61,7 @@ public void determineStatefulComponentsTest() throws Exception { TNodeTemplate statefulComponent = topologyTemplate.getNodeTemplate("statefulComponent"); assertNotNull(statefulComponent); - TPolicy stateful = statefulComponent.getPolicies().getPolicy().get(0); + TPolicy stateful = statefulComponent.getPolicies().get(0); assertEquals(OpenToscaBaseTypes.statefulComponentPolicyType, stateful.getPolicyType()); TNodeTemplate stateless = topologyTemplate.getNodeTemplate("stateless"); @@ -90,17 +90,17 @@ public void determineFreezableComponents() throws Exception { assertNull(topologyTemplate.getNodeTemplate("VM_2").getPolicies()); List statefulFreezableComponentPolicies = topologyTemplate.getNodeTemplate("statefulFreezableComponent") - .getPolicies().getPolicy(); + .getPolicies(); assertEquals(2, statefulFreezableComponentPolicies.size()); assertTrue(statefulFreezableComponentPolicies.contains(expectedPolicy)); List statefulNotFreezableComponentPolicies = topologyTemplate.getNodeTemplate("statefulNotFreezableComponent") - .getPolicies().getPolicy(); + .getPolicies(); assertEquals(1, statefulNotFreezableComponentPolicies.size()); assertFalse(statefulNotFreezableComponentPolicies.contains(expectedPolicy)); List statelessFreezableComponentPolicies = topologyTemplate.getNodeTemplate("statelessFreezableComponent") - .getPolicies().getPolicy(); + .getPolicies(); assertEquals(1, statelessFreezableComponentPolicies.size()); assertTrue(statelessFreezableComponentPolicies.contains(expectedPolicy)); @@ -123,14 +123,14 @@ public void cleanFreezableComponents() throws Exception { freezablePolicy.setName("freezable"); TTopologyTemplate topologyTemplate = EnhancementUtils.cleanFreezableComponents(element.getTopologyTemplate()); - assertTrue(topologyTemplate.getNodeTemplate("statefulFreezableComponent").getPolicies().getPolicy().contains(freezablePolicy)); + assertTrue(topologyTemplate.getNodeTemplate("statefulFreezableComponent").getPolicies().contains(freezablePolicy)); - assertFalse(topologyTemplate.getNodeTemplate("statefulNotFreezableComponent").getPolicies().getPolicy().contains(freezablePolicy)); - assertFalse(topologyTemplate.getNodeTemplate("AbstractNodeTypeWithProperties_1-w1-wip1").getPolicies().getPolicy().contains(freezablePolicy)); - assertTrue(topologyTemplate.getNodeTemplate("statelessFreezableComponent").getPolicies().getPolicy().contains(freezablePolicy)); + assertFalse(topologyTemplate.getNodeTemplate("statefulNotFreezableComponent").getPolicies().contains(freezablePolicy)); + assertFalse(topologyTemplate.getNodeTemplate("AbstractNodeTypeWithProperties_1-w1-wip1").getPolicies().contains(freezablePolicy)); + assertTrue(topologyTemplate.getNodeTemplate("statelessFreezableComponent").getPolicies().contains(freezablePolicy)); - assertFalse(topologyTemplate.getNodeTemplate("statefulFreezableImplicitlyProvisioned").getPolicies().getPolicy().contains(freezablePolicy)); - assertTrue(topologyTemplate.getNodeTemplate("VM_3").getPolicies().getPolicy().contains(freezablePolicy)); + assertFalse(topologyTemplate.getNodeTemplate("statefulFreezableImplicitlyProvisioned").getPolicies().contains(freezablePolicy)); + assertTrue(topologyTemplate.getNodeTemplate("VM_3").getPolicies().contains(freezablePolicy)); } @Test @@ -234,7 +234,7 @@ void mergeFeatureNodeTypeUbuntu() throws Exception { assertNotNull(generatedUbuntuImpl); assertNotNull(generatedUbuntuImpl.getImplementationArtifacts()); - assertEquals(3, generatedUbuntuImpl.getImplementationArtifacts().getImplementationArtifact().size()); + assertEquals(3, generatedUbuntuImpl.getImplementationArtifacts() .size()); } @Test diff --git a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/BehaviorPatternDetectionTest.java b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/BehaviorPatternDetectionTest.java index ba0e9973a9..de3ce99097 100644 --- a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/BehaviorPatternDetectionTest.java +++ b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/BehaviorPatternDetectionTest.java @@ -27,7 +27,6 @@ import org.eclipse.winery.model.adaptation.substitution.refinement.DefaultRefinementChooser; import org.eclipse.winery.model.adaptation.substitution.refinement.RefinementCandidate; import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.extensions.OTBehaviorPatternMapping; @@ -62,7 +61,7 @@ public void addCompatibleBehaviorPatterns() { behaviorPatterns.add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}oneProp")).setName("oneProp"))); TNodeTemplate detectorElement = new TNodeTemplate( new TNodeTemplate.Builder("detectorElement", QName.valueOf("{ns}patternType")) - .setPolicies(new TPolicies(behaviorPatterns)) + .setPolicies(behaviorPatterns) .setX("1") .setY("1") ); @@ -79,7 +78,7 @@ public void addCompatibleBehaviorPatterns() { stayingPolicies.add(new TPolicy(new TPolicy.Builder(QName.valueOf("{ns}normalPolicy")).setName("normalPolicy"))); TNodeTemplate stayingElement = new TNodeTemplate( new TNodeTemplate.Builder("stayingElement", QName.valueOf("{ns}concreteType")) - .setPolicies(new TPolicies(stayingPolicies)) + .setPolicies(stayingPolicies) .setX("1") .setY("1") ); @@ -112,7 +111,7 @@ public void addCompatibleBehaviorPatterns() { .setBehaviorPatternMappings(behaviorPatternMappings) ); - // needs to be swapped manually as only prms retrieved from repo are swapped automatically + // needs to be swapped manually as only PRMs retrieved from repo are swapped automatically PatternDetectionUtils.swapDetectorWithRefinement(prm); TTopologyTemplate topology = new TTopologyTemplate(); topology.addNodeTemplate(stayingElement); @@ -129,7 +128,7 @@ public void addCompatibleBehaviorPatterns() { behaviorPatternDetection.applyRefinement(refinementCandidate, topology); assertEquals(topology.getNodeTemplateOrRelationshipTemplate().size(), 1); assertEquals(topology.getNodeTemplates().get(0).getId(), "stayingElement"); - List policies = topology.getNodeTemplates().get(0).getPolicies().getPolicy(); + List policies = topology.getNodeTemplates().get(0).getPolicies(); assertEquals(policies.size(), 1); assertEquals(policies.get(0).getName(), "normalPolicy"); @@ -140,7 +139,7 @@ public void addCompatibleBehaviorPatterns() { behaviorPatternDetection.applyRefinement(refinementCandidate, topology); assertEquals(topology.getNodeTemplateOrRelationshipTemplate().size(), 1); assertEquals(topology.getNodeTemplates().get(0).getId(), "stayingElement"); - policies = topology.getNodeTemplates().get(0).getPolicies().getPolicy(); + policies = topology.getNodeTemplates().get(0).getPolicies(); assertEquals(policies.size(), 2); assertTrue(policies.stream().anyMatch(policy -> policy.getName().equals("normalPolicy"))); assertTrue(policies.stream().anyMatch(policy -> policy.getName().equals("oneProp"))); @@ -148,10 +147,10 @@ public void addCompatibleBehaviorPatterns() { @Test public void removeIncompatibleBehaviorPatterns() { - TPolicies behaviorPatterns = new TPolicies(new ArrayList<>()); - behaviorPatterns.getPolicy().add(new TPolicy(new TPolicy.Builder(QName.valueOf("noProp")).setName("noProp"))); - behaviorPatterns.getPolicy().add(new TPolicy(new TPolicy.Builder(QName.valueOf("oneProp")).setName("oneProp"))); - behaviorPatterns.getPolicy().add(new TPolicy(new TPolicy.Builder(QName.valueOf("multiProps")).setName("multiProps"))); + List behaviorPatterns = new ArrayList<>(); + behaviorPatterns.add(new TPolicy(new TPolicy.Builder(QName.valueOf("noProp")).setName("noProp"))); + behaviorPatterns.add(new TPolicy(new TPolicy.Builder(QName.valueOf("oneProp")).setName("oneProp"))); + behaviorPatterns.add(new TPolicy(new TPolicy.Builder(QName.valueOf("multiProps")).setName("multiProps"))); TNodeTemplate detectorElement = new TNodeTemplate( new TNodeTemplate.Builder("detectorElement", QName.valueOf("{ns}patternType")) .setPolicies(behaviorPatterns) @@ -232,7 +231,7 @@ public void removeIncompatibleBehaviorPatterns() { .setBehaviorPatternMappings(behaviorPatternMappings) ); - // needs to be swapped manually as only prms retrieved from repo are swapped automatically + // needs to be swapped manually as only PRMs retrieved from repo are swapped automatically PatternDetectionUtils.swapDetectorWithRefinement(prm); TTopologyTemplate topology = new TTopologyTemplate(); topology.addNodeTemplate(candidateElement); @@ -248,7 +247,7 @@ public void removeIncompatibleBehaviorPatterns() { BehaviorPatternDetection behaviorPatternDetection = new BehaviorPatternDetection(new DefaultRefinementChooser()); behaviorPatternDetection.applyRefinement(refinementCandidate, topology); assertEquals(topology.getNodeTemplateOrRelationshipTemplate().size(), 1); - List policies = topology.getNodeTemplates().get(0).getPolicies().getPolicy(); + List policies = topology.getNodeTemplates().get(0).getPolicies(); assertEquals(policies.size(), 1); assertEquals(policies.get(0).getName(), "noProp"); @@ -258,7 +257,7 @@ public void removeIncompatibleBehaviorPatterns() { topology.addNodeTemplate(candidateElement); behaviorPatternDetection.applyRefinement(refinementCandidate, topology); assertEquals(topology.getNodeTemplateOrRelationshipTemplate().size(), 1); - policies = topology.getNodeTemplates().get(0).getPolicies().getPolicy(); + policies = topology.getNodeTemplates().get(0).getPolicies(); assertEquals(policies.size(), 2); assertTrue(policies.stream().anyMatch(policy -> policy.getName().equals("noProp"))); assertTrue(policies.stream().anyMatch(policy -> policy.getName().equals("oneProp"))); @@ -269,7 +268,7 @@ public void removeIncompatibleBehaviorPatterns() { topology.addNodeTemplate(candidateElement); behaviorPatternDetection.applyRefinement(refinementCandidate, topology); assertEquals(topology.getNodeTemplateOrRelationshipTemplate().size(), 1); - policies = topology.getNodeTemplates().get(0).getPolicies().getPolicy(); + policies = topology.getNodeTemplates().get(0).getPolicies(); assertEquals(policies.size(), 2); assertTrue(policies.stream().anyMatch(policy -> policy.getName().equals("noProp"))); assertTrue(policies.stream().anyMatch(policy -> policy.getName().equals("oneProp"))); @@ -280,7 +279,7 @@ public void removeIncompatibleBehaviorPatterns() { topology.addNodeTemplate(candidateElement); behaviorPatternDetection.applyRefinement(refinementCandidate, topology); assertEquals(topology.getNodeTemplateOrRelationshipTemplate().size(), 1); - policies = topology.getNodeTemplates().get(0).getPolicies().getPolicy(); + policies = topology.getNodeTemplates().get(0).getPolicies(); assertEquals(policies.size(), 2); assertTrue(policies.stream().anyMatch(policy -> policy.getName().equals("noProp"))); assertTrue(policies.stream().anyMatch(policy -> policy.getName().equals("oneProp"))); @@ -291,7 +290,7 @@ public void removeIncompatibleBehaviorPatterns() { topology.addNodeTemplate(candidateElement); behaviorPatternDetection.applyRefinement(refinementCandidate, topology); assertEquals(topology.getNodeTemplateOrRelationshipTemplate().size(), 1); - policies = topology.getNodeTemplates().get(0).getPolicies().getPolicy(); + policies = topology.getNodeTemplates().get(0).getPolicies(); assertEquals(policies.size(), 3); assertTrue(policies.stream().anyMatch(policy -> policy.getName().equals("noProp"))); assertTrue(policies.stream().anyMatch(policy -> policy.getName().equals("oneProp"))); diff --git a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/ComponentPatternDetectionTest.java b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/ComponentPatternDetectionTest.java index 6bd68f44e8..ad54c85600 100644 --- a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/ComponentPatternDetectionTest.java +++ b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/patterndetection/ComponentPatternDetectionTest.java @@ -29,7 +29,6 @@ import org.eclipse.winery.model.adaptation.substitution.refinement.DefaultRefinementChooser; import org.eclipse.winery.model.tosca.HasPolicies; import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TRelationshipTemplate; import org.eclipse.winery.model.tosca.TTopologyTemplate; @@ -71,14 +70,14 @@ class ComponentPatternDetectionTest { */ @BeforeEach public void setUp() { - // needs to be swapped manually as only prms retrieved from repo are swapped automatically + // needs to be swapped manually as only PRMs retrieved from repo are swapped automatically prm1 = PatternDetectionUtils.swapDetectorWithRefinement(prm1()); prm2 = PatternDetectionUtils.swapDetectorWithRefinement(prm2()); topology = topology(); } - private boolean isCompatible(OTPatternRefinementModel prm, List prms) { - ToscaComponentPatternMatcher matcher = new ToscaComponentPatternMatcher(prm, null, prms, new HashMap<>()); + private boolean isCompatible(OTPatternRefinementModel prm, List refinementModels) { + ToscaComponentPatternMatcher matcher = new ToscaComponentPatternMatcher(prm, null, refinementModels, new HashMap<>()); ToscaIsomorphismMatcher isomorphismMatcher = new ToscaIsomorphismMatcher(); ToscaGraph detectorGraph = ToscaTransformer.createTOSCAGraph(prm.getDetector()); ToscaGraph topologyGraph = ToscaTransformer.createTOSCAGraph(topology); @@ -133,18 +132,24 @@ public void refineTopology() { // redirected relations TRelationshipTemplate processorToDb = topology.getRelationshipTemplate("processor-db"); + assertNotNull(processorToDb); assertEquals(processorToDb.getSourceElement().getRef().getId(), "processor"); assertEquals(processorToDb.getTargetElement().getRef().getId(), "relationalDb-d2"); TRelationshipTemplate webserverToVm = topology.getRelationshipTemplate("webserver-vm"); + assertNotNull(webserverToVm); assertEquals(webserverToVm.getSourceElement().getRef().getId(), "webserver"); assertEquals(webserverToVm.getTargetElement().getRef().getId(), "privateCloud-d2"); // attributes should not have been mapped TNodeTemplate relationalDb = topology.getNodeTemplate("relationalDb-d2"); + assertNotNull(relationalDb); LinkedHashMap relationDbProps = ModelUtilities.getPropertiesKV(relationalDb); + assertNotNull(relationDbProps); assertTrue(relationDbProps.isEmpty()); TNodeTemplate privateCloud = topology.getNodeTemplate("privateCloud-d2"); + assertNotNull(privateCloud); LinkedHashMap privateCloudProps = ModelUtilities.getPropertiesKV(privateCloud); + assertNotNull(privateCloudProps); assertTrue(privateCloudProps.isEmpty()); } @@ -153,19 +158,19 @@ public void refineTopologyWithBehaviorPatterns() { TPolicy behaviorPattern1 = new TPolicy(new TPolicy.Builder(QName.valueOf("behaviorPattern1")).setName("behaviorPattern1")); TPolicy behaviorPattern2 = new TPolicy(new TPolicy.Builder(QName.valueOf("behaviorPattern2")).setName("behaviorPattern2")); - TPolicies topologyPolicies = new TPolicies(new ArrayList<>()); - topologyPolicies.getPolicy().add(behaviorPattern1); + List topologyPolicies = new ArrayList<>(); + topologyPolicies.add(behaviorPattern1); ((HasPolicies) topology.getNodeTemplateOrRelationshipTemplate("database")) .setPolicies(topologyPolicies); - TPolicies detectorPolicies = new TPolicies(new ArrayList<>()); - detectorPolicies.getPolicy().add(behaviorPattern1); + List detectorPolicies = new ArrayList<>(); + detectorPolicies.add(behaviorPattern1); ((HasPolicies) prm2.getDetector().getNodeTemplateOrRelationshipTemplate("database-rs2")) .setPolicies(detectorPolicies); - TPolicies refinementPolicies = new TPolicies(new ArrayList<>()); - refinementPolicies.getPolicy().add(behaviorPattern1); - refinementPolicies.getPolicy().add(behaviorPattern2); + List refinementPolicies = new ArrayList<>(); + refinementPolicies.add(behaviorPattern1); + refinementPolicies.add(behaviorPattern2); ((HasPolicies) prm2.getRefinementStructure().getNodeTemplateOrRelationshipTemplate("relationalDb-d2")) .setPolicies(refinementPolicies); @@ -177,8 +182,8 @@ public void refineTopologyWithBehaviorPatterns() { // behaviorPattern2 must have been removed as it cannot be guaranteed to be implemented HasPolicies db = ((HasPolicies) topology.getNodeTemplateOrRelationshipTemplate("relationalDb-d2")); - assertEquals(db.getPolicies().getPolicy().size(), 1); - assertTrue(db.getPolicies().getPolicy().contains(behaviorPattern1)); + assertEquals(db.getPolicies().size(), 1); + assertTrue(db.getPolicies().contains(behaviorPattern1)); } @Test @@ -193,7 +198,7 @@ public void testRemoveBehaviorPatterns() { List detectorPolicies = new ArrayList<>(); detectorPolicies.add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}one")).setName("one"))); detectorPolicies.add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}two")).setName("two"))); - detectorElement.setPolicies(new TPolicies(detectorPolicies)); + detectorElement.setPolicies(detectorPolicies); TTopologyTemplate detector = new TTopologyTemplate(new TTopologyTemplate.Builder() .addNodeTemplates(Arrays.asList(detectorElement, detectorElement2))); // endregion @@ -206,7 +211,7 @@ public void testRemoveBehaviorPatterns() { ); List refinementPolicies = new ArrayList<>(); refinementPolicies.add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}one")).setName("one"))); - refinementElement.setPolicies(new TPolicies(refinementPolicies)); + refinementElement.setPolicies(refinementPolicies); TTopologyTemplate refinement = new TTopologyTemplate(new TTopologyTemplate.Builder() .addNodeTemplates(Arrays.asList(refinementElement, refinementElement2))); // endregion @@ -226,7 +231,7 @@ public void testRemoveBehaviorPatterns() { TNodeTemplate nodeTemplate2 = new TNodeTemplate(new TNodeTemplate.Builder("nodeTemplate2", QName.valueOf("{ns}type2")) .setX("1").setY("1") ); - nodeTemplate.setPolicies(new TPolicies(new ArrayList<>(refinementPolicies))); + nodeTemplate.setPolicies(new ArrayList<>(refinementPolicies)); TTopologyTemplate topology = new TTopologyTemplate(new TTopologyTemplate.Builder() .addNodeTemplates(Arrays.asList(nodeTemplate, nodeTemplate2))); @@ -238,7 +243,10 @@ public void testRemoveBehaviorPatterns() { .collect(Collectors.toSet()); assertTrue(types.contains(QName.valueOf("{ns}type1"))); assertTrue(types.contains(QName.valueOf("{ns}pattern1"))); - List policies = topology.getNodeTemplate("nodeTemplate").getPolicies().getPolicy(); + TNodeTemplate nodeTemplate1 = topology.getNodeTemplate("nodeTemplate"); + assertNotNull(nodeTemplate1); + assertNotNull(nodeTemplate1.getPolicies()); + List policies = nodeTemplate1.getPolicies(); assertEquals(policies.size(), 1); assertTrue(policies.stream().anyMatch(policy -> policy.getPolicyType().equals(QName.valueOf("{patternNs}one")))); } @@ -258,23 +266,17 @@ private OTPatternRefinementModel prm1() { .setX("1").setY("1") ); - TRelationshipTemplate.SourceOrTargetElement processorDRef = new TRelationshipTemplate.SourceOrTargetElement(); - processorDRef.setRef(processorD); - TRelationshipTemplate.SourceOrTargetElement executionEnvRef = new TRelationshipTemplate.SourceOrTargetElement(); - executionEnvRef.setRef(executionEnv); TRelationshipTemplate processorDToExecutionEnv = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "processorD-executionEnv-d1", QName.valueOf("{ns}hostedOn"), - processorDRef, - executionEnvRef + processorD, + executionEnv )); - TRelationshipTemplate.SourceOrTargetElement privateCloudRef = new TRelationshipTemplate.SourceOrTargetElement(); - privateCloudRef.setRef(privateCloud); TRelationshipTemplate executionEnvToPrivateCloud = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "executionEnv-privateCloud-d1", QName.valueOf("{ns}hostedOn"), - executionEnvRef, - privateCloudRef + executionEnv, + privateCloud )); TTopologyTemplate detector = new TTopologyTemplate(new TTopologyTemplate.Builder() @@ -310,31 +312,23 @@ private OTPatternRefinementModel prm1() { openstackProps.put("api", "openstack.uni-stuttgart"); ModelUtilities.setPropertiesKV(openstack, openstackProps); - TRelationshipTemplate.SourceOrTargetElement processorRsRef = new TRelationshipTemplate.SourceOrTargetElement(); - processorRsRef.setRef(processorRs); - TRelationshipTemplate.SourceOrTargetElement webserverRef = new TRelationshipTemplate.SourceOrTargetElement(); - webserverRef.setRef(webserver); TRelationshipTemplate processorToWebserver = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "processor-webserver-rs1", QName.valueOf("{ns}hostedOn"), - processorRsRef, - webserverRef + processorRs, + webserver )); - TRelationshipTemplate.SourceOrTargetElement vmRef = new TRelationshipTemplate.SourceOrTargetElement(); - vmRef.setRef(vm); TRelationshipTemplate webserverToVm = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "webserver-vm-rs1", QName.valueOf("{ns}hostedOn"), - webserverRef, - vmRef + webserver, + vm )); - TRelationshipTemplate.SourceOrTargetElement openstackRef = new TRelationshipTemplate.SourceOrTargetElement(); - openstackRef.setRef(openstack); TRelationshipTemplate vmToOpenstack = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "vm-openstack-rs1", QName.valueOf("{ns}hostedOn"), - vmRef, - openstackRef + vm, + openstack )); TTopologyTemplate refinement = new TTopologyTemplate(new TTopologyTemplate.Builder() @@ -404,15 +398,11 @@ private OTPatternRefinementModel prm2() { ); ModelUtilities.setPropertiesKV(privateCloud, new LinkedHashMap<>()); - TRelationshipTemplate.SourceOrTargetElement relationalDbRef = new TRelationshipTemplate.SourceOrTargetElement(); - relationalDbRef.setRef(relationalDb); - TRelationshipTemplate.SourceOrTargetElement privateCloudRef = new TRelationshipTemplate.SourceOrTargetElement(); - privateCloudRef.setRef(privateCloud); TRelationshipTemplate relationalDbToPrivateCloud = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "relationalDb-privateCloud-d2", QName.valueOf("{ns}hostedOn"), - relationalDbRef, - privateCloudRef + relationalDb, + privateCloud )); TTopologyTemplate detector = new TTopologyTemplate(new TTopologyTemplate.Builder() @@ -448,31 +438,23 @@ private OTPatternRefinementModel prm2() { vsphereProps.put("api", "vsphere.uni-stuttgart"); ModelUtilities.setPropertiesKV(vsphere, vsphereProps); - TRelationshipTemplate.SourceOrTargetElement dbRef = new TRelationshipTemplate.SourceOrTargetElement(); - dbRef.setRef(database); - TRelationshipTemplate.SourceOrTargetElement dbmsRef = new TRelationshipTemplate.SourceOrTargetElement(); - dbmsRef.setRef(dbms); TRelationshipTemplate dbToDbms = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "db-dbms-rs2", QName.valueOf("{ns}hostedOn"), - dbRef, - dbmsRef + database, + dbms )); - TRelationshipTemplate.SourceOrTargetElement vmRef = new TRelationshipTemplate.SourceOrTargetElement(); - vmRef.setRef(vm); TRelationshipTemplate dbmsToVm = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "dbms-vm-rs2", QName.valueOf("{ns}hostedOn"), - dbmsRef, - vmRef + dbms, + vm )); - TRelationshipTemplate.SourceOrTargetElement vsphereRef = new TRelationshipTemplate.SourceOrTargetElement(); - vsphereRef.setRef(vsphere); TRelationshipTemplate vmToVsphere = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "vm-vsphere-rs2", QName.valueOf("{ns}hostedOn"), - vmRef, - vsphereRef + vm, + vsphere )); TTopologyTemplate refinement = new TTopologyTemplate(new TTopologyTemplate.Builder() @@ -571,53 +553,41 @@ private TTopologyTemplate topology() { openstackProps.put("api", "openstack.uni-stuttgart"); ModelUtilities.setPropertiesKV(openstack, openstackProps); - TRelationshipTemplate.SourceOrTargetElement processorRef = new TRelationshipTemplate.SourceOrTargetElement(); - processorRef.setRef(processor); - TRelationshipTemplate.SourceOrTargetElement dbRef = new TRelationshipTemplate.SourceOrTargetElement(); - dbRef.setRef(database); TRelationshipTemplate processorToDb = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "processor-db", QName.valueOf("{ns}secureSqlConnection"), - processorRef, - dbRef + processor, + database )); - TRelationshipTemplate.SourceOrTargetElement webserverRef = new TRelationshipTemplate.SourceOrTargetElement(); - webserverRef.setRef(webserver); TRelationshipTemplate processorToWebserver = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "processor-webserver", QName.valueOf("{ns}hostedOn"), - processorRef, - webserverRef + processor, + webserver )); - TRelationshipTemplate.SourceOrTargetElement vmRef = new TRelationshipTemplate.SourceOrTargetElement(); - vmRef.setRef(vm); TRelationshipTemplate webserverToVm = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "webserver-vm", QName.valueOf("{ns}hostedOn"), - webserverRef, - vmRef + webserver, + vm )); - TRelationshipTemplate.SourceOrTargetElement dbmsRef = new TRelationshipTemplate.SourceOrTargetElement(); - dbmsRef.setRef(dbms); TRelationshipTemplate dbToDbms = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "db-dbms", QName.valueOf("{ns}hostedOn"), - dbRef, - dbmsRef + database, + dbms )); TRelationshipTemplate dbmsToVm = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "dbms-vm", QName.valueOf("{ns}hostedOn"), - dbmsRef, - vmRef + dbms, + vm )); - TRelationshipTemplate.SourceOrTargetElement openstackRef = new TRelationshipTemplate.SourceOrTargetElement(); - openstackRef.setRef(openstack); TRelationshipTemplate vmToOpenstack = new TRelationshipTemplate(new TRelationshipTemplate.Builder( "vm-openstack", QName.valueOf("{ns}hostedOn"), - vmRef, - openstackRef + vm, + openstack )); return new TTopologyTemplate(new TTopologyTemplate.Builder() diff --git a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/AbstractRefinementTest.java b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/AbstractRefinementTest.java index ee8725be83..3455c3c581 100644 --- a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/AbstractRefinementTest.java +++ b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/AbstractRefinementTest.java @@ -22,15 +22,15 @@ import javax.xml.namespace.QName; -import org.eclipse.winery.model.tosca.extensions.OTDeploymentArtifactMapping; -import org.eclipse.winery.model.tosca.extensions.OTPatternRefinementModel; -import org.eclipse.winery.model.tosca.extensions.OTRelationDirection; -import org.eclipse.winery.model.tosca.extensions.OTRelationMapping; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TRelationshipTemplate; import org.eclipse.winery.model.tosca.TTopologyTemplate; +import org.eclipse.winery.model.tosca.extensions.OTDeploymentArtifactMapping; +import org.eclipse.winery.model.tosca.extensions.OTPatternRefinementModel; +import org.eclipse.winery.model.tosca.extensions.OTRelationDirection; +import org.eclipse.winery.model.tosca.extensions.OTRelationMapping; +import org.eclipse.winery.repository.TestWithGitBackedRepository; import org.eclipse.winery.topologygraph.matching.ToscaIsomorphismMatcher; import org.eclipse.winery.topologygraph.matching.ToscaTypeMatcher; import org.eclipse.winery.topologygraph.model.ToscaEdge; @@ -40,7 +40,7 @@ import org.jgrapht.GraphMapping; -public class AbstractRefinementTest { +public class AbstractRefinementTest extends TestWithGitBackedRepository { protected static TTopologyTemplate topology; protected static TTopologyTemplate topology2; @@ -57,47 +57,46 @@ public class AbstractRefinementTest { protected static void setUp() { // region *** topology *** - TNodeTemplate nt1 = new TNodeTemplate(); - nt1.setType("{http://ex.org}nodeType_1"); - nt1.setId("1"); - nt1.setX("10"); - nt1.setY("10"); - - TNodeTemplate nt2 = new TNodeTemplate(); - nt2.setType("{http://ex.org}nodeType_2"); - nt2.setId("2"); - nt2.setX("110"); - nt2.setY("10"); - - TNodeTemplate nt3 = new TNodeTemplate(); - nt3.setType("{http://ex.org}nodeType_3"); - nt3.setId("3"); - nt3.setX("210"); - nt3.setY("10"); - - TNodeTemplate nt4 = new TNodeTemplate(); - nt4.setType("{http://ex.org}nodeType_4"); - nt4.setId("4"); - nt4.setX("110"); - nt4.setY("110"); - - TRelationshipTemplate rt21 = new TRelationshipTemplate(); - rt21.setType("{http://ex.org}relType_1"); - rt21.setId("21"); - rt21.setSourceNodeTemplate(nt2); - rt21.setTargetNodeTemplate(nt1); - - TRelationshipTemplate rt32 = new TRelationshipTemplate(); - rt32.setType("{http://ex.org}relType_1"); - rt32.setId("32"); - rt32.setSourceNodeTemplate(nt3); - rt32.setTargetNodeTemplate(nt2); - - TRelationshipTemplate rt24 = new TRelationshipTemplate(); - rt24.setType("{http://ex.org}relType_2"); - rt24.setId("24"); - rt24.setSourceNodeTemplate(nt2); - rt24.setTargetNodeTemplate(nt4); + TNodeTemplate nt1 = new TNodeTemplate.Builder("1", QName.valueOf("{http://ex.org}nodeType_1")) + .setX("10") + .setY("10") + .build(); + + TNodeTemplate nt2 = new TNodeTemplate.Builder("2", QName.valueOf("{http://ex.org}nodeType_2")) + .setX("110") + .setY("10") + .build(); + + TNodeTemplate nt3 = new TNodeTemplate.Builder("3", QName.valueOf("{http://ex.org}nodeType_3")) + .setX("210") + .setY("10") + .build(); + + TNodeTemplate nt4 = new TNodeTemplate.Builder("4", QName.valueOf("{http://ex.org}nodeType_4")) + .setX("110") + .setY("110") + .build(); + + TRelationshipTemplate rt21 = new TRelationshipTemplate.Builder( + "21", + QName.valueOf("{http://ex.org}relType_1"), + nt2, + nt1 + ).build(); + + TRelationshipTemplate rt32 = new TRelationshipTemplate.Builder( + "32", + QName.valueOf("{http://ex.org}relType_1"), + nt3, + nt2 + ).build(); + + TRelationshipTemplate rt24 = new TRelationshipTemplate.Builder( + "24", + QName.valueOf("{http://ex.org}relType_2"), + nt2, + nt4 + ).build(); /* ####### (1) ####### (1) ####### @@ -154,24 +153,25 @@ protected static void setUp() { QName artifactTypeFile = new QName("file", "http://example.org/tosca/at"); QName test_da = new QName("test_da", "http://example.org/tosca/atemp/das"); - TNodeTemplate nt30 = new TNodeTemplate(); - nt30.setType("{http://ex.org}nodeType_4"); - nt30.setId("30"); - nt30.setX("110"); - nt30.setY("110"); - - TRelationshipTemplate rt230 = new TRelationshipTemplate(); - rt230.setType("{http://ex.org}relType_2"); - rt230.setId("302"); - rt230.setSourceNodeTemplate(nt2); - rt230.setTargetNodeTemplate(nt30); - - TDeploymentArtifacts das = new TDeploymentArtifacts(); - TDeploymentArtifact da = new TDeploymentArtifact(); - da.setArtifactRef(test_da); - da.setArtifactType(artifactTypeFile); - das.getDeploymentArtifact().add(da); - nt30.setDeploymentArtifacts(das); + TNodeTemplate nt30 = new TNodeTemplate.Builder("30", QName.valueOf("{http://ex.org}nodeType_4")) + .setX("110") + .setY("110") + .build(); + + TRelationshipTemplate rt230 = new TRelationshipTemplate.Builder( + "302", + QName.valueOf("{http://ex.org}relType_2"), + nt2, + nt30 + ).build(); + + TDeploymentArtifact da = new TDeploymentArtifact.Builder("test_da", artifactTypeFile) + .setArtifactRef(test_da) + .build(); + + nt30.setDeploymentArtifacts( + new ArrayList<>(Collections.singletonList(da)) + ); topology3 = new TTopologyTemplate.Builder() .addNodeTemplate(nt1) @@ -183,11 +183,12 @@ protected static void setUp() { // endregion // region *** topology4 *** - TRelationshipTemplate rt14 = new TRelationshipTemplate(); - rt14.setType("{http://ex.org}relType_1"); - rt14.setId("14"); - rt14.setSourceNodeTemplate(nt1); - rt14.setTargetNodeTemplate(nt4); + TRelationshipTemplate rt14 = new TRelationshipTemplate.Builder( + "14", + QName.valueOf("{http://ex.org}relType_1"), + nt1, + nt4 + ).build(); /* ####### (1) ####### @@ -212,19 +213,18 @@ protected static void setUp() { // region *** matching PRM *** // region *** detector *** - TNodeTemplate nt7 = new TNodeTemplate(); - nt7.setType("{http://ex.org}nodeType_2"); - nt7.setId("7"); + TNodeTemplate nt7 = new TNodeTemplate.Builder("7", QName.valueOf("{http://ex.org}nodeType_2")) + .build(); - TNodeTemplate nt8 = new TNodeTemplate(); - nt8.setType("{http://ex.org}nodeType_4"); - nt8.setId("8"); + TNodeTemplate nt8 = new TNodeTemplate.Builder("8", QName.valueOf("{http://ex.org}nodeType_4")) + .build(); - TRelationshipTemplate rt78 = new TRelationshipTemplate(); - rt78.setType("{http://ex.org}relType_2"); - rt78.setId("78"); - rt78.setSourceNodeTemplate(nt7); - rt78.setTargetNodeTemplate(nt8); + TRelationshipTemplate rt78 = new TRelationshipTemplate.Builder( + "78", + QName.valueOf("{http://ex.org}relType_2"), + nt7, + nt8 + ).build(); /* ####### @@ -244,47 +244,46 @@ protected static void setUp() { // endregion // region *** refinement structure - TNodeTemplate nt10 = new TNodeTemplate(); - nt10.setType("{http://ex.org}nodeType_10"); - nt10.setId("10"); - nt10.setX("5"); - nt10.setY("10"); - - TNodeTemplate nt11 = new TNodeTemplate(); - nt11.setType("{http://ex.org}nodeType_11"); - nt11.setId("11"); - nt11.setX("105"); - nt11.setY("5"); - - TNodeTemplate nt12 = new TNodeTemplate(); - nt12.setType("{http://ex.org}nodeType_12"); - nt12.setId("12"); - nt12.setX("55"); - nt12.setY("105"); - - TNodeTemplate nt13 = new TNodeTemplate(); - nt13.setType("{http://ex.org}nodeType_13"); - nt13.setId("13"); - nt13.setX("55"); - nt13.setY("205"); - - TRelationshipTemplate rt1012 = new TRelationshipTemplate(); - rt1012.setType("{http://ex.org}relType_2"); - rt1012.setId("1012"); - rt1012.setSourceNodeTemplate(nt10); - rt1012.setTargetNodeTemplate(nt12); - - TRelationshipTemplate rt1112 = new TRelationshipTemplate(); - rt1112.setType("{http://ex.org}relType_2"); - rt1112.setId("1112"); - rt1112.setSourceNodeTemplate(nt11); - rt1112.setTargetNodeTemplate(nt12); - - TRelationshipTemplate rt1213 = new TRelationshipTemplate(); - rt1213.setType("{http://ex.org}relType_2"); - rt1213.setId("1213"); - rt1213.setSourceNodeTemplate(nt12); - rt1213.setTargetNodeTemplate(nt13); + TNodeTemplate nt10 = new TNodeTemplate.Builder("10", QName.valueOf("{http://ex.org}nodeType_10")) + .setX("5") + .setY("10") + .build(); + + TNodeTemplate nt11 = new TNodeTemplate.Builder("11", QName.valueOf("{http://ex.org}nodeType_11")) + .setX("105") + .setY("5") + .build(); + + TNodeTemplate nt12 = new TNodeTemplate.Builder("12", QName.valueOf("{http://ex.org}nodeType_12")) + .setX("55") + .setY("105") + .build(); + + TNodeTemplate nt13 = new TNodeTemplate.Builder("13", QName.valueOf("{http://ex.org}nodeType_13")) + .setX("55") + .setY("205") + .build(); + + TRelationshipTemplate rt1012 = new TRelationshipTemplate.Builder( + "1012", + QName.valueOf("{http://ex.org}relType_2"), + nt10, + nt12 + ).build(); + + TRelationshipTemplate rt1112 = new TRelationshipTemplate.Builder( + "1112", + QName.valueOf("{http://ex.org}relType_2"), + nt11, + nt12 + ).build(); + + TRelationshipTemplate rt1213 = new TRelationshipTemplate.Builder( + "1213", + QName.valueOf("{http://ex.org}relType_2"), + nt12, + nt13 + ).build(); /* ######## ######## diff --git a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/patterns/PatternRefinementTest.java b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/patterns/PatternRefinementTest.java index e1711aa7e1..a005913ce2 100644 --- a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/patterns/PatternRefinementTest.java +++ b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/patterns/PatternRefinementTest.java @@ -527,13 +527,13 @@ void redirectDeploymentArtifacts() { TNodeTemplate refinedNt = topology3.getNodeTemplate("13"); assertNotNull(refinedNt); assertNotNull(refinedNt.getDeploymentArtifacts()); - assertEquals(1, refinedNt.getDeploymentArtifacts().getDeploymentArtifact().size()); + assertEquals(1, refinedNt.getDeploymentArtifacts().size()); assertEquals( new QName("test_da", "http://example.org/tosca/atemp/das"), - refinedNt.getDeploymentArtifacts().getDeploymentArtifact().get(0).getArtifactRef()); + refinedNt.getDeploymentArtifacts().get(0).getArtifactRef()); assertEquals( new QName("file", "http://example.org/tosca/at"), - refinedNt.getDeploymentArtifacts().getDeploymentArtifact().get(0).getArtifactType()); + refinedNt.getDeploymentArtifacts().get(0).getArtifactType()); // endregion } diff --git a/org.eclipse.winery.model.threatmodeling/src/main/java/org/eclipse/winery/model/threatmodeling/ThreatModeling.java b/org.eclipse.winery.model.threatmodeling/src/main/java/org/eclipse/winery/model/threatmodeling/ThreatModeling.java index 584850e227..0bacad1a67 100644 --- a/org.eclipse.winery.model.threatmodeling/src/main/java/org/eclipse/winery/model/threatmodeling/ThreatModeling.java +++ b/org.eclipse.winery.model.threatmodeling/src/main/java/org/eclipse/winery/model/threatmodeling/ThreatModeling.java @@ -130,7 +130,7 @@ private void findAbstractMitigationsForPresentThreats() { private void getPresentThreats() { nodeTemplates.forEach((TNodeTemplate nt) -> { if (nt.getPolicies() != null) { - nt.getPolicies().getPolicy().forEach((TPolicy policy) -> { + nt.getPolicies().forEach((TPolicy policy) -> { String policyTypeName = policy.getPolicyType().toString(); if (policyTypeName.equals(ThreatModelingConstants.THREAT_POLICY_ID)) { diff --git a/org.eclipse.winery.model.threatmodeling/src/main/java/org/eclipse/winery/model/threatmodeling/ThreatModelingUtils.java b/org.eclipse.winery.model.threatmodeling/src/main/java/org/eclipse/winery/model/threatmodeling/ThreatModelingUtils.java index a4875e748f..cda218557e 100644 --- a/org.eclipse.winery.model.threatmodeling/src/main/java/org/eclipse/winery/model/threatmodeling/ThreatModelingUtils.java +++ b/org.eclipse.winery.model.threatmodeling/src/main/java/org/eclipse/winery/model/threatmodeling/ThreatModelingUtils.java @@ -30,7 +30,6 @@ import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TBoundaryDefinitions; import org.eclipse.winery.model.tosca.TNodeType; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TPolicyTemplate; import org.eclipse.winery.model.tosca.TPolicyType; @@ -144,12 +143,14 @@ public List getBoundaryDefinitionMitigationPolicies(TServiceTemplate se // check if boundary definitions are not empty if (Objects.nonNull(boundaryDefinitions)) { // get all policies - TPolicies serviceTemplatePolicies = boundaryDefinitions.getPolicies(); + List serviceTemplatePolicies = boundaryDefinitions.getPolicies(); if (Objects.nonNull(serviceTemplatePolicies)) { - mitigationPolicies = serviceTemplatePolicies.getPolicy() - .stream() // check if polcies are mitigation policies - .filter((TPolicy policy) -> policy.getPolicyType().toString().equals(ThreatModelingConstants.MITIGATION_POLICY_ID)) - .collect(Collectors.toList()); + mitigationPolicies = serviceTemplatePolicies + .stream() // check if policies are mitigation policies + .filter((TPolicy policy) -> + policy.getPolicyType().toString() + .equals(ThreatModelingConstants.MITIGATION_POLICY_ID) + ).collect(Collectors.toList()); } } diff --git a/org.eclipse.winery.model.threatmodeling/src/test/java/org/eclipse/winery/model/threatmodeling/ThreatModelingTestWithGitBackedRepository.java b/org.eclipse.winery.model.threatmodeling/src/test/java/org/eclipse/winery/model/threatmodeling/ThreatModelingTestWithGitBackedRepository.java index a8214bb029..6fc52cc227 100644 --- a/org.eclipse.winery.model.threatmodeling/src/test/java/org/eclipse/winery/model/threatmodeling/ThreatModelingTestWithGitBackedRepository.java +++ b/org.eclipse.winery.model.threatmodeling/src/test/java/org/eclipse/winery/model/threatmodeling/ThreatModelingTestWithGitBackedRepository.java @@ -73,9 +73,8 @@ public void testForPresentSVNFinServiceTemplate() throws Exception { .setName("MITIGATE_MyThreat") .build(); - TBoundaryDefinitions boundaryDefinitions = new TBoundaryDefinitions - .Builder() - .addPolicies(boundaryThreat) + TBoundaryDefinitions boundaryDefinitions = new TBoundaryDefinitions.Builder() + .addPolicy(boundaryThreat) .build(); TServiceTemplate networkServiceA = new TServiceTemplate.Builder("NetworkServiceA", emptyTopology) @@ -95,15 +94,14 @@ public void testForPresentSVNFinServiceTemplate() throws Exception { .setTargetNamespace(demoNamespace) .build(); - TPolicy nodeTemplateThreat = new TPolicy - .Builder(QName.valueOf(ThreatModelingConstants.THREAT_POLICY_ID)) + TPolicy nodeTemplateThreat = new TPolicy.Builder(QName.valueOf(ThreatModelingConstants.THREAT_POLICY_ID)) .setPolicyRef(new QName(ThreatModelingConstants.THREATMODELING_NAMESPACE, "MyThreat")) .setName("MyThreat") .build(); TNodeTemplate myNodeTemplate = new TNodeTemplate .Builder("myNodeTemplate", new QName(demoNamespace, "MyNode")) - .addPolicies(nodeTemplateThreat) + .addPolicy(nodeTemplateThreat) .build(); TTopologyTemplate myTopology = new TTopologyTemplate.Builder().addNodeTemplate(myNodeTemplate).build(); diff --git a/org.eclipse.winery.model.threatmodeling/src/test/java/org/eclipse/winery/model/threatmodeling/ThreatModelingUtilsWithGitBackendRepositoryTest.java b/org.eclipse.winery.model.threatmodeling/src/test/java/org/eclipse/winery/model/threatmodeling/ThreatModelingUtilsWithGitBackendRepositoryTest.java index df8ea2c70f..c6d1964673 100644 --- a/org.eclipse.winery.model.threatmodeling/src/test/java/org/eclipse/winery/model/threatmodeling/ThreatModelingUtilsWithGitBackendRepositoryTest.java +++ b/org.eclipse.winery.model.threatmodeling/src/test/java/org/eclipse/winery/model/threatmodeling/ThreatModelingUtilsWithGitBackendRepositoryTest.java @@ -63,9 +63,8 @@ public void checkBoundaryDefinitionsOfServiceTemplate() throws Exception { TPolicy mitigationPolicy = new TPolicy.Builder(myMitigation.getTypeAsQName()).build(); - TBoundaryDefinitions stBoundaryDefinitions = new TBoundaryDefinitions - .Builder() - .addPolicies(mitigationPolicy) + TBoundaryDefinitions stBoundaryDefinitions = new TBoundaryDefinitions.Builder() + .addPolicy(mitigationPolicy) .build(); st.setBoundaryDefinitions(stBoundaryDefinitions); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/ids/StringEncodedAndDecoded.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/ids/StringEncodedAndDecoded.java index ad278f9315..0c7ab68e70 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/ids/StringEncodedAndDecoded.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/ids/StringEncodedAndDecoded.java @@ -14,7 +14,7 @@ package org.eclipse.winery.model.ids; /** - * Meta class to handle things, where a String (URI, NCName, ...) may be URLencoded + * Meta-class to handle things, where a String (URI, NCName, ...) may be URLencoded */ public class StringEncodedAndDecoded implements Comparable { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/jsonsupport/YesNo.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/jsonsupport/YesNo.java index 30bed0cd8b..d36549da9e 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/jsonsupport/YesNo.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/jsonsupport/YesNo.java @@ -27,20 +27,30 @@ public class YesNo { public static class Serializer extends StdSerializer { - public Serializer() { this(null); } + + @SuppressWarnings("unused") + public Serializer() { + this(null); + } + protected Serializer(Class t) { super(t); } @Override - public void serialize (Boolean aBoolean, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws - IOException { + public void serialize(Boolean aBoolean, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws + IOException { jsonGenerator.writeString(aBoolean ? "YES" : "NO"); } } public static class Deserializer extends StdDeserializer { - public Deserializer() { this(null); } + + @SuppressWarnings("unused") + public Deserializer() { + this(null); + } + protected Deserializer(Class vc) { super(vc); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasIdAndTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasIdAndTags.java new file mode 100644 index 0000000000..a75e5c49a5 --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasIdAndTags.java @@ -0,0 +1,101 @@ +/******************************************************************************* + * Copyright (c) 2021 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ + +package org.eclipse.winery.model.tosca; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlTransient; + +import io.github.adr.embedded.ADR; +import org.eclipse.jdt.annotation.Nullable; + +@XmlTransient +@XmlAccessorType(XmlAccessType.FIELD) +public abstract class HasIdAndTags extends HasId implements HasTags { + + @XmlElementWrapper(name = "Tags") + @XmlElement(name = "Tag", required = true) + protected List tags; + + public HasIdAndTags(Builder builder) { + super(builder); + this.tags = builder.tags; + } + + // required for serialization + public HasIdAndTags() { + } + + public List getTags() { + return tags; + } + + public void setTags(@Nullable List value) { + this.tags = value; + } + + @ADR(11) + public abstract static class Builder> extends HasId.Builder { + + private List tags; + + public Builder(String id) { + super(id); + } + + public Builder(TExtensibleElements extensibleElements) { + this.addDocumentation(extensibleElements.getDocumentation()); + this.addAny(extensibleElements.getAny()); + this.addOtherAttributes(extensibleElements.getOtherAttributes()); + } + + public T addTags(List tags) { + if (tags == null || tags.isEmpty()) { + return self(); + } + + if (this.tags == null) { + this.tags = tags; + } else { + this.tags.addAll(tags); + } + return self(); + } + + public T addTag(TTag tag) { + if (tag == null) { + return self(); + } + + ArrayList tmp = new ArrayList<>(); + tmp.add(tag); + return addTags(tmp); + } + + public T addTag(String key, String value) { + if (value == null) { + return self(); + } + + TTag tag = new TTag.Builder(key, value).build(); + return addTag(tag); + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasPolicies.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasPolicies.java index a2346bc586..104647d549 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasPolicies.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasPolicies.java @@ -14,9 +14,11 @@ package org.eclipse.winery.model.tosca; +import java.util.List; + public interface HasPolicies { - TPolicies getPolicies(); + List getPolicies(); - void setPolicies(TPolicies policies); + void setPolicies(List policies); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasTags.java index a6ade4ee75..8945f68045 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasTags.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/HasTags.java @@ -14,7 +14,9 @@ package org.eclipse.winery.model.tosca; +import java.util.List; + public interface HasTags { - TTags getTags(); + List getTags(); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TAppliesTo.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TAppliesTo.java deleted file mode 100644 index a6ee604db4..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TAppliesTo.java +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.namespace.QName; - -import org.eclipse.jdt.annotation.NonNull; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tAppliesTo", propOrder = { - "nodeTypeReference" -}) -public class TAppliesTo implements Serializable { - - @XmlElement(name = "NodeTypeReference", required = true) - protected List nodeTypeReference; - - @Deprecated // used for XML deserialization of API request content - public TAppliesTo() { } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TAppliesTo)) return false; - TAppliesTo appliesTo = (TAppliesTo) o; - return Objects.equals(nodeTypeReference, appliesTo.nodeTypeReference); - } - - @Override - public int hashCode() { - return Objects.hash(nodeTypeReference); - } - - /** - * Gets the value of the nodeTypeReference property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link TAppliesTo.NodeTypeReference } - */ - @NonNull - public List getNodeTypeReference() { - if (nodeTypeReference == null) { - nodeTypeReference = new ArrayList(); - } - return this.nodeTypeReference; - } - - /** - *

Java class for anonymous complex type. - *

- *

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

- *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="typeRef" use="required" type="{http://www.w3.org/2001/XMLSchema}QName" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class NodeTypeReference implements Serializable { - - @XmlAttribute(name = "typeRef", required = true) - protected QName typeRef; - - /** - * Gets the value of the typeRef property. - * - * @return possible object is {@link QName } - */ - @NonNull - public QName getTypeRef() { - return typeRef; - } - - /** - * Sets the value of the typeRef property. - * - * @param value allowed object is {@link QName } - */ - public void setTypeRef(QName value) { - this.typeRef = value; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - NodeTypeReference that = (NodeTypeReference) o; - return Objects.equals(typeRef, that.typeRef); - } - - @Override - public int hashCode() { - - return Objects.hash(typeRef); - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifactReference.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifactReference.java index 028b0dcb21..e368558226 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifactReference.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifactReference.java @@ -26,6 +26,7 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElements; import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; import org.eclipse.jdt.annotation.NonNull; @@ -42,7 +43,7 @@ public class TArtifactReference implements Serializable { @XmlElement(name = "Include", type = TArtifactReference.Include.class) }) // cannot split these into separate lists because the semantics are affected by the order of the elements - protected List includeOrExclude; + protected List includeOrExclude; @XmlAttribute(name = "reference", required = true) @XmlSchemaType(name = "anyURI") @@ -83,7 +84,7 @@ public String toString() { *

*

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

@@ -100,7 +101,7 @@ public String toString() { * {@link TArtifactReference.Include } */ @NonNull - public List getIncludeOrExclude() { + public List getIncludeOrExclude() { if (includeOrExclude == null) { this.includeOrExclude = new ArrayList<>(); } @@ -117,11 +118,19 @@ public void setReference(String value) { } @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Exclude { + @XmlTransient + public abstract static class IncludeOrExclude implements Serializable { @XmlAttribute(name = "pattern", required = true) - protected String pattern; + private String pattern; + + // required for serialization + public IncludeOrExclude() { + } + + public IncludeOrExclude(String pattern) { + this.pattern = pattern; + } @NonNull public String getPattern() { @@ -135,24 +144,31 @@ public void setPattern(String value) { @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "") - public static class Include implements Serializable { + public static class Exclude extends IncludeOrExclude { + @Deprecated + public Exclude() { + } - @XmlAttribute(name = "pattern", required = true) - protected String pattern; + public Exclude(String pattern) { + super(pattern); + } + } - @NonNull - public String getPattern() { - return pattern; + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Include extends IncludeOrExclude { + @Deprecated + public Include() { } - public void setPattern(String value) { - this.pattern = value; + public Include(String pattern) { + super(pattern); } } public static class Builder { private final String reference; - private List includeOrExclude; + private List includeOrExclude; public Builder(String reference) { this.reference = reference; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifactTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifactTemplate.java index ca93b0b05a..ce12e6aa6e 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifactTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifactTemplate.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -23,12 +22,12 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; import org.eclipse.winery.model.tosca.visitor.Visitor; -import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @@ -37,13 +36,16 @@ }) public class TArtifactTemplate extends TEntityTemplate { - @XmlElement(name = "ArtifactReferences") - protected TArtifactTemplate.ArtifactReferences artifactReferences; + @XmlElementWrapper(name = "ArtifactReferences") + @XmlElement(name = "ArtifactReference", required = true) + protected List artifactReferences; + @XmlAttribute(name = "name") protected String name; @Deprecated // used for XML deserialization of API request content - public TArtifactTemplate() { } + public TArtifactTemplate() { + } public TArtifactTemplate(Builder builder) { super(builder); @@ -71,11 +73,11 @@ public void accept(Visitor visitor) { visitor.visit(this); } - public TArtifactTemplate.@Nullable ArtifactReferences getArtifactReferences() { + public List getArtifactReferences() { return artifactReferences; } - public void setArtifactReferences(TArtifactTemplate.@Nullable ArtifactReferences value) { + public void setArtifactReferences(List value) { this.artifactReferences = value; } @@ -99,47 +101,10 @@ public String toString() { '}'; } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "artifactReference" - }) - public static class ArtifactReferences implements Serializable { - - @XmlElement(name = "ArtifactReference", required = true) - protected List artifactReference; - - @Override - public String toString() { - return "ArtifactReferences{" + - "artifactReference=" + artifactReference + - '}'; - } - - @NonNull - public List getArtifactReference() { - if (artifactReference == null) { - artifactReference = new ArrayList(); - } - return this.artifactReference; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ArtifactReferences that = (ArtifactReferences) o; - return Objects.equals(artifactReference, that.artifactReference); - } - - @Override - public int hashCode() { - return Objects.hash(artifactReference); - } - } - public static class Builder extends TEntityTemplate.Builder { + private String name; - private TArtifactTemplate.ArtifactReferences artifactReferences; + private List artifactReferences; public Builder(String id, QName type) { super(id, type); @@ -154,41 +119,26 @@ public Builder setName(String name) { return this; } - public Builder setArtifactReferences(TArtifactTemplate.ArtifactReferences artifactReferences) { - this.artifactReferences = artifactReferences; - return this; - } - - public Builder addArtifactReferences(TArtifactTemplate.ArtifactReferences artifactReferences) { - if (artifactReferences == null || artifactReferences.getArtifactReference().isEmpty()) { + public Builder addArtifactReferences(List artifactReferences) { + if (artifactReferences == null || artifactReferences.isEmpty()) { return this; } if (this.artifactReferences == null) { this.artifactReferences = artifactReferences; } else { - this.artifactReferences.getArtifactReference().addAll(artifactReferences.artifactReference); + this.artifactReferences.addAll(artifactReferences); } return this; } - public Builder addArtifactReferences(List artifactReferences) { - if (artifactReferences == null) { - return this; - } - - TArtifactTemplate.ArtifactReferences tmp = new TArtifactTemplate.ArtifactReferences(); - tmp.getArtifactReference().addAll(artifactReferences); - return addArtifactReferences(tmp); - } - - public Builder addArtifactReferences(TArtifactReference artifactReferences) { - if (artifactReferences == null) { + public Builder addArtifactReference(TArtifactReference artifactReference) { + if (artifactReference == null) { return this; } - TArtifactTemplate.ArtifactReferences tmp = new TArtifactTemplate.ArtifactReferences(); - tmp.getArtifactReference().add(artifactReferences); + List tmp = new ArrayList<>(); + tmp.add(artifactReference); return addArtifactReferences(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifacts.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifacts.java deleted file mode 100644 index bb0460ddff..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TArtifacts.java +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "Artifacts", propOrder = { - "artifact" -}) -public class TArtifacts implements Serializable { - - @XmlElement(name = "Artifact", required = true) - List artifact; - - @Deprecated // used for XML deserialization of API request content - public TArtifacts() { } - - public TArtifacts(List artifacts) { - this.artifact = artifacts; - } - - public List getArtifact() { - if (artifact == null) { - artifact = new ArrayList<>(); - } - return artifact; - } - - public void setArtifact(List artifact) { - this.artifact = artifact; - } - - public void addArtifact(TArtifact artifact) { - if (this.artifact == null) { - this.artifact = new ArrayList<>(); - } - this.artifact.add(artifact); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - TArtifacts that = (TArtifacts) o; - return artifact.equals(that.artifact); - } - - @Override - public int hashCode() { - return Objects.hash(artifact); - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TBoundaryDefinitions.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TBoundaryDefinitions.java index e0594a08b2..fdb743ec7f 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TBoundaryDefinitions.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TBoundaryDefinitions.java @@ -23,11 +23,11 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import org.eclipse.winery.model.tosca.visitor.Visitor; -import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @@ -43,19 +43,30 @@ public class TBoundaryDefinitions implements Serializable { @XmlElement(name = "Properties") protected TBoundaryDefinitions.Properties properties; - @XmlElement(name = "PropertyConstraints") - protected TBoundaryDefinitions.PropertyConstraints propertyConstraints; - @XmlElement(name = "Requirements") - protected TBoundaryDefinitions.Requirements requirements; - @XmlElement(name = "Capabilities") - protected TBoundaryDefinitions.Capabilities capabilities; - @XmlElement(name = "Policies") - protected TPolicies policies; - @XmlElement(name = "Interfaces") - protected TBoundaryDefinitions.Interfaces interfaces; + + @XmlElementWrapper(name = "PropertyConstraints") + @XmlElement(name = "PropertyConstraint", required = true) + protected List propertyConstraints; + + @XmlElementWrapper(name = "Requirements") + @XmlElement(name = "Requirement", required = true) + protected List requirements; + + @XmlElementWrapper(name = "Capabilities") + @XmlElement(name = "Capability", required = true) + protected List capabilities; + + @XmlElementWrapper(name = "Policies") + @XmlElement(name = "Policy", required = true) + protected List policies; + + @XmlElementWrapper(name = "Interfaces") + @XmlElement(name = "Interface", required = true) + protected List interfaces; @Deprecated // used for XML deserialization of API request content - public TBoundaryDefinitions() { } + public TBoundaryDefinitions() { + } public TBoundaryDefinitions(Builder builder) { this.properties = builder.properties; @@ -92,43 +103,43 @@ public void setProperties(TBoundaryDefinitions.@Nullable Properties value) { this.properties = value; } - public TBoundaryDefinitions.@Nullable PropertyConstraints getPropertyConstraints() { + public List getPropertyConstraints() { return propertyConstraints; } - public void setPropertyConstraints(TBoundaryDefinitions.@Nullable PropertyConstraints value) { + public void setPropertyConstraints(List value) { this.propertyConstraints = value; } - public TBoundaryDefinitions.@Nullable Requirements getRequirements() { + public List getRequirements() { return requirements; } - public void setRequirements(TBoundaryDefinitions.@Nullable Requirements value) { + public void setRequirements(List value) { this.requirements = value; } - public TBoundaryDefinitions.@Nullable Capabilities getCapabilities() { + public List getCapabilities() { return capabilities; } - public void setCapabilities(TBoundaryDefinitions.@Nullable Capabilities value) { + public void setCapabilities(List value) { this.capabilities = value; } - public @Nullable TPolicies getPolicies() { + public List getPolicies() { return policies; } - public void setPolicies(@Nullable TPolicies value) { + public void setPolicies(List value) { this.policies = value; } - public TBoundaryDefinitions.@Nullable Interfaces getInterfaces() { + public List getInterfaces() { return interfaces; } - public void setInterfaces(TBoundaryDefinitions.@Nullable Interfaces value) { + public void setInterfaces(List value) { this.interfaces = value; } @@ -136,42 +147,6 @@ public void accept(Visitor visitor) { visitor.visit(this); } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "capability" - }) - public static class Capabilities implements Serializable { - - @XmlElement(name = "Capability", required = true) - protected List capability; - - @NonNull - public List getCapability() { - if (capability == null) { - capability = new ArrayList<>(); - } - return this.capability; - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "_interface" - }) - public static class Interfaces implements Serializable { - - @XmlElement(name = "Interface", required = true) - protected List _interface; - - @NonNull - public List getInterface() { - if (_interface == null) { - _interface = new ArrayList<>(); - } - return this._interface; - } - } - @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "any", @@ -181,8 +156,9 @@ public static class Properties implements Serializable { @XmlAnyElement(lax = true) protected Object any; - @XmlElement(name = "PropertyMappings") - protected TBoundaryDefinitions.Properties.PropertyMappings propertyMappings; + @XmlElementWrapper(name = "PropertyMappings") + @XmlElement(name = "PropertyMapping", required = true) + protected List propertyMappings; @Nullable public Object getAny() { @@ -193,80 +169,27 @@ public void setAny(@Nullable Object value) { this.any = value; } - public TBoundaryDefinitions.Properties.@Nullable PropertyMappings getPropertyMappings() { + public List getPropertyMappings() { return propertyMappings; } - public void setPropertyMappings(TBoundaryDefinitions.Properties.@Nullable PropertyMappings value) { + public void setPropertyMappings(List value) { this.propertyMappings = value; } public void accept(Visitor visitor) { visitor.visit(this); } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "propertyMapping" - }) - public static class PropertyMappings implements Serializable { - - @XmlElement(name = "PropertyMapping", required = true) - protected List propertyMapping; - - @NonNull - public List getPropertyMapping() { - if (propertyMapping == null) { - propertyMapping = new ArrayList<>(); - } - return this.propertyMapping; - } - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "propertyConstraint" - }) - public static class PropertyConstraints implements Serializable { - - @XmlElement(name = "PropertyConstraint", required = true) - protected List propertyConstraint; - - @NonNull - public List getPropertyConstraint() { - if (propertyConstraint == null) { - propertyConstraint = new ArrayList<>(); - } - return this.propertyConstraint; - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "requirement" - }) - public static class Requirements implements Serializable { - - @XmlElement(name = "Requirement", required = true) - protected List requirement; - - @NonNull - public List getRequirement() { - if (requirement == null) { - requirement = new ArrayList<>(); - } - return this.requirement; - } } public static class Builder { + private Properties properties; - private PropertyConstraints propertyConstraints; - private Requirements requirements; - private Capabilities capabilities; - private TPolicies policies; - private Interfaces interfaces; + private List propertyConstraints; + private List requirements; + private List capabilities; + private List policies; + private List interfaces; public Builder() { @@ -277,61 +200,51 @@ public Builder setProperties(Properties properties) { return this; } - public Builder setPropertyConstraints(PropertyConstraints propertyConstraints) { + public Builder setPropertyConstraints(List propertyConstraints) { this.propertyConstraints = propertyConstraints; return this; } - public Builder setRequirements(Requirements requirements) { + public Builder setRequirements(List requirements) { this.requirements = requirements; return this; } - public Builder setCapabilities(Capabilities capabilities) { + public Builder setCapabilities(List capabilities) { this.capabilities = capabilities; return this; } - public Builder setPolicies(TPolicies policies) { + public Builder setPolicies(List policies) { this.policies = policies; return this; } - public Builder setInterfaces(Interfaces interfaces) { + public Builder setInterfaces(List interfaces) { this.interfaces = interfaces; return this; } - public Builder addPolicies(TPolicies policies) { - if (policies == null || policies.getPolicy().isEmpty()) { + public Builder addPolicies(List policies) { + if (policies == null || policies.isEmpty()) { return this; } if (this.policies == null) { this.policies = policies; } else { - this.policies.getPolicy().addAll(policies.getPolicy()); + this.policies.addAll(policies); } return this; } - public Builder addPolicies(List policies) { - if (policies == null) { - return this; - } - - TPolicies tmp = new TPolicies(); - tmp.getPolicy().addAll(policies); - return this.addPolicies(tmp); - } - - public Builder addPolicies(TPolicy policies) { + public Builder addPolicy(TPolicy policies) { if (policies == null) { return this; } - TPolicies tmp = new TPolicies(); - tmp.getPolicy().add(policies); + List tmp = new ArrayList<>(); + tmp.add(policies); return this.addPolicies(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCapabilityDefinition.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCapabilityDefinition.java index 5e80b2f20d..b49fb2f4bf 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCapabilityDefinition.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCapabilityDefinition.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -23,6 +22,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -36,21 +36,29 @@ "constraints" }) public class TCapabilityDefinition extends TExtensibleElements { - @XmlElement(name = "Constraints") - protected TCapabilityDefinition.Constraints constraints; + + @XmlElementWrapper(name = "Constraints") + @XmlElement(name = "Constraint", required = true) + protected List constraints; + @XmlAttribute(name = "name", required = true) protected String name; + @XmlAttribute(name = "capabilityType", required = true) protected QName capabilityType; + @XmlAttribute(name = "lowerBound") protected Integer lowerBound; + @XmlAttribute(name = "upperBound") protected String upperBound; + @XmlAttribute(name = "validSourceTypes") protected List validSourceTypes; @Deprecated // used for XML deserialization of API request content - public TCapabilityDefinition() { } + public TCapabilityDefinition() { + } public TCapabilityDefinition(Builder builder) { super(builder); @@ -80,11 +88,11 @@ public int hashCode() { return Objects.hash(constraints, name, capabilityType, lowerBound, upperBound, validSourceTypes); } - public TCapabilityDefinition.@Nullable Constraints getConstraints() { + public List getConstraints() { return constraints; } - public void setConstraints(TCapabilityDefinition.@Nullable Constraints value) { + public void setConstraints(List value) { this.constraints = value; } @@ -107,7 +115,6 @@ public void setCapabilityType(@Nullable QName value) { this.capabilityType = value; } - @NonNull public int getLowerBound() { if (lowerBound == null) { return 1; @@ -140,59 +147,28 @@ public List getValidSourceTypes() { public void setValidSourceTypes(List value) { this.validSourceTypes = value; } - + @Override public void accept(Visitor visitor) { visitor.visit(this); } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "constraint" - }) - public static class Constraints implements Serializable { - - @XmlElement(name = "Constraint", required = true) - protected List constraint; - - @NonNull - public List getConstraint() { - if (constraint == null) { - constraint = new ArrayList(); - } - return this.constraint; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Constraints that = (Constraints) o; - return Objects.equals(constraint, that.constraint); - } - - @Override - public int hashCode() { - return Objects.hash(constraint); - } - } - public static class Builder extends TExtensibleElements.Builder { private final String name; private final QName capabilityType; - private TCapabilityDefinition.Constraints constraints; + private List constraints; private Integer lowerBound; private String upperBound; private List validSourceTypes; - + public Builder(String name, QName capabilityType) { this.name = name; this.capabilityType = capabilityType; } - public Builder setConstraints(TCapabilityDefinition.Constraints constraints) { + public Builder setConstraints(List constraints) { this.constraints = constraints; return this; } @@ -212,36 +188,26 @@ public Builder setValidSourceTypes(List validSourceTypes) { return this; } - public Builder addConstraints(TCapabilityDefinition.Constraints constraints) { - if (constraints == null || constraints.getConstraint().isEmpty()) { + public Builder addConstraints(List constraints) { + if (constraints == null || constraints.isEmpty()) { return this; } if (this.constraints == null) { this.constraints = constraints; } else { - this.constraints.getConstraint().addAll(constraints.getConstraint()); + this.constraints.addAll(constraints); } return this; } - public Builder addConstraints(List constraints) { - if (constraints == null) { - return this; - } - - TCapabilityDefinition.Constraints tmp = new TCapabilityDefinition.Constraints(); - tmp.getConstraint().addAll(constraints); - return addConstraints(tmp); - } - public Builder addConstraints(TConstraint constraints) { if (constraints == null) { return this; } - TCapabilityDefinition.Constraints tmp = new TCapabilityDefinition.Constraints(); - tmp.getConstraint().add(constraints); + List tmp = new ArrayList<>(); + tmp.add(constraints); return addConstraints(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCapabilityRef.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCapabilityRef.java index 7ecccc9d07..b1789ed892 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCapabilityRef.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCapabilityRef.java @@ -43,6 +43,11 @@ public class TCapabilityRef implements Serializable { @Deprecated // used for XML deserialization of API request content public TCapabilityRef() { } + public TCapabilityRef(String name, TCapability ref) { + this.name = name; + this.ref = ref; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCondition.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCondition.java index 3397abb719..0d73a178d9 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCondition.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TCondition.java @@ -45,6 +45,11 @@ public class TCondition implements Serializable { @Deprecated // used for XML deserialization of API request content public TCondition() { } + public TCondition(List any, String expressionLanguage) { + this.any = any; + this.expressionLanguage = expressionLanguage; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -62,7 +67,7 @@ public int hashCode() { @NonNull public List getAny() { if (any == null) { - any = new ArrayList(); + any = new ArrayList<>(); } return this.any; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TConstraint.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TConstraint.java index 9c696b748c..0056420808 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TConstraint.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TConstraint.java @@ -46,6 +46,11 @@ public class TConstraint implements Serializable { @Deprecated // used for XML deserialization of API request content public TConstraint() { } + public TConstraint(Object any, String constraintType) { + this.any = any; + this.constraintType = constraintType; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDefinitions.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDefinitions.java index 3595cbefae..52f2a63cf5 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDefinitions.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDefinitions.java @@ -29,6 +29,7 @@ import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlElements; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSchemaType; @@ -62,16 +63,21 @@ * the Definitions are of type tDefinitions. * * This could cause issues when deserializing XML-standard conform Definitions as TDefinitions. - * Therefor all deserialization of user-input that doesn't use winery Definitions as basis needs to be performed by the standard-specific repository implementations + * Therefore, all deserialization of user-input that doesn't use winery Definitions as basis needs to be performed by the standard-specific repository implementations * to correctly handle the discrepancies between the standards. */ public class TDefinitions extends HasId implements HasName, HasTargetNamespace { - @XmlElement(name = "Extensions") - protected TDefinitions.Extensions extensions; + + @XmlElementWrapper(name = "Extensions") + @XmlElement(name = "Extension", required = true) + protected List extensions; + @XmlElement(name = "Import") protected List _import; + @XmlElement(name = "Types") protected TDefinitions.Types types; + @XmlElements( { @XmlElement(name = "RelationshipType", type = TRelationshipType.class), @XmlElement(name = "RelationshipTypeImplementation", type = TRelationshipTypeImplementation.class), @@ -95,6 +101,7 @@ public class TDefinitions extends HasId implements HasName, HasTargetNamespace { @XmlAttribute(name = "name") protected String name; + @XmlAttribute(name = "targetNamespace", required = true) @XmlSchemaType(name = "anyURI") protected String targetNamespace; @@ -166,18 +173,18 @@ public void setElement(TExtensibleElements element) { this.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(element); } - public TDefinitions.@Nullable Extensions getExtensions() { + public List getExtensions() { return extensions; } - public void setExtensions(TDefinitions.Extensions value) { + public void setExtensions(List value) { this.extensions = value; } @NonNull public List getImport() { if (_import == null) { - _import = new ArrayList(); + _import = new ArrayList<>(); } return this._import; } @@ -375,55 +382,6 @@ public void setTargetNamespace(String value) { this.targetNamespace = value; } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "extension" - }) - public static class Extensions implements Serializable { - - @XmlElement(name = "Extension", required = true) - protected List extension; - - /** - * Gets the value of the extension property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link TExtension } - */ - @NonNull - public List getExtension() { - if (extension == null) { - extension = new ArrayList(); - } - return this.extension; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Extensions that = (Extensions) o; - return Objects.equals(extension, that.extension); - } - - @Override - public int hashCode() { - return Objects.hash(extension); - } - } - @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "any" @@ -436,7 +394,7 @@ public static class Types implements Serializable { @NonNull public List getAny() { if (any == null) { - any = new ArrayList(); + any = new ArrayList<>(); } return this.any; } @@ -458,7 +416,7 @@ public int hashCode() { public static class Builder extends HasId.Builder { private final String target_namespace; - private TDefinitions.Extensions extensions; + private List extensions; private List imports; private TDefinitions.Types types; private List serviceTemplates; @@ -575,36 +533,26 @@ public Builder setName(String name) { return self(); } - public Builder addExtensions(TDefinitions.Extensions extensions) { - if (extensions == null || extensions.getExtension().isEmpty()) { + public Builder addExtensions(List extensions) { + if (extensions == null || extensions.isEmpty()) { return self(); } if (this.extensions == null) { this.extensions = extensions; } else { - this.extensions.getExtension().addAll(extensions.getExtension()); + this.extensions.addAll(extensions); } return self(); } - public Builder addExtensions(List extensions) { - if (extensions == null) { - return self(); - } - - TDefinitions.Extensions container = new TDefinitions.Extensions(); - container.getExtension().addAll(extensions); - return addExtensions(container); - } - - public Builder addExtensions(TExtension extensions) { - if (extensions == null) { + public Builder addExtension(TExtension extension) { + if (extension == null) { return self(); } List tmp = new ArrayList<>(); - tmp.add(extensions); + tmp.add(extension); return addExtensions(tmp); } @@ -993,21 +941,21 @@ public TDefinitions build() { public List getServiceTemplateOrNodeTypeOrNodeTypeImplementation() { List tmp = new ArrayList<>(); Stream.of( - serviceTemplates, - nodeTypes, - nodeTypeImplementations, - relationshipTypes, - relationshipTypeImplementations, - requirementTypes, - capabilityTypes, - dataTypes, - artifactTypes, - artifactTemplates, - policyTypes, - policyTemplate, - interfaceTypes, - nonStandardElements - ).filter(Objects::nonNull) + serviceTemplates, + nodeTypes, + nodeTypeImplementations, + relationshipTypes, + relationshipTypeImplementations, + requirementTypes, + capabilityTypes, + dataTypes, + artifactTypes, + artifactTemplates, + policyTypes, + policyTemplate, + interfaceTypes, + nonStandardElements + ).filter(Objects::nonNull) .forEach(tmp::addAll); return tmp; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifact.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifact.java index fc97b0594b..4491c1790d 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifact.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifact.java @@ -14,80 +14,25 @@ package org.eclipse.winery.model.tosca; -import java.io.Serializable; -import java.util.Objects; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; import org.eclipse.winery.model.tosca.visitor.Visitor; -import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tDeploymentArtifact") -public class TDeploymentArtifact extends TExtensibleElements implements HasName, Serializable { - - @XmlAttribute(name = "name", required = true) - protected String name; - @XmlAttribute(name = "artifactType", required = true) - protected QName artifactType; - @XmlAttribute(name = "artifactRef") - protected QName artifactRef; +public class TDeploymentArtifact extends TDeploymentOrImplementationArtifact { @Deprecated // used for XML deserialization of API request content - public TDeploymentArtifact() { } + public TDeploymentArtifact() { + } public TDeploymentArtifact(Builder builder) { super(builder); - this.name = builder.name; - this.artifactType = builder.artifactType; - this.artifactRef = builder.artifactRef; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TDeploymentArtifact)) return false; - TDeploymentArtifact that = (TDeploymentArtifact) o; - return Objects.equals(name, that.name) && - Objects.equals(artifactType, that.artifactType) && - Objects.equals(artifactRef, that.artifactRef); - } - - @Override - public int hashCode() { - return Objects.hash(name, artifactType, artifactRef); - } - - @NonNull - @Override - public String getName() { - return name; - } - - @Override - public void setName(@NonNull String value) { - this.name = Objects.requireNonNull(value); - } - - // apparently this can be null, even though it shouldn't ever be... - @Nullable - public QName getArtifactType() { - return artifactType; - } - - public void setArtifactType(@NonNull QName value) { - this.artifactType = Objects.requireNonNull(value); - } - - @Nullable - public QName getArtifactRef() { - return artifactRef; } public void setArtifactRef(@Nullable QName value) { @@ -98,19 +43,11 @@ public void accept(Visitor visitor) { visitor.visit(this); } - public static class Builder extends TExtensibleElements.Builder { - private final String name; - private final QName artifactType; - private QName artifactRef; + public static class Builder extends TDeploymentOrImplementationArtifact.Builder { public Builder(String name, QName artifactType) { + super(artifactType); this.name = name; - this.artifactType = artifactType; - } - - public Builder setArtifactRef(QName artifactRef) { - this.artifactRef = artifactRef; - return this; } @Override diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifacts.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifacts.java deleted file mode 100644 index 90f02a4fe5..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifacts.java +++ /dev/null @@ -1,131 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; - -/** - *

Java class for tDeploymentArtifacts complex type. - *

- *

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

- *

- * <complexType name="tDeploymentArtifacts">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="DeploymentArtifact" type="{http://docs.oasis-open.org/tosca/ns/2011/12}tDeploymentArtifact"
- * maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tDeploymentArtifacts", propOrder = { - "deploymentArtifact" -}) -public class TDeploymentArtifacts implements Serializable { - - @XmlElement(name = "DeploymentArtifact", required = true) - protected List deploymentArtifact; - - @Deprecated // used for XML deserialization of API request content - public TDeploymentArtifacts() { - } - - public TDeploymentArtifacts(Builder builder) { - this.deploymentArtifact = builder.deploymentArtifact; - } - - /** - * Gets the value of the deploymentArtifact property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link TDeploymentArtifact } - */ - @NonNull - public List getDeploymentArtifact() { - if (deploymentArtifact == null) { - deploymentArtifact = new ArrayList<>(); - } - return this.deploymentArtifact; - } - - /** - * @return deploymentArtifact having the given name. null if not found - */ - @Nullable - public TDeploymentArtifact getDeploymentArtifact(String id) { - Objects.requireNonNull(id); - return this.getDeploymentArtifact().stream() - .filter(x -> id.equals(x.getName())) - .findAny() - .orElse(null); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - TDeploymentArtifacts that = (TDeploymentArtifacts) o; - return Objects.equals(deploymentArtifact, that.deploymentArtifact); - } - - @Override - public int hashCode() { - return Objects.hash(deploymentArtifact); - } - - public static class Builder { - private final List deploymentArtifact; - - public Builder() { - this(new ArrayList<>()); - } - - public Builder(List deploymentArtifact) { - this.deploymentArtifact = deploymentArtifact; - } - - public TDeploymentArtifacts build() { - return new TDeploymentArtifacts(this); - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentOrImplementationArtifact.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentOrImplementationArtifact.java new file mode 100644 index 0000000000..b0e8be2760 --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentOrImplementationArtifact.java @@ -0,0 +1,118 @@ +/******************************************************************************* + * Copyright (c) 2021 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ + +package org.eclipse.winery.model.tosca; + +import java.io.Serializable; +import java.util.Objects; + +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.namespace.QName; + +import org.eclipse.winery.model.tosca.visitor.Visitor; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; + +public abstract class TDeploymentOrImplementationArtifact extends TExtensibleElements implements HasName, Serializable { + + @XmlAttribute(name = "name") + protected String name; + @XmlAttribute(name = "artifactType", required = true) + protected QName artifactType; + @XmlAttribute(name = "artifactRef") + protected QName artifactRef; + + @Deprecated // used for XML deserialization of API request content + public TDeploymentOrImplementationArtifact() { + } + + public TDeploymentOrImplementationArtifact(TDeploymentOrImplementationArtifact.Builder builder) { + super(builder); + this.name = builder.name; + this.artifactType = builder.artifactType; + this.artifactRef = builder.artifactRef; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof TDeploymentArtifact)) return false; + TDeploymentArtifact that = (TDeploymentArtifact) o; + return Objects.equals(name, that.name) && + Objects.equals(artifactType, that.artifactType) && + Objects.equals(artifactRef, that.artifactRef); + } + + @Override + public int hashCode() { + return Objects.hash(name, artifactType, artifactRef); + } + + @NonNull + @Override + public String getName() { + return name; + } + + @Override + public void setName(@NonNull String value) { + this.name = Objects.requireNonNull(value); + } + + // apparently this can be null, even though it shouldn't ever be... + @Nullable + public QName getArtifactType() { + return artifactType; + } + + public void setArtifactType(@NonNull QName value) { + this.artifactType = Objects.requireNonNull(value); + } + + @Nullable + public QName getArtifactRef() { + return artifactRef; + } + + public void setArtifactRef(@Nullable QName value) { + this.artifactRef = value; + } + + public void accept(Visitor visitor) { + visitor.visit(this); + } + + public static class Builder> extends TExtensibleElements.Builder { + + protected final QName artifactType; + protected String name; + protected QName artifactRef; + + public Builder(QName artifactType) { + this.artifactType = artifactType; + } + + public T setArtifactRef(QName artifactRef) { + this.artifactRef = artifactRef; + return self(); + } + + @Override + @SuppressWarnings("unchecked") + public T self() { + return (T) this; + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDocumentation.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDocumentation.java index 1252e7771a..5f5be20217 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDocumentation.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDocumentation.java @@ -52,7 +52,14 @@ public class TDocumentation implements Serializable { protected String lang; @Deprecated // used for XML deserialization of API request content - public TDocumentation() { } + public TDocumentation() { + } + + public TDocumentation(Builder builder) { + this.content = builder.content; + this.source = builder.source; + this.lang = builder.lang; + } @Override public boolean equals(Object o) { @@ -72,7 +79,7 @@ public int hashCode() { @NonNull public List getContent() { if (content == null) { - content = new ArrayList(); + content = new ArrayList<>(); } return this.content; } @@ -98,4 +105,45 @@ public void setLang(@Nullable String value) { public void accept(Visitor visitor) { visitor.visit(this); } + + public static class Builder { + + private List content; + private String source; + private String lang; + + public Builder() { + } + + public Builder(List content) { + this.content = content; + } + + public Builder addContent(List content) { + this.content = content; + return this; + } + + public Builder setSource(String source) { + this.source = source; + return this; + } + + public Builder setLang(String lang) { + this.lang = lang; + return this; + } + + public TDocumentation build() { + return new TDocumentation(this); + } + + public Builder addContent(String documentation) { + if (this.content == null) { + this.content = new ArrayList<>(); + } + this.content.add(documentation); + return this; + } + } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTemplate.java index 892b8f0b24..8f4d7f63af 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTemplate.java @@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; @@ -42,8 +43,6 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tEntityTemplate", propOrder = { @@ -61,13 +60,12 @@ @JsonInclude(JsonInclude.Include.NON_NULL) public abstract class TEntityTemplate extends HasId implements HasType, HasName { - private static final Logger LOGGER = LoggerFactory.getLogger(TEntityTemplate.class); - @XmlElement(name = "Properties") protected TEntityTemplate.Properties properties; - @XmlElement(name = "PropertyConstraints") - protected TEntityTemplate.PropertyConstraints propertyConstraints; + @XmlElementWrapper(name = "PropertyConstraints") + @XmlElement(name = "PropertyConstraint", required = true) + protected List propertyConstraints; // allow empty types to support YAML capability assignments @XmlAttribute(name = "type") @@ -82,7 +80,7 @@ public TEntityTemplate(String id) { super(id); } - public TEntityTemplate(Builder builder) { + public TEntityTemplate(Builder builder) { super(builder); this.properties = builder.properties; this.propertyConstraints = builder.propertyConstraints; @@ -113,15 +111,14 @@ public void setProperties(TEntityTemplate.Properties value) { this.properties = value; } - public TEntityTemplate.@Nullable PropertyConstraints getPropertyConstraints() { + public List getPropertyConstraints() { return propertyConstraints; } - public void setPropertyConstraints(TEntityTemplate.@Nullable PropertyConstraints value) { + public void setPropertyConstraints(List value) { this.propertyConstraints = value; } - @Nullable public QName getType() { return type; } @@ -280,61 +277,11 @@ public int hashCode() { } } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "propertyConstraint" - }) - public static class PropertyConstraints implements Serializable { - - @XmlElement(name = "PropertyConstraint", required = true) - protected List propertyConstraint; - - /** - * Gets the value of the propertyConstraint property. - *

- *

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

- *

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

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

- *

- *

Objects of the following type(s) are allowed in the list {@link TPropertyConstraint } - */ - @NonNull - public List getPropertyConstraint() { - if (propertyConstraint == null) { - propertyConstraint = new ArrayList(); - } - return this.propertyConstraint; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - PropertyConstraints that = (PropertyConstraints) o; - return Objects.equals(propertyConstraint, that.propertyConstraint); - } - - @Override - public int hashCode() { - return Objects.hash(propertyConstraint); - } - - public void accept(Visitor visitor) { - visitor.visit(this); - } - } - @ADR(11) public abstract static class Builder> extends HasId.Builder { private final QName type; private TEntityTemplate.Properties properties; - private TEntityTemplate.PropertyConstraints propertyConstraints; + private List propertyConstraints; public Builder(String id, QName type) { super(id); @@ -353,41 +300,31 @@ public T setProperties(TEntityTemplate.Properties properties) { return self(); } - public T setPropertyConstraints(TEntityTemplate.PropertyConstraints propertyConstraints) { + public T setPropertyConstraints(List propertyConstraints) { this.propertyConstraints = propertyConstraints; return self(); } - public T addPropertyConstraints(TEntityTemplate.PropertyConstraints propertyConstraints) { - if (propertyConstraints == null || propertyConstraints.getPropertyConstraint().isEmpty()) { + public T addPropertyConstraints(List propertyConstraints) { + if (propertyConstraints == null || propertyConstraints.isEmpty()) { return self(); } if (this.propertyConstraints == null) { this.propertyConstraints = propertyConstraints; } else { - this.propertyConstraints.getPropertyConstraint().addAll(propertyConstraints.getPropertyConstraint()); + this.propertyConstraints.addAll(propertyConstraints); } return self(); } - public T addPropertyConstraints(List propertyConstraints) { - if (propertyConstraints == null) { - return self(); - } - - TEntityTemplate.PropertyConstraints tmp = new TEntityTemplate.PropertyConstraints(); - tmp.getPropertyConstraint().addAll(propertyConstraints); - return addPropertyConstraints(tmp); - } - - public T addPropertyConstraints(TPropertyConstraint propertyConstraints) { + public T addPropertyConstraint(TPropertyConstraint propertyConstraints) { if (propertyConstraints == null) { return self(); } - TEntityTemplate.PropertyConstraints tmp = new TEntityTemplate.PropertyConstraints(); - tmp.getPropertyConstraint().add(propertyConstraints); + List tmp = new ArrayList<>(); + tmp.add(propertyConstraints); return addPropertyConstraints(tmp); } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityType.java index 74ca559b51..9480458d03 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityType.java @@ -68,33 +68,37 @@ TPolicyType.class, TDataType.class, }) -public abstract class TEntityType extends TExtensibleElements implements HasName, HasInheritance, HasTargetNamespace { - public static final String NS_SUFFIX_PROPERTIESDEFINITION_WINERY = "propertiesdefinition/winery"; +public abstract class TEntityType extends TExtensibleElementWithTags implements HasName, HasInheritance, HasTargetNamespace { + + public static final String NS_SUFFIX_PROPERTIES_DEFINITION_WINERY = "propertiesdefinition/winery"; - @XmlElement(name = "Tags") - protected TTags tags; @XmlElement(name = "DerivedFrom") protected TEntityType.DerivedFrom derivedFrom; + @XmlElementRef(name = "PropertiesDefinition") @JsonProperty("propertiesDefinition") @JsonSerialize(using = PropertiesDefinitionSerializer.class) protected TEntityType.PropertiesDefinition properties; + @XmlAttribute(name = "name", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String name; + @XmlAttribute(name = "abstract") @XmlJavaTypeAdapter(type = boolean.class, value = BooleanToYesNo.class) @JsonProperty("abstract") @JsonSerialize(using = YesNo.Serializer.class) @JsonDeserialize(using = YesNo.Deserializer.class) protected boolean _abstract; + @XmlAttribute(name = "final") @XmlJavaTypeAdapter(type = boolean.class, value = BooleanToYesNo.class) @JsonProperty("final") @JsonSerialize(using = YesNo.Serializer.class) @JsonDeserialize(using = YesNo.Deserializer.class) protected boolean _final; + @XmlAttribute(name = "targetNamespace") @XmlSchemaType(name = "anyURI") protected String targetNamespace; @@ -102,12 +106,12 @@ public abstract class TEntityType extends TExtensibleElements implements HasName // added to support conversion from/to YAML protected List attributeDefinitions; - @Deprecated // used for XML deserialization of API request content - public TEntityType() { } + // used for XML deserialization of API request content + public TEntityType() { + } - public TEntityType(Builder builder) { + public TEntityType(Builder builder) { super(builder); - this.tags = builder.tags; this.derivedFrom = builder.derivedFrom; this.properties = builder.properties; this.name = builder.name; @@ -145,15 +149,6 @@ public void setAttributeDefinitions(List attributeDefinitio this.attributeDefinitions = attributeDefinitions; } - @Nullable - public TTags getTags() { - return tags; - } - - public void setTags(@Nullable TTags value) { - this.tags = value; - } - public TEntityType.@Nullable DerivedFrom getDerivedFrom() { return derivedFrom; } @@ -198,7 +193,7 @@ public void setAbstract(boolean value) { } public void setAbstract(@Nullable Boolean value) { - this._abstract = value == null ? false : value; + this._abstract = value != null && value; } public boolean getFinal() { @@ -210,10 +205,9 @@ public void setFinal(boolean value) { } public void setFinal(@Nullable Boolean value) { - this._final = value == null ? false : value; + this._final = value != null && value; } - @Nullable public String getTargetNamespace() { return targetNamespace; } @@ -238,18 +232,18 @@ public WinerysPropertiesDefinition getWinerysPropertiesDefinition() { return null; } WinerysPropertiesDefinition res = (WinerysPropertiesDefinition) properties; - // we put defaults if elementname and namespace have not been set + // we put defaults if element name and namespace have not been set if (res.getElementName() == null) { res.setElementName("Properties"); } if (res.getNamespace() == null) { - // we use the targetnamespace of the original element + // we use the target namespace of the original element String ns = this.getTargetNamespace(); if (!ns.endsWith("/")) { ns += "/"; } - ns += NS_SUFFIX_PROPERTIESDEFINITION_WINERY; + ns += NS_SUFFIX_PROPERTIES_DEFINITION_WINERY; res.setNamespace(ns); } return res; @@ -302,18 +296,22 @@ public int hashCode() { return Objects.hash(typeRef); } } - + @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "") public static class YamlPropertyDefinition { + private String name; + @XmlAttribute(name = "type", required = true) private QName type; private String description; private Boolean required; + @XmlElement(name = "default") private Object defaultValue; private YamlPropertyDefinition.Status status; + @XmlElement private List constraints; @@ -322,10 +320,11 @@ public static class YamlPropertyDefinition { @XmlElement(name = "key_schema") private TSchema keySchema; + @SuppressWarnings("unused") public YamlPropertyDefinition() { // added for xml serialization! } - + private YamlPropertyDefinition(Builder builder) { this.name = builder.name; this.type = builder.type; @@ -337,14 +336,14 @@ private YamlPropertyDefinition(Builder builder) { this.keySchema = builder.keySchema; this.entrySchema = builder.entrySchema; } - - @XmlEnum(String.class) + + @XmlEnum() public enum Status { supported, unsupported, experimental, deprecated; - + @Nullable public static Status getStatus(String status) { // Could possibly be replaced by wrapping with Status.getValue(status)? @@ -365,7 +364,7 @@ public static class Builder { private List constraints; private TSchema entrySchema; private TSchema keySchema; - + public Builder(String name) { this.name = name; } @@ -419,7 +418,7 @@ public YamlPropertyDefinition build() { return new YamlPropertyDefinition(this); } } - + public String getName() { return name; } @@ -506,13 +505,13 @@ public void setKeySchema(@Nullable TSchema keySchema) { * This is specifically implemented as an abstract class because JAXB refuses to handle interfaces54 */ @XmlType(name = "") - @XmlSeeAlso({ + @XmlSeeAlso( { YamlPropertiesDefinition.class, WinerysPropertiesDefinition.class, XmlElementDefinition.class, XmlTypeDefinition.class }) - @JsonSubTypes({ + @JsonSubTypes( { @JsonSubTypes.Type(YamlPropertiesDefinition.class), @JsonSubTypes.Type(WinerysPropertiesDefinition.class), @JsonSubTypes.Type(XmlElementDefinition.class), @@ -520,7 +519,8 @@ public void setKeySchema(@Nullable TSchema keySchema) { }) @JsonDeserialize(using = PropertiesDefinitionDeserializer.class) @JsonSerialize(using = PropertiesDefinitionSerializer.class) - public abstract static class PropertiesDefinition { } + public abstract static class PropertiesDefinition { + } @NonNullByDefault @XmlRootElement(name = "PropertiesDefinition") @@ -539,9 +539,8 @@ public void setProperties(List properties) { } /** - * The XML standard defines two mutually exclusive ways of specifying a property. - * Option 1 is a QName pointing to an element, the other option is a type reference, - * see {@link XmlTypeDefinition}. + * The XML standard defines two mutually exclusive ways of specifying a property. Option 1 is a QName pointing to an + * element, the other option is a type reference, see {@link XmlTypeDefinition}. */ @XmlRootElement(name = "PropertiesDefinition") @JsonDeserialize(as = XmlElementDefinition.class) @@ -550,7 +549,8 @@ public static class XmlElementDefinition extends PropertiesDefinition { private QName element; // required for jaxb - public XmlElementDefinition() { } + public XmlElementDefinition() { + } public XmlElementDefinition(QName element) { this.element = element; @@ -566,9 +566,8 @@ public void setElement(QName element) { } /** - * The XML standard defines two mutually exclusive ways of specifying a property. - * Option 1 is a QName pointing to an element, see {@link XmlElementDefinition}, - * the other option is a type reference. + * The XML standard defines two mutually exclusive ways of specifying a property. Option 1 is a QName pointing to an + * element, see {@link XmlElementDefinition}, the other option is a type reference. */ @XmlRootElement(name = "PropertiesDefinition") @JsonDeserialize(as = XmlTypeDefinition.class) @@ -577,7 +576,8 @@ public static class XmlTypeDefinition extends PropertiesDefinition { private QName type; // required for JAXB - public XmlTypeDefinition() { } + public XmlTypeDefinition() { + } public XmlTypeDefinition(QName type) { this.type = type; @@ -593,10 +593,10 @@ public void setType(QName type) { } @ADR(11) - public abstract static class Builder> extends TExtensibleElements.Builder { + public abstract static class Builder> extends TExtensibleElementWithTags.Builder { + private final String name; - private TTags tags; private TEntityType.DerivedFrom derivedFrom; private PropertiesDefinition properties; private boolean abstractValue; @@ -612,7 +612,6 @@ public Builder(TEntityType entityType) { super(entityType); this.name = entityType.getName(); this.derivedFrom = entityType.getDerivedFrom(); - this.addTags(entityType.getTags()); this.abstractValue = entityType.getAbstract(); this.finalValue = entityType.getFinal(); this.targetNamespace = entityType.getTargetNamespace(); @@ -620,11 +619,6 @@ public Builder(TEntityType entityType) { this.attributeDefinitions = entityType.getAttributeDefinitions(); } - public T setTags(TTags tags) { - this.tags = tags; - return self(); - } - public T setDerivedFrom(TEntityType.DerivedFrom derivedFrom) { this.derivedFrom = derivedFrom; return self(); @@ -673,50 +667,6 @@ public T setTargetNamespace(String targetNamespace) { return self(); } - public T addTags(TTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return self(); - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return self(); - } - - public T addTags(List tags) { - if (tags == null) { - return self(); - } - - TTags tmp = new TTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public T addTags(TTag tags) { - if (tags == null) { - return self(); - } - - TTags tmp = new TTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - - public T addTags(String key, String value) { - if (value == null) { - return self(); - } - - TTag tag = new TTag(); - tag.setName(key); - tag.setValue(value); - return addTags(tag); - } - public T setAttributeDefinitions(List attributeDefinitions) { this.attributeDefinitions = attributeDefinitions; return self(); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTypeImplementation.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTypeImplementation.java index 24c516a66e..211e91236a 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTypeImplementation.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TEntityTypeImplementation.java @@ -14,6 +14,7 @@ package org.eclipse.winery.model.tosca; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -21,6 +22,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlTransient; @@ -44,18 +46,19 @@ @XmlSeeAlso( { TNodeTypeImplementation.class, TRelationshipTypeImplementation.class, + TRequiredContainerFeature.class, + TImplementationArtifact.class }) @JsonInclude(JsonInclude.Include.NON_NULL) -public abstract class TEntityTypeImplementation extends TExtensibleElements implements HasName, HasType, HasInheritance, HasTargetNamespace { +public abstract class TEntityTypeImplementation extends TExtensibleElementWithTags implements HasName, HasType, HasInheritance, HasTargetNamespace { - @XmlElement(name = "Tags") - protected TTags tags; + @XmlElementWrapper(name = "RequiredContainerFeatures") + @XmlElement(name = "RequiredContainerFeature", required = true) + protected List requiredContainerFeatures; - @XmlElement(name = "RequiredContainerFeatures") - protected TRequiredContainerFeatures requiredContainerFeatures; - - @XmlElement(name = "ImplementationArtifacts") - protected TImplementationArtifacts implementationArtifacts; + @XmlElementWrapper(name = "ImplementationArtifacts") + @XmlElement(name = "ImplementationArtifact", required = true) + protected List implementationArtifacts; @XmlAttribute(name = "targetNamespace") @XmlSchemaType(name = "anyURI") @@ -88,12 +91,11 @@ public TEntityTypeImplementation() { super(); } - public TEntityTypeImplementation(Builder builder) { + public TEntityTypeImplementation(Builder builder) { super(builder); this.targetNamespace = builder.targetNamespace; this.name = builder.name; this.implementedType = builder.implementedType; - this.tags = builder.tags; this.requiredContainerFeatures = builder.requiredContainerFeatures; this.implementationArtifacts = builder.implementationArtifacts; this._abstract = builder._abstract; @@ -126,29 +128,20 @@ public QName getQName() { } @Nullable - public TTags getTags() { - return tags; - } - - public void setTags(TTags value) { - this.tags = value; - } - - @Nullable - public TRequiredContainerFeatures getRequiredContainerFeatures() { + public List getRequiredContainerFeatures() { return requiredContainerFeatures; } - public void setRequiredContainerFeatures(TRequiredContainerFeatures value) { + public void setRequiredContainerFeatures(List value) { this.requiredContainerFeatures = value; } @Nullable - public TImplementationArtifacts getImplementationArtifacts() { + public List getImplementationArtifacts() { return implementationArtifacts; } - public void setImplementationArtifacts(TImplementationArtifacts value) { + public void setImplementationArtifacts(List value) { this.implementationArtifacts = value; } @@ -161,7 +154,7 @@ public void setAbstract(boolean value) { } public void setAbstract(@Nullable Boolean value) { - this._abstract = value == null ? false : value; + this._abstract = value != null && value; } public boolean getFinal() { @@ -173,7 +166,7 @@ public void setFinal(boolean value) { } public void setFinal(@Nullable Boolean value) { - this._final = value == null ? false : value; + this._final = value != null && value; } @Override @@ -207,17 +200,17 @@ public void setType(QName type) { this.implementedType = type; } - public static abstract class Builder> extends TExtensibleElements.Builder { + public static abstract class Builder> extends TExtensibleElementWithTags.Builder { + private final QName implementedType; private String name; private String targetNamespace; - private TTags tags; - private TRequiredContainerFeatures requiredContainerFeatures; - private TImplementationArtifacts implementationArtifacts; + private List requiredContainerFeatures; + private List implementationArtifacts; private boolean _abstract; private boolean _final; - public Builder(Builder builder, String name, QName implementedType) { + public Builder(Builder builder, String name, QName implementedType) { super(builder); this.name = name; this.implementedType = implementedType; @@ -239,17 +232,7 @@ public T setTargetNamespace(String targetNamespace) { return self(); } - public T setTags(TTags tags) { - this.tags = tags; - return self(); - } - - public T setRequiredContainerFeatures(TRequiredContainerFeatures requiredContainerFeatures) { - this.requiredContainerFeatures = requiredContainerFeatures; - return self(); - } - - public T setImplementationArtifacts(TImplementationArtifacts implementationArtifacts) { + public T setImplementationArtifacts(List implementationArtifacts) { this.implementationArtifacts = implementationArtifacts; return self(); } @@ -269,113 +252,49 @@ public T setFinal(boolean _final) { return self(); } - public T addTags(TTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return self(); - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return self(); - } - - public T addTags(List tags) { - if (tags == null) { - return self(); - } - - TTags tmp = new TTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public T addTags(TTag tags) { - if (tags == null) { - return self(); - } - - TTags tmp = new TTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - - public T addTags(String name, String value) { - if (name == null || name.isEmpty()) { - return self(); - } - - TTag tmp = new TTag(); - tmp.setName(name); - tmp.setValue(value); - return addTags(tmp); - } - - public T addRequiredContainerFeatures(TRequiredContainerFeatures requiredContainerFeatures) { - if (requiredContainerFeatures == null || requiredContainerFeatures.getRequiredContainerFeature().isEmpty()) { + public T addRequiredContainerFeatures(List requiredContainerFeatures) { + if (requiredContainerFeatures == null || requiredContainerFeatures.isEmpty()) { return self(); } if (this.requiredContainerFeatures == null) { this.requiredContainerFeatures = requiredContainerFeatures; } else { - this.requiredContainerFeatures.getRequiredContainerFeature().addAll(requiredContainerFeatures.getRequiredContainerFeature()); + this.requiredContainerFeatures.addAll(requiredContainerFeatures); } return self(); } - public T addRequiredContainerFeatures(List requiredContainerFeatures) { - if (requiredContainerFeatures == null) { + public T addRequiredContainerFeature(TRequiredContainerFeature requiredContainerFeature) { + if (requiredContainerFeature == null) { return self(); } - TRequiredContainerFeatures tmp = new TRequiredContainerFeatures(); - tmp.getRequiredContainerFeature().addAll(requiredContainerFeatures); + List tmp = new ArrayList<>(); + tmp.add(requiredContainerFeature); return addRequiredContainerFeatures(tmp); } - public T addRequiredContainerFeatures(TRequiredContainerFeature requiredContainerFeatures) { - if (requiredContainerFeatures == null) { - return self(); - } - - TRequiredContainerFeatures tmp = new TRequiredContainerFeatures(); - tmp.getRequiredContainerFeature().add(requiredContainerFeatures); - return addRequiredContainerFeatures(tmp); - } - - public T addImplementationArtifacts(TImplementationArtifacts implementationArtifacts) { - if (implementationArtifacts == null || implementationArtifacts.getImplementationArtifact().isEmpty()) { + public T addImplementationArtifacts(List implementationArtifacts) { + if (implementationArtifacts == null || implementationArtifacts.isEmpty()) { return self(); } if (this.implementationArtifacts == null) { this.implementationArtifacts = implementationArtifacts; } else { - this.implementationArtifacts.getImplementationArtifact().addAll(implementationArtifacts.getImplementationArtifact()); + this.implementationArtifacts.addAll(implementationArtifacts); } return self(); } - public T addImplementationArtifacts(List implementationArtifacts) { - if (implementationArtifacts == null) { - return self(); - } - - TImplementationArtifacts tmp = new TImplementationArtifacts(); - tmp.getImplementationArtifact().addAll(implementationArtifacts); - return addImplementationArtifacts(tmp); - } - - public T addImplementationArtifacts(TImplementationArtifacts.ImplementationArtifact implementationArtifacts) { - if (implementationArtifacts == null) { + public T addImplementationArtifact(TImplementationArtifact implementationArtifact) { + if (implementationArtifact == null) { return self(); } - TImplementationArtifacts tmp = new TImplementationArtifacts(); - tmp.getImplementationArtifact().add(implementationArtifacts); + ArrayList tmp = new ArrayList<>(); + tmp.add(implementationArtifact); return addImplementationArtifacts(tmp); } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExportedInterface.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExportedInterface.java index 522b28117b..90f6acd4b9 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExportedInterface.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExportedInterface.java @@ -69,7 +69,7 @@ public int hashCode() { @NonNull public List getOperation() { if (operation == null) { - operation = new ArrayList(); + operation = new ArrayList<>(); } return this.operation; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElementWithTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElementWithTags.java new file mode 100644 index 0000000000..63d3c5970b --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElementWithTags.java @@ -0,0 +1,104 @@ +/******************************************************************************* + * Copyright (c) 2021 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ + +package org.eclipse.winery.model.tosca; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlTransient; + +import io.github.adr.embedded.ADR; +import org.eclipse.jdt.annotation.Nullable; + +@XmlTransient +@XmlAccessorType(XmlAccessType.FIELD) +public abstract class TExtensibleElementWithTags extends TExtensibleElements implements HasTags { + + @XmlElementWrapper(name = "Tags") + @XmlElement(name = "Tag", required = true) + protected List tags; + + public TExtensibleElementWithTags(Builder builder) { + super(builder); + this.tags = builder.tags; + } + + // required for serialization + public TExtensibleElementWithTags() { + } + + public List getTags() { + return tags; + } + + public void setTags(@Nullable List value) { + this.tags = value; + } + + @ADR(11) + public abstract static class Builder> extends TExtensibleElements.Builder { + + private List tags; + + public Builder() { + } + + public Builder(TExtensibleElements.Builder builder) { + super(builder); + } + + public Builder(TExtensibleElements extensibleElements) { + this.addDocumentation(extensibleElements.getDocumentation()); + this.addAny(extensibleElements.getAny()); + this.addOtherAttributes(extensibleElements.getOtherAttributes()); + } + + public T addTags(List tags) { + if (tags == null || tags.isEmpty()) { + return self(); + } + + if (this.tags == null) { + this.tags = tags; + } else { + this.tags.addAll(tags); + } + return self(); + } + + public T addTag(TTag tag) { + if (tag == null) { + return self(); + } + + ArrayList tmp = new ArrayList<>(); + tmp.add(tag); + return addTags(tmp); + } + + public T addTag(String key, String value) { + if (value == null) { + return self(); + } + + TTag tag = new TTag.Builder(key, value).build(); + return addTag(tag); + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElements.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElements.java index 5afaaef14e..1f87082aff 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElements.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensibleElements.java @@ -49,7 +49,6 @@ TRequirementDefinition.class, TExtension.class, TCapabilityDefinition.class, - TExtensions.class, TDeploymentArtifact.class, TPlan.class, TEntityTemplate.class, @@ -71,15 +70,14 @@ public abstract class TExtensibleElements implements Serializable { @NonNull private Map otherAttributes = new HashMap<>(); - @Deprecated // used for XML deserialization of API request content - public TExtensibleElements() { } + // used for XML deserialization of API request content + public TExtensibleElements() { + } - public TExtensibleElements(Builder builder) { + public TExtensibleElements(Builder builder) { this.documentation = builder.documentation; this.any = builder.any; - if (builder.otherAttributes == null) { - this.otherAttributes.clear(); - } else { + if (builder.otherAttributes != null) { this.otherAttributes = builder.otherAttributes; } } @@ -102,7 +100,7 @@ public int hashCode() { @NonNull public List getDocumentation() { if (documentation == null) { - documentation = new ArrayList(); + documentation = new ArrayList<>(); } return this.documentation; } @@ -110,7 +108,7 @@ public List getDocumentation() { @NonNull public List getAny() { if (any == null) { - any = new ArrayList(); + any = new ArrayList<>(); } return this.any; } @@ -136,7 +134,7 @@ public abstract static class Builder> { public Builder() { } - public Builder(Builder builder) { + public Builder(Builder builder) { this.documentation = builder.documentation; this.any = builder.any; this.otherAttributes = builder.otherAttributes; @@ -191,9 +189,11 @@ public T addDocumentation(String documentation) { return self(); } - TDocumentation tmp = new TDocumentation(); - tmp.getContent().add(documentation); - return self().addDocumentation(tmp); + return self().addDocumentation( + new TDocumentation.Builder() + .addContent(documentation) + .build() + ); } public T addDocumentation(Map documentation) { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtension.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtension.java index 7f8b57231e..daa22e8c11 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtension.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtension.java @@ -37,10 +37,13 @@ public class TExtension extends TExtensibleElements { protected boolean mustUnderstand; @Deprecated // used for XML deserialization of API request content - public TExtension() { } + public TExtension() { + } public TExtension(Builder builder) { super(builder); + this.namespace = builder.namespace; + this.mustUnderstand = builder.mustUnderstand; } @Override diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensions.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensions.java deleted file mode 100644 index 222f2c2ebc..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TExtensions.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.winery.model.tosca.visitor.Visitor; - -import org.eclipse.jdt.annotation.NonNull; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tExtensions", propOrder = { - "extension" -}) -public class TExtensions extends TExtensibleElements { - - @XmlElement(name = "Extension", required = true) - protected List extension; - - @Deprecated // used for XML deserialization of API request content - public TExtensions() { } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TExtensions)) return false; - if (!super.equals(o)) return false; - TExtensions that = (TExtensions) o; - return Objects.equals(extension, that.extension); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), extension); - } - - @NonNull - public List getExtension() { - if (extension == null) { - extension = new ArrayList(); - } - return this.extension; - } - - @Override - public void accept(Visitor visitor) { - visitor.visit(this); - } - -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TGroupType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TGroupType.java index 396aeff962..012a9e6a5e 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TGroupType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TGroupType.java @@ -28,6 +28,10 @@ public class TGroupType extends TEntityType { private List members; + @Deprecated + public TGroupType() { + } + protected TGroupType(Builder builder) { super(builder); this.setMembers(builder.members); @@ -103,7 +107,7 @@ public Builder addMembers(List members) { return this; } - public Builder addMembers(QName member) { + public Builder addMember(QName member) { if (member == null) { return this; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementation.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementation.java index a8309ad202..075d4e0bcd 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementation.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementation.java @@ -21,7 +21,7 @@ import javax.xml.bind.annotation.XmlType; /** - * Class to represent an operations implementation in TOSCA YAML. + * Class to represent an operations' implementation in TOSCA YAML. */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "OperationImplementation", propOrder = { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementationArtifact.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementationArtifact.java index e5a4e26081..c854003b99 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementationArtifact.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementationArtifact.java @@ -20,7 +20,6 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @@ -34,13 +33,8 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tImplementationArtifact") -@XmlSeeAlso( { - org.eclipse.winery.model.tosca.TImplementationArtifacts.ImplementationArtifact.class -}) -public class TImplementationArtifact extends TExtensibleElements implements HasName { +public class TImplementationArtifact extends TDeploymentOrImplementationArtifact { - @XmlAttribute(name = "name") - protected String name; @XmlAttribute(name = "interfaceName") @XmlSchemaType(name = "anyURI") protected String interfaceName; @@ -48,21 +42,15 @@ public class TImplementationArtifact extends TExtensibleElements implements HasN @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String operationName; - @XmlAttribute(name = "artifactType", required = true) - protected QName artifactType; - @XmlAttribute(name = "artifactRef") - protected QName artifactRef; @Deprecated // used for XML deserialization of API request content - public TImplementationArtifact() { } + public TImplementationArtifact() { + } - public TImplementationArtifact(Builder builder) { + public TImplementationArtifact(TImplementationArtifact.Builder builder) { super(builder); - this.name = builder.name; this.interfaceName = builder.interfaceName; this.operationName = builder.operationName; - this.artifactType = builder.artifactType; - this.artifactRef = builder.artifactRef; } @Override @@ -88,18 +76,6 @@ public void accept(Visitor visitor) { visitor.visit(this); } - @Nullable - @Override - public String getName() { - return name; - } - - @Override - public void setName(@Nullable String value) { - this.name = value; - } - - @Nullable public String getInterfaceName() { return interfaceName; } @@ -136,42 +112,34 @@ public void setArtifactRef(@Nullable QName value) { this.artifactRef = value; } - public static class Builder> extends TExtensibleElements.Builder> { - private final QName artifactType; + public static class Builder extends TDeploymentOrImplementationArtifact.Builder { - private String name; private String interfaceName; private String operationName; - private QName artifactRef; public Builder(QName artifactType) { - this.artifactType = artifactType; + super(artifactType); } - public T setName(String name) { + public Builder setName(String name) { this.name = name; return self(); } - public T setInterfaceName(String interfaceName) { + public Builder setInterfaceName(String interfaceName) { this.interfaceName = interfaceName; return self(); } - public T setOperationName(String operationName) { + public Builder setOperationName(String operationName) { this.operationName = operationName; return self(); } - public T setArtifactRef(QName artifactRef) { - this.artifactRef = artifactRef; - return self(); - } - @ADR(11) @Override - public T self() { - return (T) this; + public Builder self() { + return this; } public TImplementationArtifact build() { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementationArtifacts.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementationArtifacts.java deleted file mode 100644 index f1e655b0bd..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImplementationArtifacts.java +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.namespace.QName; - -import org.eclipse.jdt.annotation.NonNull; - -/** - *

Java class for tImplementationArtifacts complex type. - *

- *

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

- *

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

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link TImplementationArtifacts.ImplementationArtifact - * } - */ - @NonNull - public List getImplementationArtifact() { - if (implementationArtifact == null) { - implementationArtifact = new ArrayList<>(); - } - return this.implementationArtifact; - } - - /** - *

Java class for anonymous complex type. - *

- *

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

- *

-     * <complexType>
-     *   <complexContent>
-     *     <extension base="{http://docs.oasis-open.org/tosca/ns/2011/12}tImplementationArtifact">
-     *       <anyAttribute processContents='lax' namespace='##other'/>
-     *     </extension>
-     *   </complexContent>
-     * </complexType>
-     * 
- */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class ImplementationArtifact extends TImplementationArtifact { - public ImplementationArtifact() { - - } - - public ImplementationArtifact(Builder builder) { - super(builder); - } - - public static class Builder extends TImplementationArtifact.Builder { - public Builder(QName artifactType) { - super(artifactType); - } - - public Builder self() { - return this; - } - - public ImplementationArtifact build() { - return new ImplementationArtifact(this); - } - } - } - - public static class Builder { - public final List implementationArtifact; - - public Builder(List implementationArtifact) { - this.implementationArtifact = implementationArtifact; - } - - public TImplementationArtifacts build() { - return new TImplementationArtifacts(this); - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImport.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImport.java index e9184bf771..b9271b0509 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImport.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TImport.java @@ -30,6 +30,7 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tImport") public class TImport extends TExtensibleElements { + @XmlAttribute(name = "namespace") @XmlSchemaType(name = "anyURI") protected String namespace; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInstanceState.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInstanceState.java new file mode 100644 index 0000000000..b1d4b8281b --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInstanceState.java @@ -0,0 +1,76 @@ +/******************************************************************************* + * Copyright (c) 2020 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ + +package org.eclipse.winery.model.tosca; + +import java.io.Serializable; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + +import org.eclipse.jdt.annotation.NonNull; + +/** + *

Java class for anonymous complex type. + *

+ *

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

+ *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="state" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +public class TInstanceState implements Serializable { + + @XmlAttribute(name = "state", required = true) + @XmlSchemaType(name = "anyURI") + protected String state; + + @Deprecated + public TInstanceState() { + } + + public TInstanceState(String state) { + this.state = state; + } + + /** + * Gets the value of the state property. + * + * @return possible object is {@link String } + */ + @NonNull + public String getState() { + return state; + } + + /** + * Sets the value of the state property. + * + * @param value allowed object is {@link String } + */ + public void setState(String value) { + this.state = value; + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterface.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterface.java index f6dae1266f..8f872847d1 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterface.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterface.java @@ -49,20 +49,23 @@ */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tInterface", propOrder = { - "operation" + "operations" }) public class TInterface implements HasName, Serializable { + @XmlElement(name = "Operation", required = true) - protected List operation; + protected List operations; + @XmlAttribute(name = "name", required = true) @XmlSchemaType(name = "anyURI") protected String name; @Deprecated // used for XML deserialization of API request content - public TInterface() { } + public TInterface() { + } public TInterface(Builder builder) { - this.operation = builder.operation; + this.operations = builder.operation; this.name = builder.name; } @@ -71,23 +74,22 @@ public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof TInterface)) return false; TInterface that = (TInterface) o; - return Objects.equals(operation, that.operation) && + return Objects.equals(operations, that.operations) && Objects.equals(name, that.name); } @Override public int hashCode() { - return Objects.hash(operation, name); + return Objects.hash(operations, name); } /** * Gets the value of the operation property. *

*

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

*

* For example, to add a new item, do as follows: @@ -97,15 +99,14 @@ public int hashCode() { *

*

*

- * Objects of the following type(s) are allowed in the list - * {@link TOperation } + * Objects of the following type(s) are allowed in the list {@link TOperation } */ @NonNull - public List getOperation() { - if (operation == null) { - operation = new ArrayList(); + public List getOperations() { + if (operations == null) { + operations = new ArrayList<>(); } - return this.operation; + return this.operations; } /** diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterfaceType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterfaceType.java index 6538a2455f..7b0f34254d 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterfaceType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterfaceType.java @@ -37,12 +37,14 @@ // "inputs" }) public class TInterfaceType extends TEntityType { + private String description; //private Map inputs; private Map operations; @Deprecated // used for XML deserialization of API request content - public TInterfaceType() { } + public TInterfaceType() { + } public TInterfaceType(Builder builder) { super(builder); @@ -114,6 +116,7 @@ public void setDescription(String description) { } public static class Builder extends TEntityType.Builder { + public String description; private Map operations; private Map inputs; @@ -180,7 +183,7 @@ public Builder addInputs(String name, TPropertyDefinition input) { return addInputs(Collections.singletonMap(name, input)); } - + @Override public Builder self() { return this; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterfaces.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterfaces.java deleted file mode 100644 index e5aa70ccd7..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TInterfaces.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.jdt.annotation.NonNull; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = { - "_interface" -}) -public class TInterfaces { - - @XmlElement(name = "Interface", required = true) - protected List _interface; - - @Deprecated // used for XML deserialization of API request content - public TInterfaces() { } - - @NonNull - public List getInterface() { - if (_interface == null) { - _interface = new ArrayList<>(); - } - return this._interface; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - TInterfaces that = (TInterfaces) o; - return Objects.equals(_interface, that._interface); - } - - @Override - public int hashCode() { - return Objects.hash(_interface); - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeTemplate.java index b2a7258bff..992ebf8337 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeTemplate.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -24,6 +23,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -52,23 +52,34 @@ property = "fakeJacksonType") public class TNodeTemplate extends RelationshipSourceOrTarget implements HasPolicies { - @XmlElement(name = "Requirements") - protected TNodeTemplate.Requirements requirements; - @XmlElement(name = "Capabilities") - protected TNodeTemplate.Capabilities capabilities; - @XmlElement(name = "Policies") - protected TPolicies policies; - @XmlElement(name = "DeploymentArtifacts") - protected TDeploymentArtifacts deploymentArtifacts; + @XmlElementWrapper(name = "Requirements") + @XmlElement(name = "Requirement") + protected List requirements; + + @XmlElementWrapper(name = "Capabilities") + @XmlElement(name = "Capability") + protected List capabilities; + + @XmlElementWrapper(name = "Policies") + @XmlElement(name = "Policy", required = true) + protected List policies; + + @XmlElementWrapper(name = "DeploymentArtifacts") + @XmlElement(name = "DeploymentArtifact", required = true) + protected List deploymentArtifacts; + @XmlAttribute(name = "name") protected String name; + @XmlAttribute(name = "minInstances") protected Integer minInstances; + @XmlAttribute(name = "maxInstances") protected String maxInstances; + // this element is added to support YAML mode - @XmlElement(name = "Artifacts", required = false) - protected TArtifacts artifacts; + @XmlElement(name = "Artifacts") + protected List artifacts; @Deprecated // used for XML deserialization of API request content public TNodeTemplate() { @@ -122,36 +133,36 @@ public String getFakeJacksonType() { return "nodetemplate"; } - public TNodeTemplate.@Nullable Requirements getRequirements() { + public List getRequirements() { return requirements; } - public void setRequirements(TNodeTemplate.@Nullable Requirements value) { + public void setRequirements(List value) { this.requirements = value; } - public TNodeTemplate.@Nullable Capabilities getCapabilities() { + public List getCapabilities() { return capabilities; } - public void setCapabilities(TNodeTemplate.@Nullable Capabilities value) { + public void setCapabilities(List value) { this.capabilities = value; } - public @Nullable TPolicies getPolicies() { + public List getPolicies() { return policies; } - public void setPolicies(@Nullable TPolicies value) { + public void setPolicies(List value) { this.policies = value; } @Nullable - public TDeploymentArtifacts getDeploymentArtifacts() { + public List getDeploymentArtifacts() { return deploymentArtifacts; } - public void setDeploymentArtifacts(TDeploymentArtifacts value) { + public void setDeploymentArtifacts(List value) { this.deploymentArtifacts = value; } @@ -164,7 +175,6 @@ public void setName(@Nullable String value) { this.name = value; } - @NonNull public int getMinInstances() { if (minInstances == null) { return 1; @@ -237,113 +247,26 @@ public void accept(@NonNull Visitor visitor) { visitor.visit(this); } - public TArtifacts getArtifacts() { + public List getArtifacts() { return artifacts; } - public void setArtifacts(TArtifacts artifacts) { + public void setArtifacts(List artifacts) { this.artifacts = artifacts; } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "capability" - }) - public static class Capabilities implements Serializable { - - @XmlElement(name = "Capability", required = true) - protected List capability; - - /** - * Gets the value of the capability property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link TCapability } - */ - @NonNull - public List getCapability() { - if (capability == null) { - capability = new ArrayList(); - } - return this.capability; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Capabilities that = (Capabilities) o; - return Objects.equals(capability, that.capability); - } - - @Override - public int hashCode() { - return Objects.hash(capability); - } - - public void accept(Visitor visitor) { - visitor.visit(this); - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "requirement" - }) - public static class Requirements implements Serializable { - - @XmlElement(name = "Requirement", required = true) - protected List requirement; - - @NonNull - public List getRequirement() { - if (requirement == null) { - requirement = new ArrayList(); - } - return this.requirement; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Requirements that = (Requirements) o; - return Objects.equals(requirement, that.requirement); - } - - @Override - public int hashCode() { - return Objects.hash(requirement); - } - - public void accept(Visitor visitor) { - visitor.visit(this); - } - } - public static class Builder extends RelationshipSourceOrTarget.Builder { - private Requirements requirements; - private Capabilities capabilities; - private TPolicies policies; - private TDeploymentArtifacts deploymentArtifacts; + + private List requirements; + private List capabilities; + private List policies; + private List deploymentArtifacts; private String name; private Integer minInstances; private String maxInstances; private String x; private String y; - private TArtifacts artifacts; + private List artifacts; public Builder(String id, QName type) { super(id, type); @@ -353,23 +276,31 @@ public Builder(TEntityTemplate entityTemplate) { super(entityTemplate); } - public Builder setRequirements(TNodeTemplate.Requirements requirements) { + public Builder setRequirements(List requirements) { this.requirements = requirements; return this; } - public Builder setCapabilities(TNodeTemplate.Capabilities capabilities) { + public Builder setCapabilities(List capabilities) { this.capabilities = capabilities; return this; } - public Builder setPolicies(TPolicies policies) { + public Builder setPolicies(List policies) { this.policies = policies; return this; } - public Builder setDeploymentArtifacts(TDeploymentArtifacts deploymentArtifacts) { - this.deploymentArtifacts = deploymentArtifacts; + public Builder addDeploymentArtifacts(List deploymentArtifacts) { + if (deploymentArtifacts == null || deploymentArtifacts.isEmpty()) { + return this; + } + + if (this.deploymentArtifacts == null) { + this.deploymentArtifacts = deploymentArtifacts; + } else { + this.deploymentArtifacts.addAll(deploymentArtifacts); + } return this; } @@ -398,73 +329,53 @@ public Builder setY(String y) { return this; } - public Builder addRequirements(TNodeTemplate.Requirements requirements) { - if (requirements == null || requirements.getRequirement().isEmpty()) { + public Builder addRequirements(List requirements) { + if (requirements == null || requirements.isEmpty()) { return this; } if (this.requirements == null) { this.requirements = requirements; } else { - this.requirements.getRequirement().addAll(requirements.getRequirement()); + this.requirements.addAll(requirements); } return this; } - public Builder addRequirements(List requirements) { - if (requirements == null) { - return this; - } - - TNodeTemplate.Requirements tmp = new TNodeTemplate.Requirements(); - tmp.getRequirement().addAll(requirements); - return addRequirements(tmp); - } - - public Builder addRequirements(TRequirement requirements) { + public void addRequirement(TRequirement requirements) { if (requirements == null) { - return this; + return; } - TNodeTemplate.Requirements tmp = new TNodeTemplate.Requirements(); - tmp.getRequirement().add(requirements); - return addRequirements(tmp); + List tmp = new ArrayList<>(); + tmp.add(requirements); + addRequirements(tmp); } - public Builder addCapabilities(TNodeTemplate.Capabilities capabilities) { - if (capabilities == null || capabilities.getCapability().isEmpty()) { + public Builder addCapabilities(List capabilities) { + if (capabilities == null || capabilities.isEmpty()) { return this; } if (this.capabilities == null) { this.capabilities = capabilities; } else { - this.capabilities.getCapability().addAll(capabilities.getCapability()); + this.capabilities.addAll(capabilities); } return this; } - public Builder addCapabilities(List capabilities) { + public void addCapability(TCapability capabilities) { if (capabilities == null) { - return this; + return; } - TNodeTemplate.Capabilities tmp = new TNodeTemplate.Capabilities(); - tmp.getCapability().addAll(capabilities); - return addCapabilities(tmp); + ArrayList tmp = new ArrayList<>(); + tmp.add(capabilities); + addCapabilities(tmp); } - public Builder addCapabilities(TCapability capabilities) { - if (capabilities == null) { - return this; - } - - TNodeTemplate.Capabilities tmp = new TNodeTemplate.Capabilities(); - tmp.getCapability().add(capabilities); - return addCapabilities(tmp); - } - - public Builder addPolicies(TPolicies policies) { + public Builder addPolicies(List policies) { if (policies == null) { return this; } @@ -472,33 +383,23 @@ public Builder addPolicies(TPolicies policies) { if (this.policies == null) { this.policies = policies; } else { - this.policies.getPolicy().addAll(policies.getPolicy()); + this.policies.addAll(policies); } return this; } - public Builder addPolicies(List policies) { + public Builder addPolicy(TPolicy policies) { if (policies == null) { return this; } - TPolicies tmp = new TPolicies(); - tmp.getPolicy().addAll(policies); + List tmp = new ArrayList<>(); + tmp.add(policies); return addPolicies(tmp); } - public Builder addPolicies(TPolicy policies) { - if (policies == null) { - return this; - } - - TPolicies tmp = new TPolicies(); - tmp.getPolicy().add(policies); - return addPolicies(tmp); - } - public Builder setArtifacts(List artifacts) { - this.artifacts = new TArtifacts(artifacts); + this.artifacts = artifacts; return self(); } @@ -510,5 +411,15 @@ public Builder self() { public TNodeTemplate build() { return new TNodeTemplate(this); } + + public Builder addDeploymentArtifact(TDeploymentArtifact deploymentArtifact) { + if (deploymentArtifact == null) { + return this; + } + + List tmp = new ArrayList<>(); + tmp.add(deploymentArtifact); + return addDeploymentArtifacts(tmp); + } } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeType.java index 03185dd2e8..68f2fe20cc 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeType.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -22,11 +21,11 @@ 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.XmlType; import org.eclipse.winery.model.tosca.visitor.Visitor; -import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @@ -39,22 +38,33 @@ "artifacts" }) public class TNodeType extends TEntityType { - @XmlElement(name = "RequirementDefinitions") - protected TNodeType.RequirementDefinitions requirementDefinitions; - @XmlElement(name = "CapabilityDefinitions") - protected TNodeType.CapabilityDefinitions capabilityDefinitions; - @XmlElement(name = "InstanceStates") - protected TTopologyElementInstanceStates instanceStates; - @XmlElement(name = "Interfaces") - protected TInterfaces interfaces; - @XmlElement(name = "Artifacts") - protected TArtifacts artifacts; + + @XmlElementWrapper(name = "RequirementDefinitions") + @XmlElement(name = "RequirementDefinition", required = true) + protected List requirementDefinitions; + + @XmlElementWrapper(name = "CapabilityDefinitions") + @XmlElement(name = "CapabilityDefinition", required = true) + protected List capabilityDefinitions; + + @XmlElementWrapper(name = "InstanceStates") + @XmlElement(name = "InstanceState", required = true) + protected List instanceStates; + + @XmlElementWrapper(name = "Interfaces") + @XmlElement(name = "Interface", required = true) + protected List interfaces; + + @XmlElementWrapper(name = "Artifacts") + @XmlElement(name = "Artifact") + protected List artifacts; // added to support TOSCA YAML protected List interfaceDefinitions; @Deprecated // used for XML deserialization of API request content - public TNodeType() { } + public TNodeType() { + } public TNodeType(Builder builder) { super(builder); @@ -84,39 +94,39 @@ public int hashCode() { return Objects.hash(super.hashCode(), requirementDefinitions, capabilityDefinitions, instanceStates, interfaces); } - public TNodeType.@Nullable RequirementDefinitions getRequirementDefinitions() { + public List getRequirementDefinitions() { return requirementDefinitions; } - public void setRequirementDefinitions(TNodeType.@Nullable RequirementDefinitions value) { + public void setRequirementDefinitions(List value) { this.requirementDefinitions = value; } - public TNodeType.@Nullable CapabilityDefinitions getCapabilityDefinitions() { + public List getCapabilityDefinitions() { return capabilityDefinitions; } - public void setCapabilityDefinitions(TNodeType.@Nullable CapabilityDefinitions value) { + public void setCapabilityDefinitions(List value) { this.capabilityDefinitions = value; } @Nullable - public TTopologyElementInstanceStates getInstanceStates() { + public List getInstanceStates() { return instanceStates; } - public void setInstanceStates(@Nullable TTopologyElementInstanceStates value) { + public void setInstanceStates(List value) { this.instanceStates = value; } - public @Nullable TInterfaces getInterfaces() { + public List getInterfaces() { return interfaces; } - public void setInterfaces(@Nullable TInterfaces value) { + public void setInterfaces(List value) { this.interfaces = value; } - + @Nullable public List getInterfaceDefinitions() { return interfaceDefinitions; @@ -126,11 +136,12 @@ public void setInterfaceDefinitions(List interfaceDefiniti this.interfaceDefinitions = interfaceDefinitions; } - public @Nullable TArtifacts getArtifacts() { + @Nullable + public List getArtifacts() { return artifacts; } - public void setArtifacts(@Nullable TArtifacts value) { + public void setArtifacts(List value) { this.artifacts = value; } @@ -139,75 +150,14 @@ public void accept(Visitor visitor) { visitor.visit(this); } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "capabilityDefinition" - }) - public static class CapabilityDefinitions implements Serializable { - - @XmlElement(name = "CapabilityDefinition", required = true) - protected List capabilityDefinition; - - @NonNull - public List getCapabilityDefinition() { - if (capabilityDefinition == null) { - capabilityDefinition = new ArrayList(); - } - return this.capabilityDefinition; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CapabilityDefinitions that = (CapabilityDefinitions) o; - return Objects.equals(capabilityDefinition, that.capabilityDefinition); - } - - @Override - public int hashCode() { - return Objects.hash(capabilityDefinition); - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "requirementDefinition" - }) - public static class RequirementDefinitions implements Serializable { - - @XmlElement(name = "RequirementDefinition", required = true) - protected List requirementDefinition; - - @NonNull - public List getRequirementDefinition() { - if (requirementDefinition == null) { - requirementDefinition = new ArrayList(); - } - return this.requirementDefinition; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - RequirementDefinitions that = (RequirementDefinitions) o; - return Objects.equals(requirementDefinition, that.requirementDefinition); - } - - @Override - public int hashCode() { - return Objects.hash(requirementDefinition); - } - } - public static class Builder extends TEntityType.Builder { - private RequirementDefinitions requirementDefinitions; - private CapabilityDefinitions capabilityDefinitions; - private TTopologyElementInstanceStates instanceStates; - private TInterfaces interfaces; + + private List requirementDefinitions; + private List capabilityDefinitions; + private List instanceStates; + private List interfaces; private List interfaceDefinitions; - private TArtifacts artifacts; + private List artifacts; public Builder(String name) { super(name); @@ -217,127 +167,97 @@ public Builder(TEntityType entityType) { super(entityType); } - public Builder setRequirementDefinitions(TNodeType.RequirementDefinitions requirementDefinitions) { + public Builder setRequirementDefinitions(List requirementDefinitions) { this.requirementDefinitions = requirementDefinitions; return this; } - public Builder setCapabilityDefinitions(TNodeType.CapabilityDefinitions capabilityDefinitions) { + public Builder setCapabilityDefinitions(List capabilityDefinitions) { this.capabilityDefinitions = capabilityDefinitions; return this; } - public Builder setInstanceStates(TTopologyElementInstanceStates instanceStates) { + public Builder setInstanceStates(List instanceStates) { this.instanceStates = instanceStates; return this; } - public Builder setInterfaces(TInterfaces interfaces) { + public Builder setInterfaces(List interfaces) { this.interfaces = interfaces; return this; } - public Builder setArtifacts(TArtifacts artifacts) { + public Builder setArtifacts(List artifacts) { this.artifacts = artifacts; return this; } - public Builder addRequirementDefinitions(TNodeType.RequirementDefinitions requirementDefinitions) { - if (requirementDefinitions == null || requirementDefinitions.getRequirementDefinition().isEmpty()) { + public Builder addRequirementDefinitions(List requirementDefinitions) { + if (requirementDefinitions == null || requirementDefinitions.isEmpty()) { return this; } if (this.requirementDefinitions == null) { this.requirementDefinitions = requirementDefinitions; } else { - this.requirementDefinitions.getRequirementDefinition().addAll(requirementDefinitions.getRequirementDefinition()); + this.requirementDefinitions.addAll(requirementDefinitions); } return this; } - public Builder addRequirementDefinitions(List requirementDefinitions) { - if (requirementDefinitions == null) { - return this; - } - - TNodeType.RequirementDefinitions tmp = new TNodeType.RequirementDefinitions(); - tmp.getRequirementDefinition().addAll(requirementDefinitions); - return addRequirementDefinitions(tmp); - } - public Builder addRequirementDefinitions(TRequirementDefinition requirementDefinition) { if (requirementDefinition == null) { return this; } - TNodeType.RequirementDefinitions tmp = new TNodeType.RequirementDefinitions(); - tmp.getRequirementDefinition().add(requirementDefinition); - return addRequirementDefinitions(tmp); + List requirements = new ArrayList<>(); + requirements.add(requirementDefinition); + return addRequirementDefinitions(requirements); } - public Builder addCapabilityDefinitions(TNodeType.CapabilityDefinitions capabilityDefinitions) { - if (capabilityDefinitions == null || capabilityDefinitions.getCapabilityDefinition().isEmpty()) { + public Builder addCapabilityDefinitions(List capabilityDefinitions) { + if (capabilityDefinitions == null || capabilityDefinitions.isEmpty()) { return this; } if (this.capabilityDefinitions == null) { this.capabilityDefinitions = capabilityDefinitions; } else { - this.capabilityDefinitions.getCapabilityDefinition().addAll(capabilityDefinitions.getCapabilityDefinition()); + this.capabilityDefinitions.addAll(capabilityDefinitions); } return this; } - public Builder addCapabilityDefinitions(List capabilityDefinitions) { - if (capabilityDefinitions == null) { - return this; - } - - TNodeType.CapabilityDefinitions tmp = new TNodeType.CapabilityDefinitions(); - tmp.getCapabilityDefinition().addAll(capabilityDefinitions); - return addCapabilityDefinitions(tmp); - } - public Builder addCapabilityDefinitions(TCapabilityDefinition capabilityDefinitions) { if (capabilityDefinitions == null) { return this; } - TNodeType.CapabilityDefinitions tmp = new TNodeType.CapabilityDefinitions(); - tmp.getCapabilityDefinition().add(capabilityDefinitions); + List tmp = new ArrayList<>(); + tmp.add(capabilityDefinitions); return addCapabilityDefinitions(tmp); } - public Builder addInterfaces(TInterfaces interfaces) { - if (interfaces == null || interfaces.getInterface().isEmpty()) { + public Builder addInterfaces(List interfaces) { + if (interfaces == null || interfaces.isEmpty()) { return this; } if (this.interfaces == null) { this.interfaces = interfaces; } else { - this.interfaces.getInterface().addAll(interfaces.getInterface()); + this.interfaces.addAll(interfaces); } return this; } - public Builder addInterfaces(List interfaces) { - if (interfaces == null) { - return this; - } - - TInterfaces tmp = new TInterfaces(); - tmp.getInterface().addAll(interfaces); - return addInterfaces(tmp); - } - public Builder addInterfaces(TInterface interfaces) { if (interfaces == null) { return this; } - TInterfaces tmp = new TInterfaces(); - tmp.getInterface().add(interfaces); + List tmp = new ArrayList<>(); + tmp.add(interfaces); return addInterfaces(tmp); } @@ -346,29 +266,19 @@ public Builder setInterfaceDefinitions(List interfaceDefin return self(); } - public Builder addArtifacts(TArtifacts artifacts) { - if (artifacts == null || artifacts.getArtifact().isEmpty()) { + public Builder addArtifacts(List artifacts) { + if (artifacts == null || artifacts.isEmpty()) { return this; } if (this.artifacts == null) { this.artifacts = artifacts; } else { - this.artifacts.getArtifact().addAll(artifacts.getArtifact()); + this.artifacts.addAll(artifacts); } return this; } - public Builder addArtifacts(List artifacts) { - if (artifacts == null) { - return this; - } - - TArtifacts tmp = new TArtifacts(); - tmp.getArtifact().addAll(artifacts); - return addArtifacts(tmp); - } - @Override public Builder self() { return this; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeTypeImplementation.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeTypeImplementation.java index a03952ff48..d073d45cc3 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeTypeImplementation.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TNodeTypeImplementation.java @@ -15,6 +15,7 @@ package org.eclipse.winery.model.tosca; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -82,7 +83,7 @@ public class TNodeTypeImplementation extends TEntityTypeImplementation { @XmlElement(name = "DeploymentArtifacts") - protected TDeploymentArtifacts deploymentArtifacts; + protected List deploymentArtifacts; @XmlElement(name = "DerivedFrom") protected TNodeTypeImplementation.DerivedFrom derivedFrom; @@ -96,7 +97,6 @@ public TNodeTypeImplementation(Builder builder) { super(builder); this.derivedFrom = builder.derivedFrom; this.deploymentArtifacts = builder.deploymentArtifacts; - this.implementationArtifacts = builder.implementationArtifacts; } @Override @@ -125,11 +125,11 @@ public void accept(Visitor visitor) { } @Nullable - public TDeploymentArtifacts getDeploymentArtifacts() { + public List getDeploymentArtifacts() { return deploymentArtifacts; } - public void setDeploymentArtifacts(TDeploymentArtifacts value) { + public void setDeploymentArtifacts(List value) { this.deploymentArtifacts = value; } @@ -226,10 +226,9 @@ public int hashCode() { } public static class Builder extends TEntityTypeImplementation.Builder { + private DerivedFrom derivedFrom; - private TRequiredContainerFeatures requiredContainerFeatures; - private TImplementationArtifacts implementationArtifacts; - private TDeploymentArtifacts deploymentArtifacts; + private List deploymentArtifacts; public Builder(TExtensibleElements extensibleElements, String name, QName implementedNodeType) { super(extensibleElements, name, implementedNodeType); @@ -244,117 +243,31 @@ public Builder setDerivedFrom(TNodeTypeImplementation.DerivedFrom derivedFrom) { return this; } - public Builder setRequiredContainerFeatures(TRequiredContainerFeatures requiredContainerFeatures) { - this.requiredContainerFeatures = requiredContainerFeatures; - return this; - } - - public Builder setImplementationArtifacts(TImplementationArtifacts implementationArtifacts) { - this.implementationArtifacts = implementationArtifacts; - return this; - } - - public Builder setDeploymentArtifacts(TDeploymentArtifacts deploymentArtifacts) { + public Builder setDeploymentArtifacts(List deploymentArtifacts) { this.deploymentArtifacts = deploymentArtifacts; return this; } - public Builder addRequiredContainerFeatures(TRequiredContainerFeatures requiredContainerFeatures) { - if (requiredContainerFeatures == null || requiredContainerFeatures.getRequiredContainerFeature().isEmpty()) { - return this; - } - - if (this.requiredContainerFeatures == null) { - this.requiredContainerFeatures = requiredContainerFeatures; - } else { - this.requiredContainerFeatures.getRequiredContainerFeature().addAll(requiredContainerFeatures.getRequiredContainerFeature()); - } - return this; - } - - public Builder addRequiredContainerFeatures(List requiredContainerFeatures) { - if (requiredContainerFeatures == null) { - return this; - } - - TRequiredContainerFeatures tmp = new TRequiredContainerFeatures(); - tmp.getRequiredContainerFeature().addAll(requiredContainerFeatures); - return addRequiredContainerFeatures(tmp); - } - - public Builder addRequiredContainerFeatures(TRequiredContainerFeature requiredContainerFeatures) { - if (requiredContainerFeatures == null) { - return this; - } - - TRequiredContainerFeatures tmp = new TRequiredContainerFeatures(); - tmp.getRequiredContainerFeature().add(requiredContainerFeatures); - return addRequiredContainerFeatures(tmp); - } - - public Builder addImplementationArtifacts(TImplementationArtifacts implementationArtifacts) { - if (implementationArtifacts == null || implementationArtifacts.getImplementationArtifact().isEmpty()) { - return this; - } - - if (this.implementationArtifacts == null) { - this.implementationArtifacts = implementationArtifacts; - } else { - this.implementationArtifacts.getImplementationArtifact().addAll(implementationArtifacts.getImplementationArtifact()); - } - return this; - } - - public Builder addImplementationArtifacts(List implementationArtifacts) { - if (implementationArtifacts == null) { - return this; - } - - TImplementationArtifacts tmp = new TImplementationArtifacts(); - tmp.getImplementationArtifact().addAll(implementationArtifacts); - return addImplementationArtifacts(tmp); - } - - public Builder addImplementationArtifacts(TImplementationArtifacts.ImplementationArtifact implementationArtifacts) { - if (implementationArtifacts == null) { - return this; - } - - TImplementationArtifacts tmp = new TImplementationArtifacts(); - tmp.getImplementationArtifact().add(implementationArtifacts); - return addImplementationArtifacts(tmp); - } - - public Builder addDeploymentArtifacts(TDeploymentArtifacts deploymentArtifacts) { - if (deploymentArtifacts == null || deploymentArtifacts.getDeploymentArtifact().isEmpty()) { + public Builder addDeploymentArtifacts(List deploymentArtifacts) { + if (deploymentArtifacts == null || deploymentArtifacts.isEmpty()) { return this; } if (this.deploymentArtifacts == null) { this.deploymentArtifacts = deploymentArtifacts; } else { - this.deploymentArtifacts.getDeploymentArtifact().addAll(deploymentArtifacts.getDeploymentArtifact()); + this.deploymentArtifacts.addAll(deploymentArtifacts); } return this; } - public Builder addDeploymentArtifacts(List deploymentArtifacts) { - if (deploymentArtifacts == null) { - return this; - } - - TDeploymentArtifacts tmp = new TDeploymentArtifacts(); - tmp.getDeploymentArtifact().addAll(deploymentArtifacts); - return addDeploymentArtifacts(tmp); - } - - public Builder addDeploymentArtifacts(TDeploymentArtifact deploymentArtifacts) { - if (deploymentArtifacts == null) { + public Builder addDeploymentArtifact(TDeploymentArtifact deploymentArtifact) { + if (deploymentArtifact == null) { return this; } - TDeploymentArtifacts tmp = new TDeploymentArtifacts(); - tmp.getDeploymentArtifact().add(deploymentArtifacts); + List tmp = new ArrayList<>(); + tmp.add(deploymentArtifact); return addDeploymentArtifacts(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TOperation.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TOperation.java index 9013c68fd2..e5d3ae67b8 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TOperation.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TOperation.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -23,6 +22,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; @@ -31,7 +31,6 @@ import org.eclipse.winery.model.tosca.visitor.Visitor; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tOperation", propOrder = { @@ -39,17 +38,23 @@ "outputParameters" }) public class TOperation extends TExtensibleElements { - @XmlElement(name = "InputParameters") - protected TOperation.InputParameters inputParameters; - @XmlElement(name = "OutputParameters") - protected TOperation.OutputParameters outputParameters; + + @XmlElementWrapper(name = "InputParameters") + @XmlElement(name = "InputParameter", required = true) + protected List inputParameters; + + @XmlElementWrapper(name = "OutputParameters") + @XmlElement(name = "OutputParameter", required = true) + protected List outputParameters; + @XmlAttribute(name = "name", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String name; @Deprecated // used for XML deserialization of API request content - public TOperation() { } + public TOperation() { + } public TOperation(Builder builder) { super(builder); @@ -74,19 +79,19 @@ public int hashCode() { return Objects.hash(super.hashCode(), inputParameters, outputParameters, name); } - public TOperation.@Nullable InputParameters getInputParameters() { + public List getInputParameters() { return inputParameters; } - public void setInputParameters(TOperation.@Nullable InputParameters value) { + public void setInputParameters(List value) { this.inputParameters = value; } - public TOperation.@Nullable OutputParameters getOutputParameters() { + public List getOutputParameters() { return outputParameters; } - public void setOutputParameters(TOperation.@Nullable OutputParameters value) { + public void setOutputParameters(List value) { this.outputParameters = value; } @@ -105,150 +110,68 @@ public void accept(Visitor visitor) { visitor.visit(this); } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "inputParameter" - }) - public static class InputParameters implements Serializable { - - @XmlElement(name = "InputParameter", required = true) - protected List inputParameter; - - @NonNull - public List getInputParameter() { - if (inputParameter == null) { - inputParameter = new ArrayList(); - } - return this.inputParameter; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - InputParameters that = (InputParameters) o; - return Objects.equals(inputParameter, that.inputParameter); - } - - @Override - public int hashCode() { - return Objects.hash(inputParameter); - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "outputParameter" - }) - public static class OutputParameters implements Serializable { - - @XmlElement(name = "OutputParameter", required = true) - protected List outputParameter; - - @NonNull - public List getOutputParameter() { - if (outputParameter == null) { - outputParameter = new ArrayList(); - } - return this.outputParameter; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - OutputParameters that = (OutputParameters) o; - return Objects.equals(outputParameter, that.outputParameter); - } - - @Override - public int hashCode() { - return Objects.hash(outputParameter); - } - } - public static class Builder extends TExtensibleElements.Builder { private final String name; - private InputParameters inputParameters; - private OutputParameters outputParameters; + private List inputParameters; + private List outputParameters; public Builder(String name) { this.name = name; } - public Builder setInputParameters(TOperation.InputParameters inputParameters) { + public Builder setInputParameters(List inputParameters) { this.inputParameters = inputParameters; return this; } - public Builder setOutputParameters(TOperation.OutputParameters outputParameters) { + public Builder setOutputParameters(List outputParameters) { this.outputParameters = outputParameters; return this; } - public Builder addInputParameters(TOperation.InputParameters inputParameters) { - if (inputParameters == null || inputParameters.getInputParameter().isEmpty()) { + public Builder addInputParameters(List inputParameters) { + if (inputParameters == null || inputParameters.isEmpty()) { return this; } if (this.inputParameters == null) { this.inputParameters = inputParameters; } else { - this.inputParameters.getInputParameter().addAll(inputParameters.getInputParameter()); + this.inputParameters.addAll(inputParameters); } return this; } - public Builder addInputParameters(List inputParameters) { + public Builder addInputParameter(TParameter inputParameters) { if (inputParameters == null) { return this; } - TOperation.InputParameters tmp = new TOperation.InputParameters(); - tmp.getInputParameter().addAll(inputParameters); + List tmp = new ArrayList<>(); + tmp.add(inputParameters); return addInputParameters(tmp); } - public Builder addInputParameters(TParameter inputParameters) { - if (inputParameters == null) { - return this; - } - - TOperation.InputParameters tmp = new TOperation.InputParameters(); - tmp.getInputParameter().add(inputParameters); - return addInputParameters(tmp); - } - - public Builder addOutputParameters(TOperation.OutputParameters outputParameters) { - if (outputParameters == null || outputParameters.getOutputParameter().isEmpty()) { + public Builder addOutputParameters(List outputParameters) { + if (outputParameters == null || outputParameters.isEmpty()) { return this; } if (this.outputParameters == null) { this.outputParameters = outputParameters; } else { - this.outputParameters.getOutputParameter().addAll(outputParameters.getOutputParameter()); + this.outputParameters.addAll(outputParameters); } return this; } - public Builder addOutputParameters(List outputParameters) { - if (outputParameters == null) { - return this; - } - - TOperation.OutputParameters tmp = new TOperation.OutputParameters(); - tmp.getOutputParameter().addAll(outputParameters); - return addOutputParameters(tmp); - } - - public Builder addOutputParameters(TParameter outputParameters) { + public Builder addOutputParameter(TParameter outputParameters) { if (outputParameters == null) { return this; } - TOperation.OutputParameters tmp = new TOperation.OutputParameters(); - tmp.getOutputParameter().add(outputParameters); + List tmp = new ArrayList<>(); + tmp.add(outputParameters); return addOutputParameters(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPlan.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPlan.java index 3594d8e3d9..54fff1cf9c 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPlan.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPlan.java @@ -15,7 +15,6 @@ package org.eclipse.winery.model.tosca; import java.io.Serializable; -import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -24,6 +23,7 @@ import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlID; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; @@ -48,32 +48,44 @@ }) @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") public class TPlan extends TExtensibleElements { + @XmlElement(name = "Precondition") protected TCondition precondition; - @XmlElement(name = "InputParameters") - protected TPlan.InputParameters inputParameters; - @XmlElement(name = "OutputParameters") - protected TPlan.OutputParameters outputParameters; + + @XmlElementWrapper(name = "InputParameters") + @XmlElement(name = "InputParameter", required = true) + protected List inputParameters; + + @XmlElementWrapper(name = "OutputParameters") + @XmlElement(name = "OutputParameter", required = true) + protected List outputParameters; + @XmlElement(name = "PlanModel") protected TPlan.PlanModel planModel; + @XmlElement(name = "PlanModelReference") protected TPlan.PlanModelReference planModelReference; + @XmlAttribute(name = "id", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlID @XmlSchemaType(name = "ID") protected String id; + @XmlAttribute(name = "name") protected String name; + @XmlAttribute(name = "planType", required = true) @XmlSchemaType(name = "anyURI") protected String planType; + @XmlAttribute(name = "planLanguage", required = true) @XmlSchemaType(name = "anyURI") protected String planLanguage; @Deprecated // used for XML deserialization of API request content - public TPlan() { } + public TPlan() { + } public TPlan(Builder builder) { super(builder); @@ -119,19 +131,19 @@ public void setPrecondition(@Nullable TCondition value) { this.precondition = value; } - public TPlan.@Nullable InputParameters getInputParameters() { + public List getInputParameters() { return inputParameters; } - public void setInputParameters(TPlan.@Nullable InputParameters value) { + public void setInputParameters(List value) { this.inputParameters = value; } - public TPlan.@Nullable OutputParameters getOutputParameters() { + public List getOutputParameters() { return outputParameters; } - public void setOutputParameters(TPlan.@Nullable OutputParameters value) { + public void setOutputParameters(List value) { this.outputParameters = value; } @@ -151,7 +163,6 @@ public void setPlanModelReference(TPlan.@Nullable PlanModelReference value) { this.planModelReference = value; } - @NonNull public String getId() { return id; } @@ -189,108 +200,6 @@ public void setPlanLanguage(@NonNull String value) { public void accept(Visitor visitor) { visitor.visit(this); - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "inputParameter" - }) - public static class InputParameters implements Serializable { - - @XmlElement(name = "InputParameter", required = true) - protected List inputParameter; - - /** - * Gets the value of the inputParameter property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link TParameter } - */ - @NonNull - public List getInputParameter() { - if (inputParameter == null) { - inputParameter = new ArrayList(); - } - return this.inputParameter; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - InputParameters that = (InputParameters) o; - return Objects.equals(inputParameter, that.inputParameter); - } - - @Override - public int hashCode() { - return Objects.hash(inputParameter); - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "outputParameter" - }) - public static class OutputParameters implements Serializable { - - @XmlElement(name = "OutputParameter", required = true) - protected List outputParameter; - - /** - * Gets the value of the outputParameter property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link TParameter } - */ - @NonNull - public List getOutputParameter() { - if (outputParameter == null) { - outputParameter = new ArrayList(); - } - return this.outputParameter; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - OutputParameters that = (OutputParameters) o; - return Objects.equals(outputParameter, that.outputParameter); - } - - @Override - public int hashCode() { - return Objects.hash(outputParameter); - } } @XmlAccessorType(XmlAccessType.FIELD) @@ -349,7 +258,6 @@ public static class PlanModelReference implements Serializable { * * @return possible object is {@link String } */ - @NonNull public String getReference() { return reference; } @@ -378,13 +286,14 @@ public int hashCode() { } public static class Builder extends TExtensibleElements.Builder { + private final String id; private final String planType; private final String planLanguage; private TCondition precondition; - private InputParameters inputParameters; - private OutputParameters outputParameters; + private List inputParameters; + private List outputParameters; private PlanModel planModel; private PlanModelReference planModelReference; private String name; @@ -400,12 +309,12 @@ public Builder setPrecondition(TCondition precondition) { return this; } - public Builder setInputParameters(InputParameters inputParameters) { + public Builder setInputParameters(List inputParameters) { this.inputParameters = inputParameters; return this; } - public Builder setOutputParameters(OutputParameters outputParameters) { + public Builder setOutputParameters(List outputParameters) { this.outputParameters = outputParameters; return this; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPlans.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPlans.java deleted file mode 100644 index 224dc42816..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPlans.java +++ /dev/null @@ -1,125 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; - -/** - *

Java class for tPlans complex type. - *

- *

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

- *

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

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link TPlan } - */ - @NonNull - public List getPlan() { - if (plan == null) { - plan = new ArrayList(); - } - return this.plan; - } - - /** - * Gets the value of the targetNamespace property. - * - * @return possible object is {@link String } - */ - @Nullable - public String getTargetNamespace() { - return targetNamespace; - } - - /** - * Sets the value of the targetNamespace property. - * - * @param value allowed object is {@link String } - */ - public void setTargetNamespace(String value) { - this.targetNamespace = value; - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicies.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicies.java deleted file mode 100644 index 11efd875c2..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicies.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.jdt.annotation.NonNull; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "Policies", propOrder = { - "policy" -}) -public class TPolicies implements Serializable { - - @XmlElement(name = "Policy", required = true) - protected List policy; - - @Deprecated // used for XML deserialization of API request content - public TPolicies() { - } - - public TPolicies(List policies) { - this.policy = policies; - } - - @NonNull - public List getPolicy() { - if (policy == null) { - policy = new ArrayList<>(); - } - return this.policy; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - TPolicies policies = (TPolicies) o; - return Objects.equals(policy, policies.policy); - } - - @Override - public int hashCode() { - return Objects.hash(policy); - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicyTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicyTemplate.java index 0ba958758c..2737d2a025 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicyTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicyTemplate.java @@ -29,11 +29,13 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tPolicyTemplate") public class TPolicyTemplate extends TEntityTemplate { + @XmlAttribute(name = "name") protected String name; @Deprecated // used for XML deserialization of API request content - public TPolicyTemplate() { } + public TPolicyTemplate() { + } public TPolicyTemplate(Builder builder) { super(builder); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicyType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicyType.java index 6c314bf50c..d5f5ab93d2 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicyType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPolicyType.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation + * Copyright (c) 2020-2021 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -14,17 +14,23 @@ package org.eclipse.winery.model.tosca; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; +import javax.xml.namespace.QName; import org.eclipse.winery.model.tosca.visitor.Visitor; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @@ -32,14 +38,18 @@ "appliesTo" }) public class TPolicyType extends TEntityType { - @XmlElement(name = "AppliesTo") - protected TAppliesTo appliesTo; + + @XmlElementWrapper(name = "AppliesTo") + @XmlElement(name = "NodeTypeReference", required = true) + protected List appliesTo; + @XmlAttribute(name = "policyLanguage") @XmlSchemaType(name = "anyURI") protected String policyLanguage; @Deprecated // used for XML deserialization of API request content - public TPolicyType() { } + public TPolicyType() { + } public TPolicyType(Builder builder) { super(builder); @@ -62,12 +72,15 @@ public int hashCode() { return Objects.hash(super.hashCode(), appliesTo, policyLanguage); } - @Nullable - public TAppliesTo getAppliesTo() { + @NonNull + public List getAppliesTo() { + if (appliesTo == null) { + this.appliesTo = new ArrayList<>(); + } return appliesTo; } - public void setAppliesTo(@Nullable TAppliesTo value) { + public void setAppliesTo(@Nullable List value) { this.appliesTo = value; } @@ -85,8 +98,56 @@ public void accept(Visitor visitor) { visitor.visit(this); } + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class NodeTypeReference implements Serializable { + + @XmlAttribute(name = "typeRef", required = true) + protected QName typeRef; + + @SuppressWarnings("unused") + public NodeTypeReference() { + } + + public NodeTypeReference(QName typeRef) { + this.typeRef = typeRef; + } + + /** + * Gets the value of the typeRef property. + * + * @return possible object is {@link QName } + */ + @NonNull + public QName getTypeRef() { + return typeRef; + } + + /** + * Sets the value of the typeRef property. + * + * @param value allowed object is {@link QName } + */ + public void setTypeRef(QName value) { + this.typeRef = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + NodeTypeReference that = (NodeTypeReference) o; + return Objects.equals(typeRef, that.typeRef); + } + + @Override + public int hashCode() { + return Objects.hash(typeRef); + } + } + public static class Builder extends TEntityType.Builder { - private TAppliesTo appliesTo; + private List appliesTo; private String policyLanguage; public Builder(String name) { @@ -97,7 +158,7 @@ public Builder(TEntityType entityType) { super(entityType); } - public Builder setAppliesTo(TAppliesTo appliesTo) { + public Builder setAppliesTo(List appliesTo) { this.appliesTo = appliesTo; return this; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyConstraint.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyConstraint.java index 570d35607b..2c94466574 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyConstraint.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyConstraint.java @@ -35,6 +35,11 @@ public class TPropertyConstraint extends TConstraint { @Deprecated // used for XML deserialization of API request content public TPropertyConstraint() { } + public TPropertyConstraint(Object any, String constraintType, String property) { + super(any, constraintType); + this.property = property; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyDefinition.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyDefinition.java index 9926230bb4..b2c82dcdc7 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyDefinition.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyDefinition.java @@ -35,6 +35,7 @@ "outputs" }) public class TPropertyDefinition implements HasName, Serializable { + private String name; private String type; private String description; @@ -42,7 +43,8 @@ public class TPropertyDefinition implements HasName, Serializable { private List outputs; @Deprecated // used for XML deserialization of API request content - public TPropertyDefinition() { } + public TPropertyDefinition() { + } public String getType() { return type; @@ -59,16 +61,30 @@ public String getName() { @Override public void setName(String value) { + this.name = name; + } + public String getDescription() { + return description; } - @Override - public String getIdFromIdOrNameField() { - return null; + public void setDescription(String description) { + this.description = description; } - @Override - public void setId(String id) { + 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; } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyMapping.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyMapping.java index 339f84eb63..a539b1ce7a 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyMapping.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TPropertyMapping.java @@ -50,7 +50,14 @@ public class TPropertyMapping implements Serializable { protected String targetPropertyRef; @Deprecated // used for XML deserialization of API request content - public TPropertyMapping() { } + public TPropertyMapping() { + } + + public TPropertyMapping(@NonNull String serviceTemplatePropertyRef, @NonNull HasId targetObjectRef, @NonNull String targetPropertyRef) { + this.serviceTemplatePropertyRef = serviceTemplatePropertyRef; + this.targetObjectRef = targetObjectRef; + this.targetPropertyRef = targetPropertyRef; + } @Override public boolean equals(Object o) { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRelationshipTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRelationshipTemplate.java index c5400b336f..20fe4c1dad 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRelationshipTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRelationshipTemplate.java @@ -24,6 +24,7 @@ import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlIDREF; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; @@ -52,13 +53,17 @@ public class TRelationshipTemplate extends TEntityTemplate implements HasPolicie @XmlElement(name = "SourceElement", required = true) // AD: We need to combine source or target due to multi-inheritance - protected TRelationshipTemplate.@NonNull SourceOrTargetElement sourceElement; + protected TRelationshipTemplate.SourceOrTargetElement sourceElement; + @XmlElement(name = "TargetElement", required = true) - protected TRelationshipTemplate.@NonNull SourceOrTargetElement targetElement; + protected TRelationshipTemplate.SourceOrTargetElement targetElement; + @XmlElement(name = "RelationshipConstraints") protected TRelationshipTemplate.RelationshipConstraints relationshipConstraints; - @XmlElement(name = "Policies") - protected TPolicies policies; + + @XmlElementWrapper(name = "Policies") + @XmlElement(name = "Policy", required = true) + protected List policies; @XmlAttribute(name = "name") protected String name; @@ -160,7 +165,7 @@ public static class RelationshipConstraints implements Serializable { public List getRelationshipConstraint() { if (relationshipConstraint == null) { - relationshipConstraint = new ArrayList(); + relationshipConstraint = new ArrayList<>(); } return this.relationshipConstraint; } @@ -255,9 +260,15 @@ public static class SourceOrTargetElement implements Serializable { @XmlIDREF @XmlSchemaType(name = "IDREF") @JsonIdentityReference(alwaysAsId = true) - @NonNull private RelationshipSourceOrTarget ref; + public SourceOrTargetElement() { + } + + public SourceOrTargetElement(@NonNull RelationshipSourceOrTarget ref) { + this.ref = ref; + } + public RelationshipSourceOrTarget getRef() { return ref; } @@ -280,25 +291,30 @@ public int hashCode() { } } - public TPolicies getPolicies() { + public List getPolicies() { return policies; } - public void setPolicies(TPolicies policies) { + public void setPolicies(List policies) { this.policies = policies; } public static class Builder extends TEntityTemplate.Builder { - private final SourceOrTargetElement sourceElement; - private final SourceOrTargetElement targetElement; + + private SourceOrTargetElement sourceElement; + private SourceOrTargetElement targetElement; private RelationshipConstraints relationshipConstraints; private String name; - private TPolicies policies; + private List policies; - public Builder(String id, QName type, TRelationshipTemplate.SourceOrTargetElement sourceElement, TRelationshipTemplate.SourceOrTargetElement targetElement) { + public Builder(String id, QName type, RelationshipSourceOrTarget sourceElement, RelationshipSourceOrTarget targetElement) { super(id, type); - this.sourceElement = sourceElement; - this.targetElement = targetElement; + if (sourceElement != null) { + this.sourceElement = new SourceOrTargetElement(sourceElement); + } + if (targetElement != null) { + this.targetElement = new SourceOrTargetElement(targetElement); + } } public Builder setRelationshipConstraints(RelationshipConstraints relationshipConstraints) { @@ -353,7 +369,7 @@ public TRelationshipTemplate build() { return new TRelationshipTemplate(this); } - public void setPolicies(TPolicies policies) { + public void setPolicies(List policies) { this.policies = policies; } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRelationshipType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRelationshipType.java index 57b1045d1c..cbcfeb6c5a 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRelationshipType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRelationshipType.java @@ -15,6 +15,7 @@ package org.eclipse.winery.model.tosca; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -22,6 +23,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -45,19 +47,29 @@ public class TRelationshipType extends TEntityType { @XmlElement(name = "InstanceStates") - protected TTopologyElementInstanceStates instanceStates; - @XmlElement(name = "Interfaces", namespace = Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE) - protected TInterfaces interfaces; - @XmlElement(name = "SourceInterfaces") - protected TInterfaces sourceInterfaces; - @XmlElement(name = "TargetInterfaces") - protected TInterfaces targetInterfaces; + protected List instanceStates; + + @XmlElementWrapper(name = "Interfaces", namespace = Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE) + @XmlElement(name = "Interface", required = true) + protected List interfaces; + + @XmlElementWrapper(name = "SourceInterfaces") + @XmlElement(name = "Interface") + protected List sourceInterfaces; + + @XmlElementWrapper(name = "TargetInterfaces") + @XmlElement(name = "Interface") + protected List targetInterfaces; + @XmlElement(name = "InterfaceDefinitions") protected List interfaceDefinitions; + @XmlElement(name = "ValidSource") protected TRelationshipType.ValidSource validSource; + @XmlElement(name = "ValidTarget") protected TRelationshipType.ValidTarget validTarget; + // related to YAML 1.3 // https://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.3/os/TOSCA-Simple-Profile-YAML-v1.3-os.html#DEFN_ENTITY_RELATIONSHIP_TYPE @XmlElement(name = "ValidTargetList") @@ -100,36 +112,38 @@ public int hashCode() { } @Nullable - public TTopologyElementInstanceStates getInstanceStates() { + public List getInstanceStates() { return instanceStates; } - public void setInstanceStates(@Nullable TTopologyElementInstanceStates value) { + public void setInstanceStates(List value) { this.instanceStates = value; } @Nullable - public TInterfaces getInterfaces() { + public List getInterfaces() { return interfaces; } - public void setInterfaces(@Nullable TInterfaces interfaces) { + public void setInterfaces(List interfaces) { this.interfaces = interfaces; } - public @Nullable TInterfaces getSourceInterfaces() { + @Nullable + public List getSourceInterfaces() { return sourceInterfaces; } - public void setSourceInterfaces(@Nullable TInterfaces value) { + public void setSourceInterfaces(List value) { this.sourceInterfaces = value; } - public @Nullable TInterfaces getTargetInterfaces() { + @Nullable + public List getTargetInterfaces() { return targetInterfaces; } - public void setTargetInterfaces(@Nullable TInterfaces value) { + public void setTargetInterfaces(List value) { this.targetInterfaces = value; } @@ -235,10 +249,10 @@ public int hashCode() { } public static class Builder extends TEntityType.Builder { - private TTopologyElementInstanceStates instanceStates; - private TInterfaces interfaces; - private TInterfaces sourceInterfaces; - private TInterfaces targetInterfaces; + private List instanceStates; + private List interfaces; + private List sourceInterfaces; + private List targetInterfaces; private List interfaceDefinitions; private ValidSource validSource; private ValidTarget validTarget; @@ -252,17 +266,17 @@ public Builder(TEntityType entityType) { super(entityType); } - public Builder setInstanceStates(TTopologyElementInstanceStates instanceStates) { + public Builder setInstanceStates(List instanceStates) { this.instanceStates = instanceStates; return this; } - public Builder setSourceInterfaces(TInterfaces sourceInterfaces) { + public Builder setSourceInterfaces(List sourceInterfaces) { this.sourceInterfaces = sourceInterfaces; return this; } - public Builder setTargetInterfaces(TInterfaces targetInterfaces) { + public Builder setTargetInterfaces(List targetInterfaces) { this.targetInterfaces = targetInterfaces; return this; } @@ -302,126 +316,55 @@ public Builder setValidTargetList(List validTargetList) { return this; } - public Builder addValidTargetsToList(List validTargetList) { - if (validTargetList == null) { - return this; - } - if (this.validTargetList == null) { - this.validTargetList = validTargetList; - } else { - this.validTargetList.addAll(validTargetList); - } - return this; - } - - public Builder addValidTargetToList(QName validTarget) { - if (validTarget == null) { - return this; - } - - this.validTargetList.add(validTarget); - return this; - } - - public Builder addInterfaces(TInterfaces interfaces) { - if (interfaces == null || interfaces.getInterface().isEmpty()) { + public Builder addInterfaces(List interfaces) { + if (interfaces == null || interfaces.isEmpty()) { return this; } if (this.interfaces == null) { this.interfaces = interfaces; } else { - this.interfaces.getInterface().addAll(interfaces.getInterface()); + this.interfaces.addAll(interfaces); } return this; } - public Builder addInterfaces(List interfaces) { - if (interfaces == null) { - return this; - } - - TInterfaces tmp = new TInterfaces(); - tmp.getInterface().addAll(interfaces); - return addInterfaces(tmp); - } - public Builder addInterfaces(TInterface interfaces) { if (interfaces == null) { return this; } - TInterfaces tmp = new TInterfaces(); - tmp.getInterface().add(interfaces); + List tmp = new ArrayList<>(); + tmp.add(interfaces); return addInterfaces(tmp); } - public Builder addSourceInterfaces(TInterfaces sourceInterfaces) { - if (sourceInterfaces == null || sourceInterfaces.getInterface().isEmpty()) { + public Builder addSourceInterfaces(List sourceInterfaces) { + if (sourceInterfaces == null || sourceInterfaces.isEmpty()) { return this; } if (this.sourceInterfaces == null) { this.sourceInterfaces = sourceInterfaces; } else { - this.sourceInterfaces.getInterface().addAll(sourceInterfaces.getInterface()); + this.sourceInterfaces.addAll(sourceInterfaces); } return this; } - public Builder addSourceInterfaces(List sourceInterfaces) { - if (sourceInterfaces == null) { - return this; - } - - TInterfaces tmp = new TInterfaces(); - tmp.getInterface().addAll(sourceInterfaces); - return addSourceInterfaces(tmp); - } - - public Builder addSourceInterfaces(TInterface sourceInterfaces) { - if (sourceInterfaces == null) { - return this; - } - - TInterfaces tmp = new TInterfaces(); - tmp.getInterface().add(sourceInterfaces); - return addSourceInterfaces(tmp); - } - - public Builder addTargetInterfaces(TInterfaces targetInterfaces) { - if (targetInterfaces == null || targetInterfaces.getInterface().isEmpty()) { + public Builder addTargetInterfaces(List targetInterfaces) { + if (targetInterfaces == null || targetInterfaces.isEmpty()) { return this; } if (this.targetInterfaces == null) { this.targetInterfaces = targetInterfaces; } else { - this.targetInterfaces.getInterface().addAll(targetInterfaces.getInterface()); + this.targetInterfaces.addAll(targetInterfaces); } return this; } - public Builder addTargetInterfaces(List targetInterfaces) { - if (targetInterfaces == null) { - return this; - } - - TInterfaces tmp = new TInterfaces(); - tmp.getInterface().addAll(targetInterfaces); - return addTargetInterfaces(tmp); - } - - public Builder addTargetInterfaces(TInterface targetInterfaces) { - if (targetInterfaces == null) { - return this; - } - - TInterfaces tmp = new TInterfaces(); - tmp.getInterface().add(targetInterfaces); - return addTargetInterfaces(tmp); - } - public Builder setInterfaceDefinitions(List interfaceDefinitions) { this.interfaceDefinitions = interfaceDefinitions; return self(); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequiredContainerFeature.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequiredContainerFeature.java index 61c22d7dfe..9bab3051c7 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequiredContainerFeature.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequiredContainerFeature.java @@ -51,6 +51,10 @@ public class TRequiredContainerFeature implements Serializable { @Deprecated // used for XML deserialization of API request content public TRequiredContainerFeature() { } + public TRequiredContainerFeature(String feature) { + this.feature = feature; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequiredContainerFeatures.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequiredContainerFeatures.java deleted file mode 100644 index 497eaf77f5..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequiredContainerFeatures.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.jdt.annotation.NonNull; - -/** - *

Java class for tRequiredContainerFeatures complex type. - *

- *

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

- *

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

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link TRequiredContainerFeature } - */ - @NonNull - public List getRequiredContainerFeature() { - if (requiredContainerFeature == null) { - requiredContainerFeature = new ArrayList(); - } - return this.requiredContainerFeature; - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementDefinition.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementDefinition.java index df33776ab2..33653ef90d 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementDefinition.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementDefinition.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -23,6 +22,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -36,26 +36,36 @@ "constraints" }) public class TRequirementDefinition extends TExtensibleElements { - @XmlElement(name = "Constraints") - protected TRequirementDefinition.Constraints constraints; + + @XmlElementWrapper(name = "Constraints") + @XmlElement(name = "Constraint", required = true) + protected List constraints; + @XmlAttribute(name = "name", required = true) protected String name; + @XmlAttribute(name = "requirementType") protected QName requirementType; + @XmlAttribute(name = "lowerBound") protected Integer lowerBound; + @XmlAttribute(name = "upperBound") protected String upperBound; + // the following attributes are introduced to support the YAML specs @XmlAttribute(name = "capability") private QName capability; + @XmlAttribute(name = "node") private QName node; + @XmlAttribute(name = "relationship") private QName relationship; @Deprecated // used for XML deserialization of API request content - public TRequirementDefinition() { } + public TRequirementDefinition() { + } public TRequirementDefinition(Builder builder) { super(builder); @@ -92,11 +102,11 @@ public void accept(Visitor visitor) { visitor.visit(this); } - public TRequirementDefinition.@Nullable Constraints getConstraints() { + public List getConstraints() { return constraints; } - public void setConstraints(TRequirementDefinition.@Nullable Constraints value) { + public void setConstraints(List value) { this.constraints = value; } @@ -120,7 +130,6 @@ public void setRequirementType(@NonNull QName value) { this.requirementType = value; } - @NonNull public int getLowerBound() { if (lowerBound == null) { return 1; @@ -170,41 +179,10 @@ public void setRelationship(QName relationship) { this.relationship = relationship; } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "constraint" - }) - public static class Constraints implements Serializable { - - @XmlElement(name = "Constraint", required = true) - protected List constraint; - - @NonNull - public List getConstraint() { - if (constraint == null) { - constraint = new ArrayList(); - } - return this.constraint; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Constraints that = (Constraints) o; - return Objects.equals(constraint, that.constraint); - } - - @Override - public int hashCode() { - return Objects.hash(constraint); - } - } - public static class Builder extends TExtensibleElements.Builder { private final String name; private final QName requirementType; - private Constraints constraints; + private List constraints; private Integer lowerBound; private String upperBound; private QName capability; @@ -223,7 +201,7 @@ public Builder(String name, QName requirementType) { this.requirementType = requirementType; } - public Builder setConstraints(TRequirementDefinition.Constraints constraints) { + public Builder setConstraints(List constraints) { this.constraints = constraints; return this; } @@ -253,36 +231,26 @@ public Builder setRelationship(QName relationship) { return self(); } - public Builder addConstraints(TRequirementDefinition.Constraints constraints) { - if (constraints == null || constraints.getConstraint().isEmpty()) { + public Builder addConstraints(List constraints) { + if (constraints == null || constraints.isEmpty()) { return this; } if (this.constraints == null) { this.constraints = constraints; } else { - this.constraints.getConstraint().addAll(constraints.getConstraint()); + this.constraints.addAll(constraints); } return this; } - public Builder addConstraints(List constraints) { - if (constraints == null) { - return this; - } - - TRequirementDefinition.Constraints tmp = new TRequirementDefinition.Constraints(); - tmp.getConstraint().addAll(constraints); - return addConstraints(tmp); - } - - public Builder addConstraints(TConstraint constraints) { + public Builder addConstraint(TConstraint constraints) { if (constraints == null) { return this; } - TRequirementDefinition.Constraints tmp = new TRequirementDefinition.Constraints(); - tmp.getConstraint().add(constraints); + List tmp = new ArrayList<>(); + tmp.add(constraints); return addConstraints(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementRef.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementRef.java index a5d0ef1725..f4fb0b342e 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementRef.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementRef.java @@ -43,6 +43,11 @@ public class TRequirementRef implements Serializable { @Deprecated // used for XML deserialization of API request content public TRequirementRef() { } + public TRequirementRef(String name, TRequirement ref) { + this.name = name; + this.ref = ref; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementType.java index bbe31e9c5d..e32ea18ea5 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TRequirementType.java @@ -29,11 +29,13 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tRequirementType") public class TRequirementType extends TEntityType { + @XmlAttribute(name = "requiredCapabilityType") protected QName requiredCapabilityType; @Deprecated // used for XML deserialization of API request content - public TRequirementType() { } + public TRequirementType() { + } public TRequirementType(Builder builder) { super(builder); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TServiceTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TServiceTemplate.java index 0ddc164e80..c437a0a2ed 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TServiceTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TServiceTemplate.java @@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -37,10 +38,7 @@ "topologyTemplate", "plans" }) -public class TServiceTemplate extends HasId implements HasName, HasTargetNamespace, HasTags { - - @XmlElement(name = "Tags") - protected TTags tags; +public class TServiceTemplate extends HasIdAndTags implements HasName, HasTargetNamespace { @XmlElement(name = "BoundaryDefinitions") protected TBoundaryDefinitions boundaryDefinitions; @@ -48,8 +46,9 @@ public class TServiceTemplate extends HasId implements HasName, HasTargetNamespa @XmlElement(name = "TopologyTemplate", required = true) protected TTopologyTemplate topologyTemplate; - @XmlElement(name = "Plans") - protected TPlans plans; + @XmlElementWrapper(name = "Plans") + @XmlElement(name = "Plan", required = true) + protected List plans; @XmlAttribute(name = "name") protected String name; @@ -67,7 +66,6 @@ public TServiceTemplate() { public TServiceTemplate(Builder builder) { super(builder); - this.tags = builder.tags; this.boundaryDefinitions = builder.boundaryDefinitions; this.topologyTemplate = builder.topologyTemplate; this.plans = builder.plans; @@ -100,16 +98,6 @@ public int hashCode() { ); } - @Nullable - @Override - public TTags getTags() { - return tags; - } - - public void setTags(@Nullable TTags value) { - this.tags = value; - } - @Nullable public TBoundaryDefinitions getBoundaryDefinitions() { return boundaryDefinitions; @@ -136,11 +124,11 @@ public void setTopologyTemplate(@Nullable TTopologyTemplate value) { } @Nullable - public TPlans getPlans() { + public List getPlans() { return plans; } - public void setPlans(@Nullable TPlans value) { + public void setPlans(List value) { this.plans = value; } @@ -175,12 +163,11 @@ public void accept(Visitor visitor) { visitor.visit(this); } - public static class Builder extends HasId.Builder { + public static class Builder extends HasIdAndTags.Builder { private final TTopologyTemplate topologyTemplate; - private TTags tags; private TBoundaryDefinitions boundaryDefinitions; - private TPlans plans; + private List plans; private String name; private String targetNamespace; private QName substitutableNodeType; @@ -195,17 +182,12 @@ public Builder(String id, TTopologyTemplate topologyTemplate) { this.topologyTemplate = topologyTemplate; } - public Builder setTags(TTags tags) { - this.tags = tags; - return this; - } - public Builder setBoundaryDefinitions(TBoundaryDefinitions boundaryDefinitions) { this.boundaryDefinitions = boundaryDefinitions; return this; } - public Builder setPlans(TPlans plans) { + public Builder setPlans(List plans) { this.plans = plans; return this; } @@ -225,39 +207,6 @@ public Builder setSubstitutableNodeType(QName substitutableNodeType) { return this; } - public Builder addTags(TTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return this; - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return this; - } - - public Builder addTags(List tags) { - if (tags == null) { - return this; - } - - TTags tmp = new TTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public Builder addTags(TTag tags) { - if (tags == null) { - return this; - } - - TTags tmp = new TTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - @Override public Builder self() { return this; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTag.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTag.java index 6f5ad30285..4ece15bf43 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTag.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTag.java @@ -38,7 +38,8 @@ public class TTag implements Serializable { protected String value; @Deprecated // used for XML deserialization of API request content - public TTag() { } + public TTag() { + } public TTag(Builder builder) { this.name = Objects.requireNonNull(builder.name); @@ -84,17 +85,13 @@ public void accept(Visitor visitor) { } public static class Builder { + private String name; private String value; - public Builder setName(String name) { + public Builder(String name, String value) { this.name = name; - return this; - } - - public Builder setValue(String value) { this.value = value; - return this; } public TTag build() { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTags.java deleted file mode 100644 index fed8e7ea91..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTags.java +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.jdt.annotation.NonNull; - -/** - *

Java class for tTags complex type. - *

- *

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

- *

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

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link TTag } - */ - @NonNull - public List getTag() { - if (tag == null) { - tag = new ArrayList(); - } - return this.tag; - } - - public static class Builder { - private List tag; - - public Builder() { - - } - - public Builder setTag(List tag) { - this.tag = tag; - return this; - } - - public Builder addTag(List tag) { - if (tag == null) { - return this; - } - - if (this.tag == null) { - this.tag = tag; - } else { - this.tag.addAll(tag); - } - return this; - } - - public Builder addTag(TTag tag) { - if (tag == null) { - return this; - } - - List tmp = new ArrayList<>(); - tmp.add(tag); - return addTag(tmp); - } - - public Builder addTag(String name, String value) { - if (name == null || name.isEmpty()) { - return this; - } - - TTag tag = new TTag(); - tag.setName(name); - tag.setValue(value); - return addTag(tag); - } - - public TTags build() { - return new TTags(this); - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyElementInstanceStates.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyElementInstanceStates.java deleted file mode 100644 index 95b8b1f44e..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TTopologyElementInstanceStates.java +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.jdt.annotation.NonNull; - -/** - *

Java class for tTopologyElementInstanceStates complex type. - *

- *

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

- *

- * <complexType name="tTopologyElementInstanceStates">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="InstanceState" maxOccurs="unbounded">
- *           <complexType>
- *             <complexContent>
- *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *                 <attribute name="state" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
- *               </restriction>
- *             </complexContent>
- *           </complexType>
- *         </element>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tTopologyElementInstanceStates", propOrder = { - "instanceState" -}) -public class TTopologyElementInstanceStates implements Serializable { - - @XmlElement(name = "InstanceState", required = true) - protected List instanceState; - - @Deprecated // used for XML deserialization of API request content - public TTopologyElementInstanceStates() { } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof TTopologyElementInstanceStates)) return false; - TTopologyElementInstanceStates that = (TTopologyElementInstanceStates) o; - return Objects.equals(instanceState, that.instanceState); - } - - @Override - public int hashCode() { - return Objects.hash(instanceState); - } - - /** - * Gets the value of the instanceState property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link TTopologyElementInstanceStates.InstanceState } - */ - @NonNull - public List getInstanceState() { - if (instanceState == null) { - instanceState = new ArrayList<>(); - } - return this.instanceState; - } - - /** - *

Java class for anonymous complex type. - *

- *

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

- *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="state" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class InstanceState implements Serializable { - - @XmlAttribute(name = "state", required = true) - @XmlSchemaType(name = "anyURI") - protected String state; - - /** - * Gets the value of the state property. - * - * @return possible object is {@link String } - */ - @NonNull - public String getState() { - return state; - } - - /** - * Sets the value of the state property. - * - * @param value allowed object is {@link String } - */ - public void setState(String value) { - this.state = value; - } - } -} 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 c6cbd651a9..2fbb473f59 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 @@ -49,6 +49,7 @@ }) @JsonInclude(JsonInclude.Include.NON_NULL) public class TTopologyTemplate extends TExtensibleElements { + @XmlElements( { @XmlElement(name = "RelationshipTemplate", type = TRelationshipTemplate.class), @XmlElement(name = "NodeTemplate", type = TNodeTemplate.class) @@ -58,7 +59,8 @@ public class TTopologyTemplate extends TExtensibleElements { // added to support conversion from/to YAML policies @JsonProperty("groups") protected List groups; - protected TPolicies policies; + @JsonProperty("policies") + protected List policies; @JsonProperty("inputs") protected List inputs; @JsonProperty("outputs") @@ -133,8 +135,8 @@ public List getNodeTemplates() { public void setNodeTemplates(List nodeTemplates) { this.nodeTemplateOrRelationshipTemplate = Stream.concat( - nodeTemplates.stream().map(TEntityTemplate.class::cast), - this.getRelationshipTemplates().stream().map(TEntityTemplate.class::cast)) + nodeTemplates.stream().map(TEntityTemplate.class::cast), + this.getRelationshipTemplates().stream().map(TEntityTemplate.class::cast)) .collect(Collectors.toList()); } @@ -164,8 +166,8 @@ public List getRelationshipTemplates() { public void setRelationshipTemplates(List relationshipTemplates) { this.nodeTemplateOrRelationshipTemplate = Stream.concat( - this.getNodeTemplates().stream().map(TEntityTemplate.class::cast), - relationshipTemplates.stream().map(TEntityTemplate.class::cast)) + this.getNodeTemplates().stream().map(TEntityTemplate.class::cast), + relationshipTemplates.stream().map(TEntityTemplate.class::cast)) .collect(Collectors.toList()); } @@ -190,11 +192,11 @@ public void addRelationshipTemplate(TRelationshipTemplate rt) { } @Nullable - public TPolicies getPolicies() { + public List getPolicies() { return policies; } - public void setPolicies(TPolicies policies) { + public void setPolicies(List policies) { this.policies = policies; } @@ -248,7 +250,7 @@ public void accept(Visitor visitor) { public static class Builder extends TExtensibleElements.Builder { private List nodeTemplates; private List relationshipTemplates; - private TPolicies policies; + private List policies; private List inputs; private List outputs; private List groups; @@ -318,7 +320,7 @@ public Builder addRelationshipTemplate(TRelationshipTemplate relationshipTemplat return addRelationshipTemplates(tmp); } - public Builder setPolicies(TPolicies policies) { + public Builder setPolicies(List policies) { this.policies = policies; return this; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/extensions/OTComplianceRule.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/extensions/OTComplianceRule.java index a0225627d4..09b1f55004 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/extensions/OTComplianceRule.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/extensions/OTComplianceRule.java @@ -13,8 +13,6 @@ *******************************************************************************/ package org.eclipse.winery.model.tosca.extensions; -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; @@ -22,11 +20,9 @@ import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; -import org.eclipse.winery.model.tosca.HasId; +import org.eclipse.winery.model.tosca.HasIdAndTags; import org.eclipse.winery.model.tosca.HasName; import org.eclipse.winery.model.tosca.HasTargetNamespace; -import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.visitor.Visitor; @@ -34,7 +30,7 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "otComplianceRule") -public class OTComplianceRule extends HasId implements HasName, HasTargetNamespace { +public class OTComplianceRule extends HasIdAndTags implements HasName, HasTargetNamespace { @XmlAttribute protected String name; @@ -49,18 +45,15 @@ public class OTComplianceRule extends HasId implements HasName, HasTargetNamespa @XmlElement(name = "RequiredStructure") protected TTopologyTemplate requiredStructure; - @XmlElement(name = "Tags") - protected TTags tags; - @Deprecated // used for XML deserialization of API request content - public OTComplianceRule() { } + public OTComplianceRule() { + } public OTComplianceRule(Builder builder) { super(builder); this.name = builder.name; this.identifier = builder.identifier; this.requiredStructure = builder.requiredStructure; - this.tags = builder.tags; this.targetNamespace = builder.targetNamespace; } @@ -111,31 +104,18 @@ public void setRequiredStructure(@Nullable TTopologyTemplate requiredStructure) this.requiredStructure = requiredStructure; } - public TTags getTags() { - return tags; - } - - public void setTags(TTags tags) { - this.tags = tags; - } - @Override public void accept(Visitor visitor) { visitor.visit(this); } - public static class Builder extends HasId.Builder { + public static class Builder extends HasIdAndTags.Builder { private String name; private TTopologyTemplate identifier; private TTopologyTemplate requiredStructure; - private TTags tags; private String targetNamespace; - public Builder() { - super(); - } - public Builder(String id) { super(id); } @@ -155,14 +135,6 @@ public Builder setRequiredStructure(TTopologyTemplate requiredStructure) { return self(); } - public Builder addTags(List tags) { - if (this.tags == null) { - this.tags = new TTags(); - } - this.tags.getTag().addAll(tags); - return self(); - } - public Builder setTargetNamespace(String targetNamespace) { this.targetNamespace = targetNamespace; return self(); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/ModelUtilities.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/ModelUtilities.java index e375acdf63..aa5eaf0f97 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/ModelUtilities.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/ModelUtilities.java @@ -44,18 +44,12 @@ import org.eclipse.winery.model.tosca.TEntityType; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TNodeTemplate.Capabilities; -import org.eclipse.winery.model.tosca.TNodeTemplate.Requirements; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TPlan; -import org.eclipse.winery.model.tosca.TPlans; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TRelationshipTemplate; -import org.eclipse.winery.model.tosca.TRelationshipTemplate.SourceOrTargetElement; import org.eclipse.winery.model.tosca.TRelationshipType; import org.eclipse.winery.model.tosca.TRequirement; -import org.eclipse.winery.model.tosca.TRequirementDefinition; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.TTag; import org.eclipse.winery.model.tosca.TTopologyTemplate; @@ -87,7 +81,7 @@ public abstract class ModelUtilities { static { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder = null; + DocumentBuilder documentBuilder; try { documentBuilder = dbf.newDocumentBuilder(); } catch (ParserConfigurationException e) { @@ -98,8 +92,9 @@ public abstract class ModelUtilities { } /** - * This is a special method for Winery. Winery allows to define a property by specifying name/value values. Instead - * of parsing the XML contained in TNodeType, this method is a convenience method to access this information + * This is a special method for Winery. Winery allows to define a property by specifying name (or value) values. + * Instead of parsing the XML contained in TNodeType, this method is a convenience method to access this + * information *

* The return type "Properties" is used because of the key/value properties. * @@ -145,7 +140,7 @@ public static Document getWinerysPropertiesDefinitionXsdAsDocument(WinerysProper * This is a quick hack: an XML schema container is created for each * element. Smarter solution: create a hash from namespace to XML schema * element and re-use that for each new element - * Drawback of "smarter" solution: not a single XSD file any more + * Drawback of "smarter" solution: not a single XSD file anymore */ DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder; @@ -347,14 +342,14 @@ public static Optional getLeft(TNodeTemplate nodeTemplate) { if (x == null) { return Optional.empty(); } - Float floatValue; + float floatValue; try { floatValue = Float.parseFloat(x); } catch (NumberFormatException e) { LOGGER.debug("Could not parse x value", e); return Optional.empty(); } - return Optional.of(floatValue.intValue()); + return Optional.of((int) floatValue); } /** @@ -376,33 +371,20 @@ public static TEntityTemplate findNodeTemplateOrRequirementOfNodeTemplateOrCapab // We cannot use XMLs id pointing capabilities as we work on the Java model // Other option: modify the stored XML directly. This is more error prune than walking through the whole topology for (TEntityTemplate t : topologyTemplate.getNodeTemplateOrRelationshipTemplate()) { + if (t.getId().equals(targetObjectRef)) { + return t; + } if (t instanceof TNodeTemplate) { - if (t.getId().equals(targetObjectRef)) { - return t; - } TNodeTemplate nt = (TNodeTemplate) t; - Requirements requirements = nt.getRequirements(); - if (requirements != null) { - for (TRequirement req : requirements.getRequirement()) { - if (req.getId().equals(targetObjectRef)) { - return req; - } - } + TRequirement req = resolveRequirement(targetObjectRef, nt); + if (req != null) { + return req; } - Capabilities capabilities = nt.getCapabilities(); - if (capabilities != null) { - for (TCapability cap : capabilities.getCapability()) { - if (cap.getId().equals(targetObjectRef)) { - return cap; - } - } - } - } else { - assert (t instanceof TRelationshipTemplate); - if (t.getId().equals(targetObjectRef)) { - return t; + TCapability cap = resolveCapability(targetObjectRef, nt); + if (cap != null) { + return cap; } } } @@ -442,87 +424,89 @@ public static String getId(TExtensibleElements ci) { * * @return null if not found */ - public static TRequirement resolveRequirement(TServiceTemplate serviceTemplate, String reference) { - TRequirement resolved = null; - for (TEntityTemplate tmpl : serviceTemplate.getTopologyTemplate().getNodeTemplateOrRelationshipTemplate()) { - if (tmpl instanceof TNodeTemplate) { - TNodeTemplate n = (TNodeTemplate) tmpl; - Requirements requirements = n.getRequirements(); - if (requirements != null) { - for (TRequirement req : n.getRequirements().getRequirement()) { - if (req.getId().equals(reference)) { - resolved = req; - } - } + public static TRequirement resolveRequirement(TServiceTemplate serviceTemplate, String referenceId) { + if (serviceTemplate.getTopologyTemplate() != null) { + for (TNodeTemplate nt : serviceTemplate.getTopologyTemplate().getNodeTemplates()) { + TRequirement req = resolveRequirement(referenceId, nt); + if (req != null) { + return req; } } } - return resolved; + return null; } - public static TCapability resolveCapability(TServiceTemplate serviceTemplate, String reference) { - TCapability resolved = null; + private static TRequirement resolveRequirement(String reference, TNodeTemplate nt) { + List requirements = nt.getRequirements(); + if (requirements != null) { + for (TRequirement req : requirements) { + if (req.getId().equals(reference)) { + return req; + } + } + } + return null; + } + + public static TCapability resolveCapability(TServiceTemplate serviceTemplate, String referenceId) { if (serviceTemplate.getTopologyTemplate() != null) { - for (TEntityTemplate tmpl : serviceTemplate.getTopologyTemplate().getNodeTemplateOrRelationshipTemplate()) { - if (tmpl instanceof TNodeTemplate) { - TNodeTemplate n = (TNodeTemplate) tmpl; - Capabilities capabilities = n.getCapabilities(); - if (capabilities != null) { - for (TCapability cap : n.getCapabilities().getCapability()) { - if (cap.getId().equals(reference)) { - resolved = cap; - } - } - } + for (TNodeTemplate nt : serviceTemplate.getTopologyTemplate().getNodeTemplates()) { + TCapability cap = resolveCapability(referenceId, nt); + if (cap != null) { + return cap; } } } - return resolved; + return null; + } + + private static TCapability resolveCapability(String referenceId, TNodeTemplate nt) { + List capabilities = nt.getCapabilities(); + if (capabilities != null) { + for (TCapability cap : capabilities) { + if (cap.getId().equals(referenceId)) { + return cap; + } + } + } + return null; } public static TNodeTemplate resolveNodeTemplate(TServiceTemplate serviceTemplate, String reference) { - TNodeTemplate resolved = null; if (serviceTemplate.getTopologyTemplate() != null) { - for (TEntityTemplate tmpl : serviceTemplate.getTopologyTemplate().getNodeTemplateOrRelationshipTemplate()) { - if (tmpl instanceof TNodeTemplate) { - TNodeTemplate n = (TNodeTemplate) tmpl; - if (n.getId().equals(reference)) { - resolved = n; - } + for (TNodeTemplate nodeTemplate : serviceTemplate.getTopologyTemplate().getNodeTemplates()) { + if (nodeTemplate.getId().equals(reference)) { + return nodeTemplate; } } } - return resolved; + return null; } - public static TRelationshipTemplate resolveRelationshipTemplate(TServiceTemplate serviceTemplate, String - reference) { - TRelationshipTemplate resolved = null; + public static TRelationshipTemplate resolveRelationshipTemplate(TServiceTemplate serviceTemplate, String reference) { if (serviceTemplate.getTopologyTemplate() != null) { for (TEntityTemplate tmpl : serviceTemplate.getTopologyTemplate().getNodeTemplateOrRelationshipTemplate()) { if (tmpl instanceof TRelationshipTemplate) { - TRelationshipTemplate n = (TRelationshipTemplate) tmpl; - if (n.getId().equals(reference)) { - resolved = n; + TRelationshipTemplate relationshipTemplate = (TRelationshipTemplate) tmpl; + if (relationshipTemplate.getId().equals(reference)) { + return relationshipTemplate; } } } } - return resolved; + return null; } public static TPlan resolvePlan(TServiceTemplate serviceTemplate, String reference) { - TPlan resolved = null; - TPlans plans = serviceTemplate.getPlans(); - if (plans == null) { - return null; - } - for (TPlan p : plans.getPlan()) { - if (p.getId().equals(reference)) { - resolved = p; + List plans = serviceTemplate.getPlans(); + if (plans != null) { + for (TPlan p : plans) { + if (p.getId().equals(reference)) { + return p; + } } } - return resolved; + return null; } /** @@ -532,52 +516,48 @@ public static TPlan resolvePlan(TServiceTemplate serviceTemplate, String referen * @return the instantiated {@link TNodeTemplate} */ public static TNodeTemplate instantiateNodeTemplate(TNodeType nodeType) { - - TNodeTemplate nodeTemplate = new TNodeTemplate(); - - nodeTemplate.setId(nodeType.getIdFromIdOrNameField() + Math.random()); - nodeTemplate.setName(nodeType.getName()); - nodeTemplate.setType(new QName(nodeType.getTargetNamespace(), nodeType.getName())); + String nodeTemplateId = nodeType.getIdFromIdOrNameField() + Math.random(); + TNodeTemplate.Builder builder = new TNodeTemplate.Builder(nodeTemplateId, nodeType.getQName()); + builder.setName(nodeType.getName()); // add capabilities to the NodeTemplate if (nodeType.getCapabilityDefinitions() != null) { - for (TCapabilityDefinition cd : nodeType.getCapabilityDefinitions().getCapabilityDefinition()) { - TCapability capa = new TCapability(); - capa.setId(cd.getName() + nodeTemplate.getId()); - capa.setName(cd.getCapabilityType().getLocalPart()); - capa.setType(new QName(cd.getCapabilityType().getNamespaceURI(), cd.getCapabilityType().getLocalPart())); - nodeTemplate.setCapabilities(new Capabilities()); - nodeTemplate.getCapabilities().getCapability().add(capa); + for (TCapabilityDefinition cd : nodeType.getCapabilityDefinitions()) { + TCapability capability = new TCapability.Builder( + cd.getName() + nodeTemplateId, + cd.getCapabilityType(), + cd.getName() + ).build(); + builder.addCapability(capability); } } // add requirements if (nodeType.getRequirementDefinitions() != null) { - nodeType.getRequirementDefinitions().getRequirementDefinition(); - Requirements requirementsNode = new Requirements(); - nodeTemplate.setRequirements(requirementsNode); - for (TRequirementDefinition definition : nodeType.getRequirementDefinitions().getRequirementDefinition()) { - TRequirement newRequirement = new TRequirement(); - newRequirement.setName(definition.getName()); - newRequirement.setId(definition.getName() + nodeTemplate.getId()); - newRequirement.setType(definition.getRequirementType()); - nodeTemplate.getRequirements().getRequirement().add(newRequirement); - } + nodeType.getRequirementDefinitions().forEach(tRequirementDefinition -> { + TRequirement requirement = new TRequirement.Builder( + tRequirementDefinition.getName() + nodeTemplateId, + tRequirementDefinition.getName(), + tRequirementDefinition.getRequirementType() + ).build(); + builder.addRequirement(requirement); + } + ); } // add properties WinerysPropertiesDefinition propDef = nodeType.getWinerysPropertiesDefinition(); if (propDef != null && propDef.getPropertyDefinitions() != null) { Map properties = new HashMap<>(); - propDef.getPropertyDefinitions().forEach(propertyDefinition -> { - properties.put(propertyDefinition.getKey(), propertyDefinition.getDefaultValue()); - }); + propDef.getPropertyDefinitions().forEach(propertyDefinition -> + properties.put(propertyDefinition.getKey(), propertyDefinition.getDefaultValue()) + ); TEntityTemplate.WineryKVProperties tProps = new TEntityTemplate.WineryKVProperties(); tProps.setKVProperties(new LinkedHashMap<>(properties)); - nodeTemplate.setProperties(tProps); + builder.setProperties(tProps); } - return nodeTemplate; + return builder.build(); } /** @@ -592,25 +572,22 @@ public static TNodeTemplate instantiateNodeTemplate(TNodeType nodeType) { public static TRelationshipTemplate instantiateRelationshipTemplate(TRelationshipType relationshipType, TNodeTemplate sourceNodeTemplate, TNodeTemplate targetNodeTemplate) { + if (relationshipType == null || relationshipType.getName() == null) { + return null; + } - TRelationshipTemplate relationshipTemplate = new TRelationshipTemplate(); - relationshipTemplate.setId("con-" + UUID.randomUUID().toString()); - relationshipTemplate.setName(relationshipType.getName()); - relationshipTemplate.setType(new QName(relationshipType.getTargetNamespace(), relationshipType.getName())); - - // connect the NodeTemplates - SourceOrTargetElement source = new SourceOrTargetElement(); - source.setRef(sourceNodeTemplate); - relationshipTemplate.setSourceElement(source); - SourceOrTargetElement target = new SourceOrTargetElement(); - target.setRef(targetNodeTemplate); - relationshipTemplate.setTargetElement(target); - - return relationshipTemplate; + return new TRelationshipTemplate.Builder( + "con-" + UUID.randomUUID(), + new QName(relationshipType.getTargetNamespace(), relationshipType.getName()), + sourceNodeTemplate, + targetNodeTemplate + ) + .setName(relationshipType.getName()) + .build(); } /** - * Target label is not present if - empty string - undefined - null Target Label is not case sensitive -> always + * Target label is not present if - empty string - undefined - null Target Label is not case-sensitive -> always * lower case. */ public static Optional getTargetLabel(TNodeTemplate nodeTemplate) { @@ -634,7 +611,7 @@ private static Optional getOtherAttributeValue(TNodeTemplate nodeTemplat } /** - * Target Label is not case sensitive -> set to lowercase. + * Target Label is not case-sensitive -> set to lowercase. */ public static void setTargetLabel(TNodeTemplate nodeTemplate, String targetLabel) { Objects.requireNonNull(nodeTemplate); @@ -648,55 +625,55 @@ public static TNodeTemplate getSourceNodeTemplateOfRelationshipTemplate(TTopolog if (relationshipTemplate.getSourceElement().getRef() instanceof TRequirement) { TRequirement requirement = (TRequirement) relationshipTemplate.getSourceElement().getRef(); return topologyTemplate.getNodeTemplates().stream() - .filter(nt -> nt.getRequirements() != null - && nt.getRequirements().getRequirement().contains(requirement)) - .findAny().get(); + .filter(nt -> nt.getRequirements() != null) + .filter(nt -> nt.getRequirements().contains(requirement)) + .findAny() + .orElse(null); } else { return (TNodeTemplate) relationshipTemplate.getSourceElement().getRef(); } } - public static TNodeTemplate getTargetNodeTemplateOfRelationshipTemplate(TTopologyTemplate - topologyTemplate, TRelationshipTemplate relationshipTemplate) { + public static TNodeTemplate getTargetNodeTemplateOfRelationshipTemplate(TTopologyTemplate topologyTemplate, + TRelationshipTemplate relationshipTemplate) { if (relationshipTemplate.getTargetElement().getRef() instanceof TCapability) { TCapability capability = (TCapability) relationshipTemplate.getTargetElement().getRef(); return topologyTemplate.getNodeTemplates().stream() - .filter(nt -> nt.getCapabilities() != null - && nt.getCapabilities().getCapability().contains(capability)) - .findAny().get(); - } else { - return (TNodeTemplate) relationshipTemplate.getTargetElement().getRef(); + .filter(nt -> nt.getCapabilities() != null) + .filter(nt -> nt.getCapabilities().contains(capability)) + .findAny() + .orElse(null); } + + return (TNodeTemplate) relationshipTemplate.getTargetElement().getRef(); } /** - * @return incoming relation ship templates pointing to node templates + * @return incoming relationship templates pointing to node templates */ - public static List getIncomingRelationshipTemplates(TTopologyTemplate - topologyTemplate, TNodeTemplate nodeTemplate) { + public static List getIncomingRelationshipTemplates(TTopologyTemplate topologyTemplate, + TNodeTemplate nodeTemplate) { Objects.requireNonNull(topologyTemplate); Objects.requireNonNull(nodeTemplate); - List incomingRelationshipTemplates = topologyTemplate.getRelationshipTemplates() + + return topologyTemplate.getRelationshipTemplates() .stream() .filter(rt -> getTargetNodeTemplateOfRelationshipTemplate(topologyTemplate, rt).equals(nodeTemplate)) .collect(Collectors.toList()); - - return incomingRelationshipTemplates; } /** - * @return outgoing relation ship templates pointing to node templates + * @return outgoing relationship templates pointing to node templates */ - public static List getOutgoingRelationshipTemplates(TTopologyTemplate - topologyTemplate, TNodeTemplate nodeTemplate) { + public static List getOutgoingRelationshipTemplates(TTopologyTemplate topologyTemplate, + TNodeTemplate nodeTemplate) { Objects.requireNonNull(topologyTemplate); Objects.requireNonNull(nodeTemplate); - List outgoingRelationshipTemplates = topologyTemplate.getRelationshipTemplates() + + return topologyTemplate.getRelationshipTemplates() .stream() .filter(rt -> getSourceNodeTemplateOfRelationshipTemplate(topologyTemplate, rt).equals(nodeTemplate)) .collect(Collectors.toList()); - - return outgoingRelationshipTemplates; } /** @@ -733,7 +710,7 @@ public static List getAllRelationshipTemplates(TTopologyT * save it as XML, we have to "objectize" the content of Any * * @param templates The templates (node, relationship) to update. The content of the given collection is modified. - * @throws IllegalStateException if DocumentBuilder could not iniitialized + * @throws IllegalStateException if DocumentBuilder could not initialize * @throws IOException if something goes wrong during parsing */ public static void patchAnyAttributes(Collection templates) throws IOException { @@ -748,7 +725,8 @@ public static void patchAnyAttributes(Collection temp // QName is stored as plain string - this is the case when nested in "any" qName = QName.valueOf(localPart); } else { - // sometimes, the QName is retrieved properly. So, we just keep it. This is the case when directly nested in nodetemplate's JSON + // sometimes, the QName is retrieved properly. So, we just keep it. + // This is the case when directly nested in nodetemplate JSON. qName = new QName(otherAttribute.getKey().getNamespaceURI(), localPart); } tempConvertedOtherAttributes.put(qName, otherAttribute.getValue()); @@ -757,9 +735,9 @@ public static void patchAnyAttributes(Collection temp template.getOtherAttributes().putAll(tempConvertedOtherAttributes); tempConvertedOtherAttributes.clear(); - // Convert the String created by the JSON serialization back to a XML dom document + // Convert the String created by the JSON serialization back to an XML dom document TEntityTemplate.Properties properties = template.getProperties(); - if (properties != null && properties instanceof TEntityTemplate.XmlProperties) { + if (properties instanceof TEntityTemplate.XmlProperties) { TEntityTemplate.XmlProperties props = (TEntityTemplate.XmlProperties) properties; props.setAny(patchAnyItem(props.getAny())); } @@ -768,10 +746,10 @@ public static void patchAnyAttributes(Collection temp public static Object patchAnyItem(Object item) throws IOException { if (item == null) { - return item; + return null; } if (item instanceof String) { - Document doc = null; + Document doc; try { doc = DOCUMENT_BUILDER.parse(new InputSource(new StringReader((String) item))); } catch (SAXException e) { @@ -833,7 +811,7 @@ TEntityType> Map getAvailableFeaturesOfType(QName givenType, Map features = new HashMap<>(); getChildrenOf(givenType, elements).forEach((qName, t) -> { if (Objects.nonNull(t.getTags())) { - List list = t.getTags().getTag(); + List list = t.getTags(); if (deploymentTechnology == null || list.stream().anyMatch( @@ -842,7 +820,7 @@ TEntityType> Map getAvailableFeaturesOfType(QName givenType, Map "feature".equals(tag.getName().toLowerCase())) + .filter(tag -> "feature".equalsIgnoreCase(tag.getName())) .findFirst() .ifPresent(tTag -> features.put(elements.get(qName), tTag.getValue())); } @@ -854,16 +832,19 @@ TEntityType> Map getAvailableFeaturesOfType(QName givenType, Map boolean isFeatureType(QName givenType, Map elements) { return Objects.nonNull(elements.get(givenType)) && Objects.nonNull(elements.get(givenType).getTags()) - && elements.get(givenType).getTags().getTag().stream() + && elements.get(givenType).getTags().stream() .anyMatch(tag -> "feature".equals(tag.getName())); } public static void updateNodeTemplate(TTopologyTemplate topology, String oldComponentId, QName newType, TNodeType newComponentType) { TNodeTemplate nodeTemplate = topology.getNodeTemplate(oldComponentId); - nodeTemplate.setType(newType); - nodeTemplate.setName(newType.getLocalPart()); - // TODO: also make some more adjustments etc. + + if (nodeTemplate != null) { + nodeTemplate.setType(newType); + nodeTemplate.setName(newType.getLocalPart()); + // TODO: also make some more adjustments etc. + } } /** @@ -913,17 +894,14 @@ public static TNodeTemplate getNodeTemplateFromRelationshipSourceOrTarget(TTopol nodeTemplate = topologyTemplate.getNodeTemplates().stream() .filter(node -> Objects.nonNull(node.getCapabilities())) .filter(node -> - node.getCapabilities() - .getCapability().stream().anyMatch(capability -> capability.getId().equals(relationshipSourceOrTarget.getId()) - ) + node.getCapabilities().stream() + .anyMatch(capability -> capability.getId().equals(relationshipSourceOrTarget.getId())) ).findFirst(); } else if (relationshipSourceOrTarget instanceof TRequirement) { nodeTemplate = topologyTemplate.getNodeTemplates().stream() .filter(node -> Objects.nonNull(node.getRequirements())) - .filter(node -> - node.getRequirements() - .getRequirement().stream().anyMatch(requirement -> requirement.getId().equals(relationshipSourceOrTarget.getId()) - ) + .filter(node -> node.getRequirements().stream() + .anyMatch(requirement -> requirement.getId().equals(relationshipSourceOrTarget.getId())) ).findFirst(); } @@ -939,16 +917,18 @@ public static void collectIdsOfExistingTopologyElements(TTopologyTemplate topolo // collect existing requirement ids topologyTemplateB.getNodeTemplates().stream() .filter(nt -> nt.getRequirements() != null) - .forEach(nt -> nt.getRequirements().getRequirement() + .forEach(nt -> nt.getRequirements() // the existing ids are left unchanged - .forEach(x -> idMapping.put(x.getId(), x.getId()))); + .forEach(x -> idMapping.put(x.getId(), x.getId())) + ); //collect existing capability ids topologyTemplateB.getNodeTemplates().stream() .filter(nt -> nt.getCapabilities() != null) - .forEach(nt -> nt.getCapabilities().getCapability() + .forEach(nt -> nt.getCapabilities() // the existing ids are left unchanged - .forEach(x -> idMapping.put(x.getId(), x.getId()))); + .forEach(x -> idMapping.put(x.getId(), x.getId())) + ); } public static void generateNewIdOfTemplate(HasId element, TTopologyTemplate topologyTemplate) { @@ -972,13 +952,14 @@ public static TRelationshipTemplate createRelationshipTemplate(TNodeTemplate sou public static TRelationshipTemplate createRelationshipTemplate(TNodeTemplate sourceNode, TNodeTemplate targetNode, QName type, String connectionDescription) { - TRelationshipTemplate rel = new TRelationshipTemplate(); - rel.setType(type); - rel.setName(type.getLocalPart()); - rel.setId("con-" + sourceNode.getId() + "-" + connectionDescription + "-" + targetNode.getId()); - rel.setSourceNodeTemplate(sourceNode); - rel.setTargetNodeTemplate(targetNode); - return rel; + return new TRelationshipTemplate.Builder( + "con-" + sourceNode.getId() + "-" + connectionDescription + "-" + targetNode.getId(), + type, + sourceNode, + targetNode + ) + .setName(type.getLocalPart()) + .build(); } public static TRelationshipTemplate createRelationshipTemplateAndAddToTopology(TNodeTemplate sourceNode, @@ -997,27 +978,27 @@ public static TRelationshipTemplate createRelationshipTemplateAndAddToTopology(T } public static boolean nodeTypeHasInterface(TNodeType nodeType, String interfaceName) { - return Objects.nonNull(nodeType.getInterfaces()) && nodeType.getInterfaces().getInterface().stream() + return Objects.nonNull(nodeType.getInterfaces()) && nodeType.getInterfaces().stream() .anyMatch(nodeInterface -> interfaceName.equals(nodeInterface.getName())); } public static void addPolicy(TNodeTemplate node, QName policyType, String name) { - TPolicies policies = node.getPolicies(); + List policies = node.getPolicies(); if (Objects.isNull(policies)) { - policies = new TPolicies(); + policies = new ArrayList<>(); node.setPolicies(policies); } - TPolicy policy = new TPolicy(); - policy.setPolicyType(policyType); - policy.setName(name); - policies.getPolicy() - .add(policy); + policies.add( + new TPolicy.Builder(policyType) + .setName(name) + .build() + ); } public static boolean containsPolicyType(TNodeTemplate node, QName policyType) { return Objects.nonNull(node.getPolicies()) && - node.getPolicies().getPolicy().stream() + node.getPolicies().stream() .anyMatch(policy -> policy.getPolicyType() .equals(policyType) ); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/RemoveEmptyLists.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/RemoveEmptyLists.java index bfbb49faff..1756c5a1e1 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/RemoveEmptyLists.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/utils/RemoveEmptyLists.java @@ -13,12 +13,17 @@ *******************************************************************************/ package org.eclipse.winery.model.tosca.utils; -import org.eclipse.winery.model.tosca.TArtifacts; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; +import java.util.List; + +import org.eclipse.winery.model.tosca.TArtifact; +import org.eclipse.winery.model.tosca.TCapability; +import org.eclipse.winery.model.tosca.TDeploymentArtifact; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TPolicies; +import org.eclipse.winery.model.tosca.TPolicy; +import org.eclipse.winery.model.tosca.TPropertyConstraint; import org.eclipse.winery.model.tosca.TRelationshipTemplate; +import org.eclipse.winery.model.tosca.TRequirement; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.visitor.Visitor; @@ -37,8 +42,8 @@ public class RemoveEmptyLists extends Visitor { @Override public void visit(TEntityTemplate entityTemplate) { - final TEntityTemplate.PropertyConstraints propertyConstraints = entityTemplate.getPropertyConstraints(); - if ((propertyConstraints != null) && propertyConstraints.getPropertyConstraint().isEmpty()) { + final List propertyConstraints = entityTemplate.getPropertyConstraints(); + if ((propertyConstraints != null) && propertyConstraints.isEmpty()) { entityTemplate.setPropertyConstraints(null); } TEntityTemplate.Properties properties = entityTemplate.getProperties(); @@ -62,24 +67,24 @@ public void visit(TEntityTemplate entityTemplate) { @Override public void visit(TNodeTemplate nodeTemplate) { - final TNodeTemplate.Requirements requirements = nodeTemplate.getRequirements(); - if ((requirements != null) && requirements.getRequirement().isEmpty()) { + final List requirements = nodeTemplate.getRequirements(); + if ((requirements != null) && requirements.isEmpty()) { nodeTemplate.setRequirements(null); } - final TNodeTemplate.Capabilities capabilities = nodeTemplate.getCapabilities(); - if ((capabilities != null) && capabilities.getCapability().isEmpty()) { + final List capabilities = nodeTemplate.getCapabilities(); + if ((capabilities != null) && capabilities.isEmpty()) { nodeTemplate.setCapabilities(null); } - final TDeploymentArtifacts deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); - if ((deploymentArtifacts != null) && deploymentArtifacts.getDeploymentArtifact().isEmpty()) { + final List deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); + if (deploymentArtifacts != null && deploymentArtifacts.isEmpty()) { nodeTemplate.setDeploymentArtifacts(null); } - final TPolicies policies = nodeTemplate.getPolicies(); - if ((policies != null) && policies.getPolicy().isEmpty()) { + final List policies = nodeTemplate.getPolicies(); + if ((policies != null) && policies.isEmpty()) { nodeTemplate.setPolicies(null); } - final TArtifacts artifacts = nodeTemplate.getArtifacts(); - if ((artifacts != null) && artifacts.getArtifact().isEmpty()) { + final List artifacts = nodeTemplate.getArtifacts(); + if ((artifacts != null) && artifacts.isEmpty()) { nodeTemplate.setArtifacts(null); } super.visit(nodeTemplate); @@ -100,8 +105,8 @@ public void visit(TRelationshipTemplate relationshipTemplate) { * @param topologyTemplate the topology template to modify */ public void removeEmptyLists(TTopologyTemplate topologyTemplate) { - final TPolicies policies = topologyTemplate.getPolicies(); - if ((policies != null) && policies.getPolicy().isEmpty()) { + final List policies = topologyTemplate.getPolicies(); + if ((policies != null) && policies.isEmpty()) { topologyTemplate.setPolicies(null); } this.visit(topologyTemplate); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/visitor/Visitor.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/visitor/Visitor.java index 95595f799d..c619d52415 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/visitor/Visitor.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/visitor/Visitor.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019 Contributors to the Eclipse Foundation + * Copyright (c) 2019-2021 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -14,6 +14,7 @@ package org.eclipse.winery.model.tosca.visitor; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -26,7 +27,6 @@ import org.eclipse.winery.model.tosca.TCapabilityRef; import org.eclipse.winery.model.tosca.TCondition; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TDocumentation; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TEntityType; @@ -34,13 +34,10 @@ import org.eclipse.winery.model.tosca.TExportedInterface; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TImplementationArtifact; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; import org.eclipse.winery.model.tosca.TParameter; import org.eclipse.winery.model.tosca.TPlan; -import org.eclipse.winery.model.tosca.TPlans; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TPropertyConstraint; import org.eclipse.winery.model.tosca.TPropertyMapping; @@ -49,7 +46,6 @@ import org.eclipse.winery.model.tosca.TRequirementRef; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.jdt.annotation.NonNull; @@ -59,7 +55,7 @@ * In other words: The nesting is followed. * * In general, for all elements in the hierarchy, a visit method is implemented. This visit method visits all children - * (in the TOSCA graph meta model). In case an element in the hierarchy has no children in the TOSCA graph meta model + * (in the TOSCA graph metamodel). In case an element in the hierarchy has no children in the TOSCA graph metamodel * and no children in the inheritance hierarchy, it is omitted. * * This class intentionally defines all default methods not as abstract to keep the children simple and to avoid @@ -71,6 +67,7 @@ * * TODO: Implement it for all DefinitionsChildren (NodeType, NodeTypeImplementation, ...) */ +@SuppressWarnings("unused") public abstract class Visitor { public void visit(TServiceTemplate serviceTemplate) { @@ -82,16 +79,16 @@ public void visit(TServiceTemplate serviceTemplate) { topologyTemplate.accept(this); } - final TTags tags = serviceTemplate.getTags(); + final List tags = serviceTemplate.getTags(); if (tags != null) { - for (TTag tag : tags.getTag()) { + for (TTag tag : tags) { tag.accept(this); } } - final TPlans plans = serviceTemplate.getPlans(); + final List plans = serviceTemplate.getPlans(); if (plans != null) { - for (TPlan plan : plans.getPlan()) { + for (TPlan plan : plans) { plan.accept(this); } } @@ -111,12 +108,12 @@ public void visit(TPlan plan) { precondition.accept(this); } if (plan.getInputParameters() != null) { - for (TParameter parameter : plan.getInputParameters().getInputParameter()) { + for (TParameter parameter : plan.getInputParameters()) { parameter.accept(this); } } if (plan.getOutputParameters() != null) { - for (TParameter parameter : plan.getOutputParameters().getOutputParameter()) { + for (TParameter parameter : plan.getOutputParameters()) { parameter.accept(this); } } @@ -132,7 +129,7 @@ public void visit(TTopologyTemplate topologyTemplate) { for (TRelationshipTemplate relationshipTemplate : topologyTemplate.getRelationshipTemplates()) { relationshipTemplate.accept(this); } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(TNodeTypeImplementation nodeTypeImplementation) { @@ -140,7 +137,7 @@ public void visit(TNodeTypeImplementation nodeTypeImplementation) { visit((TEntityTypeImplementation) nodeTypeImplementation); if (nodeTypeImplementation.getDeploymentArtifacts() != null) { - for (TDeploymentArtifact da : nodeTypeImplementation.getDeploymentArtifacts().getDeploymentArtifact()) { + for (TDeploymentArtifact da : nodeTypeImplementation.getDeploymentArtifacts()) { da.accept(this); } } @@ -151,7 +148,7 @@ public void visit(TEntityTypeImplementation implementation) { visit((TExtensibleElements) implementation); if (implementation.getImplementationArtifacts() != null) { - for (TImplementationArtifacts.ImplementationArtifact ia : implementation.getImplementationArtifacts().getImplementationArtifact()) { + for (TImplementationArtifact ia : implementation.getImplementationArtifacts()) { ia.accept(this); } } @@ -162,7 +159,7 @@ public void visit(TExtensibleElements extensibleElement) { for (TDocumentation documentation : extensibleElement.getDocumentation()) { documentation.accept(this); } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(TEntityType entityType) { @@ -184,36 +181,36 @@ public void visit(TEntityTemplate entityTemplate) { if (properties != null) { visit(properties); } - final TEntityTemplate.PropertyConstraints propertyConstraints = entityTemplate.getPropertyConstraints(); + final List propertyConstraints = entityTemplate.getPropertyConstraints(); if (propertyConstraints != null) { - propertyConstraints.accept(this); + propertyConstraints.forEach(this::visit); } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(TNodeTemplate nodeTemplate) { this.visit((RelationshipSourceOrTarget) nodeTemplate); - final TNodeTemplate.Requirements requirements = nodeTemplate.getRequirements(); + final List requirements = nodeTemplate.getRequirements(); if (requirements != null) { - requirements.accept(this); + requirements.forEach(requirement -> requirement.accept(this)); } - final TNodeTemplate.Capabilities capabilities = nodeTemplate.getCapabilities(); + final List capabilities = nodeTemplate.getCapabilities(); if (capabilities != null) { - capabilities.accept(this); + capabilities.forEach(capability -> capability.accept(this)); } - final TDeploymentArtifacts deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); + final List deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); if (deploymentArtifacts != null) { - for (TDeploymentArtifact deploymentArtifact : deploymentArtifacts.getDeploymentArtifact()) { + for (TDeploymentArtifact deploymentArtifact : deploymentArtifacts) { deploymentArtifact.accept(this); } } - final TPolicies policies = nodeTemplate.getPolicies(); + final List policies = nodeTemplate.getPolicies(); if (policies != null) { - for (TPolicy policy : policies.getPolicy()) { + for (TPolicy policy : policies) { policy.accept(this); } } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(TRelationshipTemplate relationshipTemplate) { @@ -224,48 +221,27 @@ public void visit(TRelationshipTemplate relationshipTemplate) { relationshipConstraint.accept(this); } } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(TEntityTemplate.Properties properties) { // in all cases this is a leaf node, so no action to take } - public void visit(TEntityTemplate.PropertyConstraints propertyConstraints) { - for (TPropertyConstraint propertyConstraint : propertyConstraints.getPropertyConstraint()) { + public void visit(List propertyConstraints) { + for (TPropertyConstraint propertyConstraint : propertyConstraints) { propertyConstraint.accept(this); } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(TRelationshipTemplate.RelationshipConstraints.RelationshipConstraint relationshipConstraint) { // this is a leaf, so no action to take } - public void visit(TNodeTemplate.Capabilities capabilities) { - for (TCapability capability : capabilities.getCapability()) { - capability.accept(this); - } - // meta model does not offer more children - } - - public void visit(TNodeTemplate.Requirements requirements) { - for (TRequirement requirement : requirements.getRequirement()) { - requirement.accept(this); - } - // meta model does not offer more children - } - public void visit(TRequirement requirement) { - final TEntityTemplate.Properties properties = requirement.getProperties(); - if (properties != null) { - visit(properties); - } - final TEntityTemplate.PropertyConstraints propertyConstraints = requirement.getPropertyConstraints(); - if (propertyConstraints != null) { - propertyConstraints.accept(this); - } - // meta model does not offer more children + this.visit((TEntityTemplate) requirement); + // metamodel does not offer more children } public void accept(TTag tag) { @@ -290,45 +266,45 @@ public void visit(@NonNull TBoundaryDefinitions boundaryDefinitions) { } private void acceptBoundaryDefinitionsInterfaces(@NonNull TBoundaryDefinitions boundaryDefinitions) { - final TBoundaryDefinitions.Interfaces interfaces = boundaryDefinitions.getInterfaces(); + final List interfaces = boundaryDefinitions.getInterfaces(); if (interfaces != null) { - for (TExportedInterface exportedInterface : interfaces.getInterface()) { + for (TExportedInterface exportedInterface : interfaces) { exportedInterface.accept(this); } } } private void acceptBoundaryDefinitionsCapabilities(@NonNull TBoundaryDefinitions boundaryDefinitions) { - final TBoundaryDefinitions.Capabilities capabilities = boundaryDefinitions.getCapabilities(); + final List capabilities = boundaryDefinitions.getCapabilities(); if (capabilities != null) { - for (TCapabilityRef capabilityRef : capabilities.getCapability()) { + for (TCapabilityRef capabilityRef : capabilities) { capabilityRef.accept(this); } } } private void acceptBoundaryDefinitionsRequirements(@NonNull TBoundaryDefinitions boundaryDefinitions) { - final TBoundaryDefinitions.Requirements requirements = boundaryDefinitions.getRequirements(); + final List requirements = boundaryDefinitions.getRequirements(); if (requirements != null) { - for (TRequirementRef requirementRef : requirements.getRequirement()) { + for (TRequirementRef requirementRef : requirements) { requirementRef.accept(this); } } } private void acceptBoundaryDefinitionsPolicies(@NonNull TBoundaryDefinitions boundaryDefinitions) { - final TPolicies policies = boundaryDefinitions.getPolicies(); + final List policies = boundaryDefinitions.getPolicies(); if (policies != null) { - for (TPolicy policy : policies.getPolicy()) { + for (TPolicy policy : policies) { policy.accept(this); } } } private void acceptBoundaryDefinitionsPropertyConstraints(@NonNull TBoundaryDefinitions boundaryDefinitions) { - final TBoundaryDefinitions.PropertyConstraints propertyConstraints = boundaryDefinitions.getPropertyConstraints(); + final List propertyConstraints = boundaryDefinitions.getPropertyConstraints(); if (propertyConstraints != null) { - for (TPropertyConstraint propertyConstraint : propertyConstraints.getPropertyConstraint()) { + for (TPropertyConstraint propertyConstraint : propertyConstraints) { propertyConstraint.accept(this); } } @@ -342,9 +318,9 @@ private void acceptBoundaryDefinitionsProperties(@NonNull TBoundaryDefinitions b } public void visit(TBoundaryDefinitions.Properties properties) { - final TBoundaryDefinitions.Properties.PropertyMappings propertyMappings = properties.getPropertyMappings(); + final List propertyMappings = properties.getPropertyMappings(); if (propertyMappings != null) { - for (TPropertyMapping propertyMapping : propertyMappings.getPropertyMapping()) { + for (TPropertyMapping propertyMapping : propertyMappings) { propertyMapping.accept(this); } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XDefinitions.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XDefinitions.java index e980a9d5ff..25bd343bc0 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XDefinitions.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XDefinitions.java @@ -28,11 +28,13 @@ @XmlType(name = "") @XmlRootElement(name = "Definitions") public class XDefinitions extends XTDefinitions { + @XmlTransient protected Map importDefinitions = new HashMap<>(); @Deprecated // required for XML deserialization - public XDefinitions() { } + public XDefinitions() { + } public XDefinitions(Builder builder) { super(builder); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasId.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasId.java index b898ec739c..6b6c879c7d 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasId.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasId.java @@ -33,10 +33,10 @@ public abstract class XHasId extends XTExtensibleElements implements XHasIdInIdO @XmlSchemaType(name = "ID") private String id; - @Deprecated // required for XML deserialization + // required for XML deserialization public XHasId() { } - @Deprecated // required for XML deserialization + // required for XML deserialization public XHasId(String id) { this.setId(id); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasIdAndTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasIdAndTags.java new file mode 100644 index 0000000000..6af01714dd --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasIdAndTags.java @@ -0,0 +1,101 @@ +/******************************************************************************* + * Copyright (c) 2021 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ + +package org.eclipse.winery.model.tosca.xml; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlTransient; + +import io.github.adr.embedded.ADR; +import org.eclipse.jdt.annotation.Nullable; + +@XmlTransient +@XmlAccessorType(XmlAccessType.FIELD) +public abstract class XHasIdAndTags extends XHasId implements XHasTags { + + @XmlElementWrapper(name = "Tags") + @XmlElement(name = "Tag", required = true) + protected List tags; + + public XHasIdAndTags(Builder builder) { + super(builder); + this.tags = builder.tags; + } + + @Deprecated + public XHasIdAndTags() { + } + + public List getTags() { + return tags; + } + + public void setTags(@Nullable List value) { + this.tags = value; + } + + @ADR(11) + public abstract static class Builder> extends XHasId.Builder { + + private List tags; + + public Builder(String id) { + super(id); + } + + public Builder(XTExtensibleElements extensibleElements) { + this.addDocumentation(extensibleElements.getDocumentation()); + this.addAny(extensibleElements.getAny()); + this.addOtherAttributes(extensibleElements.getOtherAttributes()); + } + + public T addTags(List tags) { + if (tags == null || tags.isEmpty()) { + return self(); + } + + if (this.tags == null) { + this.tags = tags; + } else { + this.tags.addAll(tags); + } + return self(); + } + + public T addTag(XTTag tag) { + if (tag == null) { + return self(); + } + + ArrayList tmp = new ArrayList<>(); + tmp.add(tag); + return addTags(tmp); + } + + public T addTag(String key, String value) { + if (value == null) { + return self(); + } + + XTTag tag = new XTTag.Builder(key, value).build(); + return addTag(tag); + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasInheritance.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasInheritance.java index d38f317023..76b92e211c 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasInheritance.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasInheritance.java @@ -18,15 +18,15 @@ */ public interface XHasInheritance { - public XTBoolean getAbstract(); + XTBoolean getAbstract(); - public void setAbstract(XTBoolean value); + void setAbstract(XTBoolean value); - public XTBoolean getFinal(); + XTBoolean getFinal(); - public void setFinal(XTBoolean value); + void setFinal(XTBoolean value); - public XHasType getDerivedFrom(); + XHasType getDerivedFrom(); - public void setDerivedFrom(XHasType value); + void setDerivedFrom(XHasType value); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasPolicies.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasPolicies.java index 318d89dbaf..6a3c29e74c 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasPolicies.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasPolicies.java @@ -14,9 +14,11 @@ package org.eclipse.winery.model.tosca.xml; +import java.util.List; + public interface XHasPolicies { - XTPolicies getPolicies(); + List getPolicies(); - void setPolicies(XTPolicies policies); + void setPolicies(List policies); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasTags.java index 18b0fa3aef..7a2cafd656 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasTags.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XHasTags.java @@ -14,7 +14,9 @@ package org.eclipse.winery.model.tosca.xml; +import java.util.List; + public interface XHasTags { - XTTags getTags(); + List getTags(); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTAppliesTo.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTAppliesTo.java deleted file mode 100644 index edf0d5a28c..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTAppliesTo.java +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.namespace.QName; - -import org.eclipse.jdt.annotation.NonNull; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tAppliesTo", propOrder = { - "nodeTypeReference" -}) -public class XTAppliesTo implements Serializable { - - @XmlElement(name = "NodeTypeReference", required = true) - protected List nodeTypeReference; - - @Deprecated // required for XML deserialization - public XTAppliesTo() { } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof XTAppliesTo)) return false; - XTAppliesTo appliesTo = (XTAppliesTo) o; - return Objects.equals(nodeTypeReference, appliesTo.nodeTypeReference); - } - - @Override - public int hashCode() { - return Objects.hash(nodeTypeReference); - } - - /** - * Gets the value of the nodeTypeReference property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link XTAppliesTo.NodeTypeReference } - */ - @NonNull - public List getNodeTypeReference() { - if (nodeTypeReference == null) { - nodeTypeReference = new ArrayList<>(); - } - return this.nodeTypeReference; - } - - /** - *

Java class for anonymous complex type. - *

- *

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

- *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="typeRef" use="required" type="{http://www.w3.org/2001/XMLSchema}QName" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class NodeTypeReference implements Serializable { - - @XmlAttribute(name = "typeRef", required = true) - protected QName typeRef; - - /** - * Gets the value of the typeRef property. - * - * @return possible object is {@link QName } - */ - @NonNull - public QName getTypeRef() { - return typeRef; - } - - /** - * Sets the value of the typeRef property. - * - * @param value allowed object is {@link QName } - */ - public void setTypeRef(QName value) { - this.typeRef = value; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - NodeTypeReference that = (NodeTypeReference) o; - return Objects.equals(typeRef, that.typeRef); - } - - @Override - public int hashCode() { - - return Objects.hash(typeRef); - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactReference.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactReference.java index 293e4cf4fb..ff8d7f4e65 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactReference.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactReference.java @@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElements; import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; import org.eclipse.jdt.annotation.NonNull; @@ -39,14 +40,15 @@ public class XTArtifactReference implements Serializable { @XmlElement(name = "Exclude", type = XTArtifactReference.Exclude.class), @XmlElement(name = "Include", type = XTArtifactReference.Include.class) }) - protected List includeOrExclude; + protected List includeOrExclude; @XmlAttribute(name = "reference", required = true) @XmlSchemaType(name = "anyURI") protected String reference; @Deprecated // required for XML deserialization - public XTArtifactReference() { } + public XTArtifactReference() { + } public XTArtifactReference(Builder builder) { this.includeOrExclude = builder.includeOrExclude; @@ -79,10 +81,9 @@ public String toString() { * Gets the value of the includeOrExclude property. *

*

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

*

* For example, to add a new item, do as follows: @@ -92,14 +93,13 @@ public String toString() { *

*

*

- * Objects of the following type(s) are allowed in the list - * {@link XTArtifactReference.Exclude } - * {@link XTArtifactReference.Include } + * Objects of the following type(s) are allowed in the list {@link XTArtifactReference.Exclude } {@link + * XTArtifactReference.Include } */ @NonNull - public List getIncludeOrExclude() { + public List getIncludeOrExclude() { if (includeOrExclude == null) { - includeOrExclude = new ArrayList(); + includeOrExclude = new ArrayList<>(); } return this.includeOrExclude; } @@ -114,11 +114,19 @@ public void setReference(String value) { } @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class Exclude { + @XmlTransient + public abstract static class IncludeOrExclude implements Serializable { @XmlAttribute(name = "pattern", required = true) - protected String pattern; + private String pattern; + + // required for serialization + public IncludeOrExclude() { + } + + public IncludeOrExclude(String pattern) { + this.pattern = pattern; + } @NonNull public String getPattern() { @@ -132,30 +140,37 @@ public void setPattern(String value) { @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "") - public static class Include implements Serializable { + public static class Exclude extends IncludeOrExclude { + @Deprecated + public Exclude() { + } - @XmlAttribute(name = "pattern", required = true) - protected String pattern; + public Exclude(String pattern) { + super(pattern); + } + } - @NonNull - public String getPattern() { - return pattern; + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class Include extends IncludeOrExclude { + @Deprecated + public Include() { } - public void setPattern(String value) { - this.pattern = value; + public Include(String pattern) { + super(pattern); } } public static class Builder { private final String reference; - private List includeOrExclude; + private List includeOrExclude; public Builder(String reference) { this.reference = reference; } - public Builder setIncludeOrExclude(List includeOrExclude) { + public Builder setIncludeOrExclude(List includeOrExclude) { this.includeOrExclude = includeOrExclude; return this; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactTemplate.java index 884623bce8..d96a64d583 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactTemplate.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca.xml; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -23,12 +22,12 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; import org.eclipse.winery.model.tosca.xml.visitor.Visitor; -import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @@ -37,13 +36,16 @@ }) public class XTArtifactTemplate extends XTEntityTemplate { - @XmlElement(name = "ArtifactReferences") - protected XTArtifactTemplate.ArtifactReferences artifactReferences; + @XmlElementWrapper(name = "ArtifactReferences") + @XmlElement(name = "ArtifactReference", required = true) + protected List artifactReferences; + @XmlAttribute(name = "name") protected String name; @Deprecated // required for XML deserialization - public XTArtifactTemplate() { } + public XTArtifactTemplate() { + } public XTArtifactTemplate(Builder builder) { super(builder); @@ -71,11 +73,11 @@ public void accept(Visitor visitor) { visitor.visit(this); } - public XTArtifactTemplate.@Nullable ArtifactReferences getArtifactReferences() { + public List getArtifactReferences() { return artifactReferences; } - public void setArtifactReferences(XTArtifactTemplate.@Nullable ArtifactReferences value) { + public void setArtifactReferences(List value) { this.artifactReferences = value; } @@ -99,47 +101,10 @@ public String toString() { '}'; } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "artifactReference" - }) - public static class ArtifactReferences implements Serializable { - - @XmlElement(name = "ArtifactReference", required = true) - protected List artifactReference; - - @Override - public String toString() { - return "ArtifactReferences{" + - "artifactReference=" + artifactReference + - '}'; - } - - @NonNull - public List getArtifactReference() { - if (artifactReference == null) { - artifactReference = new ArrayList(); - } - return this.artifactReference; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ArtifactReferences that = (ArtifactReferences) o; - return Objects.equals(artifactReference, that.artifactReference); - } - - @Override - public int hashCode() { - return Objects.hash(artifactReference); - } - } - public static class Builder extends XTEntityTemplate.Builder { + private String name; - private XTArtifactTemplate.ArtifactReferences artifactReferences; + private List artifactReferences; public Builder(String id, QName type) { super(id, type); @@ -154,41 +119,26 @@ public Builder setName(String name) { return this; } - public Builder setArtifactReferences(XTArtifactTemplate.ArtifactReferences artifactReferences) { - this.artifactReferences = artifactReferences; - return this; - } - - public Builder addArtifactReferences(XTArtifactTemplate.ArtifactReferences artifactReferences) { - if (artifactReferences == null || artifactReferences.getArtifactReference().isEmpty()) { + public Builder addArtifactReferences(List artifactReferences) { + if (artifactReferences == null || artifactReferences.isEmpty()) { return this; } if (this.artifactReferences == null) { this.artifactReferences = artifactReferences; } else { - this.artifactReferences.getArtifactReference().addAll(artifactReferences.artifactReference); + this.artifactReferences.addAll(artifactReferences); } return this; } - public Builder addArtifactReferences(List artifactReferences) { - if (artifactReferences == null) { - return this; - } - - XTArtifactTemplate.ArtifactReferences tmp = new XTArtifactTemplate.ArtifactReferences(); - tmp.getArtifactReference().addAll(artifactReferences); - return addArtifactReferences(tmp); - } - - public Builder addArtifactReferences(XTArtifactReference artifactReferences) { + public Builder addArtifactReference(XTArtifactReference artifactReferences) { if (artifactReferences == null) { return this; } - XTArtifactTemplate.ArtifactReferences tmp = new XTArtifactTemplate.ArtifactReferences(); - tmp.getArtifactReference().add(artifactReferences); + List tmp = new ArrayList<>(); + tmp.add(artifactReferences); return addArtifactReferences(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactType.java index cb6cba51c5..bbd5f581aa 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifactType.java @@ -28,9 +28,11 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tArtifactType") public class XTArtifactType extends XTEntityType { + // the following two fields are added to support YAML mode @XmlAttribute(name = "mimetype", required = false) private String mimeType; + @XmlAttribute(name = "fileextensions", required = false) private List fileExtensions; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifacts.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifacts.java deleted file mode 100644 index e835c68c74..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTArtifacts.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "Artifacts", propOrder = { - "artifact" -}) -public class XTArtifacts { - - @XmlElement(name = "Artifact", required = true) - List artifact; - - @Deprecated // required for XML deserialization - public XTArtifacts() { } - - public XTArtifacts(List artifacts) { - this.artifact = artifacts; - } - - public List getArtifact() { - if (artifact == null) { - artifact = new ArrayList<>(); - } - return artifact; - } - - public void setArtifact(List artifact) { - this.artifact = artifact; - } - - public void addArtifact(XTArtifact artifact) { - if (this.artifact == null) { - this.artifact = new ArrayList<>(); - } - this.artifact.add(artifact); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - XTArtifacts that = (XTArtifacts) o; - return artifact.equals(that.artifact); - } - - @Override - public int hashCode() { - return Objects.hash(artifact); - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTBoundaryDefinitions.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTBoundaryDefinitions.java index 7937497fbf..180f0737a2 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTBoundaryDefinitions.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTBoundaryDefinitions.java @@ -23,11 +23,11 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import org.eclipse.winery.model.tosca.xml.visitor.Visitor; -import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @@ -43,19 +43,30 @@ public class XTBoundaryDefinitions implements Serializable { @XmlElement(name = "Properties") protected XTBoundaryDefinitions.Properties properties; - @XmlElement(name = "PropertyConstraints") - protected XTBoundaryDefinitions.PropertyConstraints propertyConstraints; - @XmlElement(name = "Requirements") - protected XTBoundaryDefinitions.Requirements requirements; - @XmlElement(name = "Capabilities") - protected XTBoundaryDefinitions.Capabilities capabilities; - @XmlElement(name = "Policies") - protected XTPolicies policies; - @XmlElement(name = "Interfaces") - protected XTBoundaryDefinitions.Interfaces interfaces; + + @XmlElementWrapper(name = "PropertyConstraints") + @XmlElement(name = "PropertyConstraint", required = true) + protected List propertyConstraints; + + @XmlElementWrapper(name = "Requirements") + @XmlElement(name = "Requirement", required = true) + protected List requirements; + + @XmlElementWrapper(name = "Capabilities") + @XmlElement(name = "Capability", required = true) + protected List capabilities; + + @XmlElementWrapper(name = "Policies") + @XmlElement(name = "Policy", required = true) + protected List policies; + + @XmlElementWrapper(name = "Interfaces") + @XmlElement(name = "Interface", required = true) + protected List interfaces; @Deprecated // required for XML deserialization - public XTBoundaryDefinitions() { } + public XTBoundaryDefinitions() { + } public XTBoundaryDefinitions(Builder builder) { this.properties = builder.properties; @@ -92,43 +103,43 @@ public void setProperties(XTBoundaryDefinitions.@Nullable Properties value) { this.properties = value; } - public XTBoundaryDefinitions.@Nullable PropertyConstraints getPropertyConstraints() { + public List getPropertyConstraints() { return propertyConstraints; } - public void setPropertyConstraints(XTBoundaryDefinitions.@Nullable PropertyConstraints value) { + public void setPropertyConstraints(List value) { this.propertyConstraints = value; } - public XTBoundaryDefinitions.@Nullable Requirements getRequirements() { + public List getRequirements() { return requirements; } - public void setRequirements(XTBoundaryDefinitions.@Nullable Requirements value) { + public void setRequirements(List value) { this.requirements = value; } - public XTBoundaryDefinitions.@Nullable Capabilities getCapabilities() { + public List getCapabilities() { return capabilities; } - public void setCapabilities(XTBoundaryDefinitions.@Nullable Capabilities value) { + public void setCapabilities(List value) { this.capabilities = value; } - public @Nullable XTPolicies getPolicies() { + public List getPolicies() { return policies; } - public void setPolicies(@Nullable XTPolicies value) { + public void setPolicies(List value) { this.policies = value; } - public XTBoundaryDefinitions.@Nullable Interfaces getInterfaces() { + public List getInterfaces() { return interfaces; } - public void setInterfaces(XTBoundaryDefinitions.@Nullable Interfaces value) { + public void setInterfaces(List value) { this.interfaces = value; } @@ -136,42 +147,6 @@ public void accept(Visitor visitor) { visitor.visit(this); } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "capability" - }) - public static class Capabilities implements Serializable { - - @XmlElement(name = "Capability", required = true) - protected List capability; - - @NonNull - public List getCapability() { - if (capability == null) { - capability = new ArrayList(); - } - return this.capability; - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "_interface" - }) - public static class Interfaces implements Serializable { - - @XmlElement(name = "Interface", required = true) - protected List _interface; - - @NonNull - public List getInterface() { - if (_interface == null) { - _interface = new ArrayList(); - } - return this._interface; - } - } - @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "any", @@ -181,8 +156,9 @@ public static class Properties implements Serializable { @XmlAnyElement(lax = true) protected Object any; - @XmlElement(name = "PropertyMappings") - protected XTBoundaryDefinitions.Properties.PropertyMappings propertyMappings; + @XmlElementWrapper(name = "PropertyMappings") + @XmlElement(name = "PropertyMapping", required = true) + protected List propertyMappings; @Nullable public Object getAny() { @@ -193,80 +169,26 @@ public void setAny(@Nullable Object value) { this.any = value; } - public XTBoundaryDefinitions.Properties.@Nullable PropertyMappings getPropertyMappings() { + public List getPropertyMappings() { return propertyMappings; } - public void setPropertyMappings(XTBoundaryDefinitions.Properties.@Nullable PropertyMappings value) { + public void setPropertyMappings(List value) { this.propertyMappings = value; } public void accept(Visitor visitor) { visitor.visit(this); } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "propertyMapping" - }) - public static class PropertyMappings implements Serializable { - - @XmlElement(name = "PropertyMapping", required = true) - protected List propertyMapping; - - @NonNull - public List getPropertyMapping() { - if (propertyMapping == null) { - propertyMapping = new ArrayList(); - } - return this.propertyMapping; - } - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "propertyConstraint" - }) - public static class PropertyConstraints implements Serializable { - - @XmlElement(name = "PropertyConstraint", required = true) - protected List propertyConstraint; - - @NonNull - public List getPropertyConstraint() { - if (propertyConstraint == null) { - propertyConstraint = new ArrayList<>(); - } - return this.propertyConstraint; - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "requirement" - }) - public static class Requirements implements Serializable { - - @XmlElement(name = "Requirement", required = true) - protected List requirement; - - @NonNull - public List getRequirement() { - if (requirement == null) { - requirement = new ArrayList<>(); - } - return this.requirement; - } } public static class Builder { private Properties properties; - private PropertyConstraints propertyConstraints; - private Requirements requirements; - private Capabilities capabilities; - private XTPolicies policies; - private Interfaces interfaces; + private List propertyConstraints; + private List requirements; + private List capabilities; + private List policies; + private List interfaces; public Builder() { @@ -277,61 +199,51 @@ public Builder setProperties(Properties properties) { return this; } - public Builder setPropertyConstraints(PropertyConstraints propertyConstraints) { + public Builder setPropertyConstraints(List propertyConstraints) { this.propertyConstraints = propertyConstraints; return this; } - public Builder setRequirements(Requirements requirements) { + public Builder setRequirements(List requirements) { this.requirements = requirements; return this; } - public Builder setCapabilities(Capabilities capabilities) { + public Builder setCapabilities(List capabilities) { this.capabilities = capabilities; return this; } - public Builder setPolicies(XTPolicies policies) { + public Builder setPolicies(List policies) { this.policies = policies; return this; } - public Builder setInterfaces(Interfaces interfaces) { + public Builder setInterfaces(List interfaces) { this.interfaces = interfaces; return this; } - public Builder addPolicies(XTPolicies policies) { - if (policies == null || policies.getPolicy().isEmpty()) { + public Builder addPolicies(List policies) { + if (policies == null || policies.isEmpty()) { return this; } if (this.policies == null) { this.policies = policies; } else { - this.policies.getPolicy().addAll(policies.getPolicy()); + this.policies.addAll(policies); } return this; } - public Builder addPolicies(List policies) { - if (policies == null) { - return this; - } - - XTPolicies tmp = new XTPolicies(); - tmp.getPolicy().addAll(policies); - return this.addPolicies(tmp); - } - - public Builder addPolicies(XTPolicy policies) { + public Builder addPolicy(XTPolicy policies) { if (policies == null) { return this; } - XTPolicies tmp = new XTPolicies(); - tmp.getPolicy().add(policies); + List tmp = new ArrayList<>(); + tmp.add(policies); return this.addPolicies(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTCapabilityDefinition.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTCapabilityDefinition.java index f648e64785..0ceecfc40a 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTCapabilityDefinition.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTCapabilityDefinition.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca.xml; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -23,6 +22,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -36,21 +36,29 @@ "constraints" }) public class XTCapabilityDefinition extends XTExtensibleElements { - @XmlElement(name = "Constraints") - protected XTCapabilityDefinition.Constraints constraints; + + @XmlElementWrapper(name = "Constraints") + @XmlElement(name = "Constraint", required = true) + protected List constraints; + @XmlAttribute(name = "name", required = true) protected String name; + @XmlAttribute(name = "capabilityType", required = true) protected QName capabilityType; + @XmlAttribute(name = "lowerBound") protected Integer lowerBound; + @XmlAttribute(name = "upperBound") protected String upperBound; + @XmlAttribute(name = "validSourceTypes") protected List validSourceTypes; @Deprecated // required for XML deserialization - public XTCapabilityDefinition() { } + public XTCapabilityDefinition() { + } public XTCapabilityDefinition(Builder builder) { super(builder); @@ -80,11 +88,11 @@ public int hashCode() { return Objects.hash(constraints, name, capabilityType, lowerBound, upperBound, validSourceTypes); } - public XTCapabilityDefinition.@Nullable Constraints getConstraints() { + public List getConstraints() { return constraints; } - public void setConstraints(XTCapabilityDefinition.@Nullable Constraints value) { + public void setConstraints(List value) { this.constraints = value; } @@ -107,7 +115,6 @@ public void setCapabilityType(@Nullable QName value) { this.capabilityType = value; } - @NonNull public int getLowerBound() { if (lowerBound == null) { return 1; @@ -146,42 +153,11 @@ public void accept(Visitor visitor) { visitor.visit(this); } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "constraint" - }) - public static class Constraints implements Serializable { - - @XmlElement(name = "Constraint", required = true) - protected List constraint; - - @NonNull - public List getConstraint() { - if (constraint == null) { - constraint = new ArrayList(); - } - return this.constraint; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Constraints that = (Constraints) o; - return Objects.equals(constraint, that.constraint); - } - - @Override - public int hashCode() { - return Objects.hash(constraint); - } - } - public static class Builder extends XTExtensibleElements.Builder { private final String name; private final QName capabilityType; - private XTCapabilityDefinition.Constraints constraints; + private List constraints; private Integer lowerBound; private String upperBound; @@ -192,7 +168,7 @@ public Builder(String name, QName capabilityType) { this.capabilityType = capabilityType; } - public Builder setConstraints(XTCapabilityDefinition.Constraints constraints) { + public Builder setConstraints(List constraints) { this.constraints = constraints; return this; } @@ -212,36 +188,26 @@ public Builder setValidSourceTypes(List validSourceTypes) { return this; } - public Builder addConstraints(XTCapabilityDefinition.Constraints constraints) { - if (constraints == null || constraints.getConstraint().isEmpty()) { + public Builder addConstraints(List constraints) { + if (constraints == null || constraints.isEmpty()) { return this; } if (this.constraints == null) { this.constraints = constraints; } else { - this.constraints.getConstraint().addAll(constraints.getConstraint()); + this.constraints.addAll(constraints); } return this; } - public Builder addConstraints(List constraints) { - if (constraints == null) { - return this; - } - - XTCapabilityDefinition.Constraints tmp = new XTCapabilityDefinition.Constraints(); - tmp.getConstraint().addAll(constraints); - return addConstraints(tmp); - } - - public Builder addConstraints(XTConstraint constraints) { + public Builder addConstraint(XTConstraint constraints) { if (constraints == null) { return this; } - XTCapabilityDefinition.Constraints tmp = new XTCapabilityDefinition.Constraints(); - tmp.getConstraint().add(constraints); + List tmp = new ArrayList<>(); + tmp.add(constraints); return addConstraints(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTConstraint.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTConstraint.java index ce98ecd310..b2082e8ac8 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTConstraint.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTConstraint.java @@ -44,9 +44,10 @@ public class XTConstraint implements Serializable { protected String constraintType; @Deprecated // required for XML deserialization - public XTConstraint() { } + public XTConstraint() { + } - protected XTConstraint(Builder builder) { + protected XTConstraint(Builder builder) { this.any = builder.any; this.constraintType = builder.constraintType; } @@ -97,6 +98,7 @@ public T setConstraintType(String constraintType) { return self(); } + @SuppressWarnings("unchecked") public T self() { return (T) this; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTDefinitions.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTDefinitions.java index 49b98a5acf..376e4f4ef8 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTDefinitions.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTDefinitions.java @@ -27,6 +27,7 @@ import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlElements; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlSeeAlso; @@ -34,12 +35,11 @@ import javax.xml.bind.annotation.XmlType; import org.eclipse.winery.model.tosca.xml.constants.TOSCA_xml_1_0; -import org.eclipse.winery.model.tosca.xml.visitor.Visitor; - import org.eclipse.winery.model.tosca.xml.extensions.XOTComplianceRule; -import org.eclipse.winery.model.tosca.xml.extensions.XOTTopologyFragmentRefinementModel; import org.eclipse.winery.model.tosca.xml.extensions.XOTPatternRefinementModel; import org.eclipse.winery.model.tosca.xml.extensions.XOTTestRefinementModel; +import org.eclipse.winery.model.tosca.xml.extensions.XOTTopologyFragmentRefinementModel; +import org.eclipse.winery.model.tosca.xml.visitor.Visitor; import io.github.adr.embedded.ADR; import org.eclipse.jdt.annotation.NonNull; @@ -57,12 +57,16 @@ }) public class XTDefinitions extends XHasId implements XHasName, XHasTargetNamespace { - @XmlElement(name = "Extensions") - protected XTDefinitions.Extensions extensions; + @XmlElementWrapper(name = "Extensions") + @XmlElement(name = "Extension", required = true) + protected List extensions; + @XmlElement(name = "Import") protected List _import; + @XmlElement(name = "Types") protected XTDefinitions.Types types; + @XmlElements( { @XmlElement(name = "RelationshipType", type = XTRelationshipType.class), @XmlElement(name = "RelationshipTypeImplementation", type = XTRelationshipTypeImplementation.class), @@ -84,14 +88,16 @@ public class XTDefinitions extends XHasId implements XHasName, XHasTargetNamespa @XmlAttribute(name = "name") protected String name; + @XmlAttribute(name = "targetNamespace", required = true) @XmlSchemaType(name = "anyURI") protected String targetNamespace; @Deprecated // required for XML deserialization - public XTDefinitions() { } + public XTDefinitions() { + } - public XTDefinitions(Builder builder) { + public XTDefinitions(Builder builder) { super(builder); this.extensions = builder.extensions; this._import = builder.imports; @@ -141,18 +147,18 @@ public void setElement(XTExtensibleElements element) { this.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(element); } - public XTDefinitions.@Nullable Extensions getExtensions() { + public List getExtensions() { return extensions; } - public void setExtensions(XTDefinitions.Extensions value) { + public void setExtensions(List value) { this.extensions = value; } @NonNull public List getImport() { if (_import == null) { - _import = new ArrayList(); + _import = new ArrayList<>(); } return this._import; } @@ -167,14 +173,14 @@ public void setTypes(XTDefinitions.Types value) { /** *

Objects of the following type(s) are allowed in the list {@link XTRelationshipType } {@link - * XTRelationshipTypeImplementation } {@link XTArtifactTemplate } {@link XTPolicyTemplate } {@link XTServiceTemplate } - * {@link XTArtifactType } {@link XTCapabilityType } {@link XTNodeType } {@link XTNodeTypeImplementation } {@link + * XTRelationshipTypeImplementation } {@link XTArtifactTemplate } {@link XTPolicyTemplate } {@link XTServiceTemplate + * } {@link XTArtifactType } {@link XTCapabilityType } {@link XTNodeType } {@link XTNodeTypeImplementation } {@link * XTRequirementType } {@link XTPolicyType } */ @NonNull public List getServiceTemplateOrNodeTypeOrNodeTypeImplementation() { if (serviceTemplateOrNodeTypeOrNodeTypeImplementation == null) { - serviceTemplateOrNodeTypeOrNodeTypeImplementation = new ArrayList(); + serviceTemplateOrNodeTypeOrNodeTypeImplementation = new ArrayList<>(); } return this.serviceTemplateOrNodeTypeOrNodeTypeImplementation; } @@ -293,55 +299,6 @@ public void setTargetNamespace(String value) { this.targetNamespace = value; } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "extension" - }) - public static class Extensions implements Serializable { - - @XmlElement(name = "Extension", required = true) - protected List extension; - - /** - * Gets the value of the extension property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link XTExtension } - */ - @NonNull - public List getExtension() { - if (extension == null) { - extension = new ArrayList(); - } - return this.extension; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Extensions that = (Extensions) o; - return Objects.equals(extension, that.extension); - } - - @Override - public int hashCode() { - return Objects.hash(extension); - } - } - @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "any" @@ -354,7 +311,7 @@ public static class Types implements Serializable { @NonNull public List getAny() { if (any == null) { - any = new ArrayList(); + any = new ArrayList<>(); } return this.any; } @@ -376,7 +333,7 @@ public int hashCode() { public static class Builder> extends XHasId.Builder { private final String target_namespace; - private XTDefinitions.Extensions extensions; + private List extensions; private List imports; private XTDefinitions.Types types; private List serviceTemplates; @@ -398,11 +355,6 @@ public Builder(String id, String target_namespace) { this.target_namespace = target_namespace; } - public T setExtensions(XTDefinitions.Extensions extensions) { - this.extensions = extensions; - return self(); - } - public T setImport(List imports) { this.imports = imports; return self(); @@ -481,30 +433,20 @@ public T setName(String name) { return self(); } - public T addExtensions(XTDefinitions.Extensions extensions) { - if (extensions == null || extensions.getExtension().isEmpty()) { + public T addExtensions(List extensions) { + if (extensions == null || extensions.isEmpty()) { return self(); } if (this.extensions == null) { this.extensions = extensions; } else { - this.extensions.getExtension().addAll(extensions.getExtension()); + this.extensions.addAll(extensions); } return self(); } - public T addExtensions(List extensions) { - if (extensions == null) { - return self(); - } - - List tmp = new ArrayList<>(); - tmp.addAll(extensions); - return addExtensions(tmp); - } - - public T addExtensions(XTExtension extensions) { + public T addExtension(XTExtension extensions) { if (extensions == null) { return self(); } @@ -573,7 +515,7 @@ public T addServiceTemplates(List serviceTemplates) { return self(); } - public T addServiceTemplates(XTServiceTemplate serviceTemplate) { + public T addServiceTemplate(XTServiceTemplate serviceTemplate) { if (serviceTemplate == null) { return self(); } @@ -596,13 +538,13 @@ public T addNodeTypes(List nodeTypes) { return self(); } - public T addNodeTypes(XTNodeType nodeTypes) { - if (nodeTypes == null) { + public T addNodeType(XTNodeType nodeType) { + if (nodeType == null) { return self(); } List tmp = new ArrayList<>(); - tmp.add(nodeTypes); + tmp.add(nodeType); return addNodeTypes(tmp); } @@ -619,7 +561,7 @@ public T addNodeTypeImplementations(List nodeTypeImple return self(); } - public T addNodeTypeImplementations(XTNodeTypeImplementation relationshipTypes) { + public T addNodeTypeImplementation(XTNodeTypeImplementation relationshipTypes) { if (relationshipTypes == null) { return self(); } @@ -642,7 +584,7 @@ public T addRelationshipTypes(List relationshipTypes) { return self(); } - public T addRelationshipTypes(XTRelationshipType relationshipTypes) { + public T addRelationshipType(XTRelationshipType relationshipTypes) { if (relationshipTypes == null) { return self(); } @@ -665,7 +607,7 @@ public T addRelationshipTypeImplementations(List requirementTypes) { return self(); } - public T addRequirementTypes(XTRequirementType requirementTypes) { + public T addRequirementType(XTRequirementType requirementTypes) { if (requirementTypes == null) { return self(); } @@ -711,7 +653,7 @@ public T addCapabilityTypes(List capabilityTypes) { return self(); } - public T addCapabilityTypes(XTCapabilityType capabilityTypes) { + public T addCapabilityType(XTCapabilityType capabilityTypes) { if (capabilityTypes == null) { return self(); } @@ -734,7 +676,7 @@ public T addArtifactTypes(List artifactTypes) { return self(); } - public T addArtifactTypes(XTArtifactType artifactTypes) { + public T addArtifactType(XTArtifactType artifactTypes) { if (artifactTypes == null) { return self(); } @@ -757,7 +699,7 @@ public T addArtifactTemplates(List artifactTemplates) { return self(); } - public T addArtifactTemplates(XTArtifactTemplate artifactTemplates) { + public T addArtifactTemplate(XTArtifactTemplate artifactTemplates) { if (artifactTemplates == null) { return self(); } @@ -780,7 +722,7 @@ public T addPolicyTypes(List policyTypes) { return self(); } - public T addPolicyTypes(XTPolicyType policyTypes) { + public T addPolicyType(XTPolicyType policyTypes) { if (policyTypes == null) { return self(); } @@ -803,7 +745,7 @@ public T addPolicyTemplates(List policyTemplate) { return self(); } - public T addPolicyTemplates(XTPolicyTemplate policyTemplate) { + public T addPolicyTemplate(XTPolicyTemplate policyTemplate) { if (policyTemplate == null) { return self(); } @@ -826,19 +768,19 @@ public XTDefinitions build() { public List getServiceTemplateOrNodeTypeOrNodeTypeImplementation() { List tmp = new ArrayList<>(); Stream.of( - serviceTemplates, - nodeTypes, - nodeTypeImplementations, - relationshipTypes, - relationshipTypeImplementations, - requirementTypes, - capabilityTypes, - artifactTypes, - artifactTemplates, - policyTypes, - policyTemplate, - nonStandardElements - ).filter(Objects::nonNull) + serviceTemplates, + nodeTypes, + nodeTypeImplementations, + relationshipTypes, + relationshipTypeImplementations, + requirementTypes, + capabilityTypes, + artifactTypes, + artifactTemplates, + policyTypes, + policyTemplate, + nonStandardElements + ).filter(Objects::nonNull) .forEach(tmp::addAll); return tmp; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTDeploymentArtifacts.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTDeploymentArtifacts.java deleted file mode 100644 index d44731af34..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTDeploymentArtifacts.java +++ /dev/null @@ -1,116 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - - -/** - *

Java class for tDeploymentArtifacts complex type. - *

- *

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

- *

- * <complexType name="tDeploymentArtifacts">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="DeploymentArtifact" type="{http://docs.oasis-open.org/tosca/ns/2011/12}tDeploymentArtifact"
- * maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tDeploymentArtifacts", propOrder = { - "deploymentArtifact" -}) -public class XTDeploymentArtifacts implements Serializable { - - @XmlElement(name = "DeploymentArtifact", required = true) - protected List deploymentArtifact; - - @Deprecated // required for XML deserialization - public XTDeploymentArtifacts() { } - - public XTDeploymentArtifacts(Builder builder) { - this.deploymentArtifact = builder.deploymentArtifact; - } - - /** - * Gets the value of the deploymentArtifact property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link XTDeploymentArtifact } - */ - @NonNull - public List getDeploymentArtifact() { - if (deploymentArtifact == null) { - deploymentArtifact = new ArrayList(); - } - return this.deploymentArtifact; - } - - /** - * @return deploymentArtifact having the given name. null if not found - */ - @Nullable - public XTDeploymentArtifact getDeploymentArtifact(String id) { - Objects.requireNonNull(id); - return this.getDeploymentArtifact().stream() - .filter(x -> id.equals(x.getName())) - .findAny() - .orElse(null); - } - - public static class Builder { - private final List deploymentArtifact; - - public Builder(List deploymentArtifact) { - this.deploymentArtifact = deploymentArtifact; - } - - public XTDeploymentArtifacts build() { - return new XTDeploymentArtifacts(this); - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTemplate.java index 1ea52290a0..d08a7f8bd7 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTemplate.java @@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -67,14 +68,15 @@ public abstract class XTEntityTemplate extends XHasId implements XHasType, XHasN @XmlElement(name = "Properties") protected XTEntityTemplate.Properties properties; - @XmlElement(name = "PropertyConstraints") - protected XTEntityTemplate.PropertyConstraints propertyConstraints; - + @XmlElementWrapper(name = "PropertyConstraints") + @XmlElement(name = "PropertyConstraint", required = true) + protected List propertyConstraints; + @XmlAttribute(name = "type", required = true) @NonNull protected QName type; - @Deprecated // required for XML deserialization + // required for XML deserialization public XTEntityTemplate() { super(); } @@ -83,7 +85,7 @@ public XTEntityTemplate(String id) { super(id); } - public XTEntityTemplate(Builder builder) { + public XTEntityTemplate(Builder builder) { super(builder); this.properties = builder.properties; this.propertyConstraints = builder.propertyConstraints; @@ -114,11 +116,11 @@ public void setProperties(XTEntityTemplate.Properties value) { this.properties = value; } - public XTEntityTemplate.@Nullable PropertyConstraints getPropertyConstraints() { + public List getPropertyConstraints() { return propertyConstraints; } - public void setPropertyConstraints(XTEntityTemplate.@Nullable PropertyConstraints value) { + public void setPropertyConstraints(List value) { this.propertyConstraints = value; } @@ -245,61 +247,12 @@ public void accept(Visitor visitor) { } } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "propertyConstraint" - }) - public static class PropertyConstraints implements Serializable { - - @XmlElement(name = "PropertyConstraint", required = true) - protected List propertyConstraint; - - /** - * Gets the value of the propertyConstraint property. - *

- *

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

- *

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

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

- *

- *

Objects of the following type(s) are allowed in the list {@link XTPropertyConstraint } - */ - @NonNull - public List getPropertyConstraint() { - if (propertyConstraint == null) { - propertyConstraint = new ArrayList(); - } - return this.propertyConstraint; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - PropertyConstraints that = (PropertyConstraints) o; - return Objects.equals(propertyConstraint, that.propertyConstraint); - } - - @Override - public int hashCode() { - return Objects.hash(propertyConstraint); - } - - public void accept(Visitor visitor) { - visitor.visit(this); - } - } - @ADR(11) public abstract static class Builder> extends XHasId.Builder { + private final QName type; private XTEntityTemplate.Properties properties; - private XTEntityTemplate.PropertyConstraints propertyConstraints; + private List propertyConstraints; public Builder(String id, QName type) { super(id); @@ -318,41 +271,31 @@ public T setProperties(XTEntityTemplate.Properties properties) { return self(); } - public T setPropertyConstraints(XTEntityTemplate.PropertyConstraints propertyConstraints) { + public T setPropertyConstraints(List propertyConstraints) { this.propertyConstraints = propertyConstraints; return self(); } - public T addPropertyConstraints(XTEntityTemplate.PropertyConstraints propertyConstraints) { - if (propertyConstraints == null || propertyConstraints.getPropertyConstraint().isEmpty()) { + public T addPropertyConstraints(List propertyConstraints) { + if (propertyConstraints == null || propertyConstraints.isEmpty()) { return self(); } if (this.propertyConstraints == null) { this.propertyConstraints = propertyConstraints; } else { - this.propertyConstraints.getPropertyConstraint().addAll(propertyConstraints.getPropertyConstraint()); + this.propertyConstraints.addAll(propertyConstraints); } return self(); } - public T addPropertyConstraints(List propertyConstraints) { - if (propertyConstraints == null) { - return self(); - } - - XTEntityTemplate.PropertyConstraints tmp = new XTEntityTemplate.PropertyConstraints(); - tmp.getPropertyConstraint().addAll(propertyConstraints); - return addPropertyConstraints(tmp); - } - public T addPropertyConstraints(XTPropertyConstraint propertyConstraints) { if (propertyConstraints == null) { return self(); } - XTEntityTemplate.PropertyConstraints tmp = new XTEntityTemplate.PropertyConstraints(); - tmp.getPropertyConstraint().add(propertyConstraints); + Listtmp = new ArrayList<>(); + tmp.add(propertyConstraints); return addPropertyConstraints(tmp); } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityType.java index 3fcb92fda8..9a5fb8c44e 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityType.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca.xml; -import java.util.List; import java.util.Objects; import javax.xml.bind.annotation.XmlAccessType; @@ -40,7 +39,7 @@ "derivedFrom", "propertiesDefinition" }) -@XmlSeeAlso({ +@XmlSeeAlso( { XTNodeType.class, XTRelationshipType.class, XTRequirementType.class, @@ -48,11 +47,8 @@ XTArtifactType.class, XTPolicyType.class }) -public abstract class XTEntityType extends XTExtensibleElements implements XHasName, XHasInheritance, XHasTargetNamespace, XHasTags { - public static final String NS_SUFFIX_PROPERTIESDEFINITION_WINERY = "propertiesdefinition/winery"; +public abstract class XTEntityType extends XTExtensibleElementWithTags implements XHasName, XHasInheritance, XHasTargetNamespace { - @XmlElement(name = "Tags") - protected XTTags tags; @XmlElement(name = "DerivedFrom") protected XTEntityType.DerivedFrom derivedFrom; @XmlElement(name = "PropertiesDefinition") @@ -70,11 +66,11 @@ public abstract class XTEntityType extends XTExtensibleElements implements XHasN protected String targetNamespace; @Deprecated // required for XML deserialization - public XTEntityType() { } + public XTEntityType() { + } - public XTEntityType(Builder builder) { + public XTEntityType(Builder builder) { super(builder); - this.tags = builder.tags; this.derivedFrom = builder.derivedFrom; this.propertiesDefinition = builder.propertiesDefinition; this.name = builder.name; @@ -102,15 +98,6 @@ public int hashCode() { return Objects.hash(tags, derivedFrom, propertiesDefinition, name, _abstract, _final, targetNamespace); } - @Nullable - public XTTags getTags() { - return tags; - } - - public void setTags(@Nullable XTTags value) { - this.tags = value; - } - public XTEntityType.@Nullable DerivedFrom getDerivedFrom() { return derivedFrom; } @@ -275,10 +262,9 @@ public void accept(Visitor visitor) { } @ADR(11) - public abstract static class Builder> extends XTExtensibleElements.Builder { + public abstract static class Builder> extends XTExtensibleElementWithTags.Builder { private final String name; - private XTTags tags; private XTEntityType.DerivedFrom derivedFrom; private XTEntityType.PropertiesDefinition propertiesDefinition; private XTBoolean abstractValue; @@ -293,18 +279,12 @@ public Builder(XTEntityType entityType) { super(entityType); this.name = entityType.getName(); this.derivedFrom = entityType.getDerivedFrom(); - this.addTags(entityType.getTags()); this.abstractValue = entityType.getAbstract(); this.finalValue = entityType.getFinal(); this.targetNamespace = entityType.getTargetNamespace(); this.propertiesDefinition = entityType.getPropertiesDefinition(); } - public T setTags(XTTags tags) { - this.tags = tags; - return self(); - } - public T setDerivedFrom(XTEntityType.DerivedFrom derivedFrom) { this.derivedFrom = derivedFrom; return self(); @@ -358,50 +338,6 @@ public T setTargetNamespace(String targetNamespace) { return self(); } - public T addTags(XTTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return self(); - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return self(); - } - - public T addTags(List tags) { - if (tags == null) { - return self(); - } - - XTTags tmp = new XTTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public T addTags(XTTag tags) { - if (tags == null) { - return self(); - } - - XTTags tmp = new XTTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - - public T addTags(String key, String value) { - if (value == null) { - return self(); - } - - XTTag tag = new XTTag(); - tag.setName(key); - tag.setValue(value); - return addTags(tag); - } - public XTEntityType build() { throw new IllegalStateException("Abstract types must never be build."); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTypeImplementation.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTypeImplementation.java index f27e7b4e49..31c1fda739 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTypeImplementation.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTEntityTypeImplementation.java @@ -14,6 +14,7 @@ package org.eclipse.winery.model.tosca.xml; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -21,6 +22,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlTransient; @@ -36,17 +38,18 @@ @XmlSeeAlso( { XTNodeTypeImplementation.class, XTRelationshipTypeImplementation.class, + XTArtifactReference.class, + XTRequiredContainerFeature.class }) -public abstract class XTEntityTypeImplementation extends XTExtensibleElements implements XHasName, XHasType, XHasInheritance, XHasTargetNamespace { +public abstract class XTEntityTypeImplementation extends XTExtensibleElementWithTags implements XHasName, XHasType, XHasInheritance, XHasTargetNamespace { - @XmlElement(name = "Tags") - protected XTTags tags; + @XmlElementWrapper(name = "RequiredContainerFeatures") + @XmlElement(name = "RequiredContainerFeature", required = true) + protected List requiredContainerFeatures; - @XmlElement(name = "RequiredContainerFeatures") - protected XTRequiredContainerFeatures requiredContainerFeatures; - - @XmlElement(name = "ImplementationArtifacts") - protected XTImplementationArtifacts implementationArtifacts; + @XmlElementWrapper(name = "ImplementationArtifacts") + @XmlElement(name = "ImplementationArtifact", required = true) + protected List implementationArtifacts; @XmlAttribute(name = "targetNamespace") @XmlSchemaType(name = "anyURI") @@ -68,15 +71,13 @@ public abstract class XTEntityTypeImplementation extends XTExtensibleElements im @Deprecated // required for XML deserialization public XTEntityTypeImplementation() { - super(); } - public XTEntityTypeImplementation(Builder builder) { + public XTEntityTypeImplementation(Builder builder) { super(builder); this.targetNamespace = builder.targetNamespace; this.name = builder.name; this.implementedType = builder.implementedType; - this.tags = builder.tags; this.requiredContainerFeatures = builder.requiredContainerFeatures; this.implementationArtifacts = builder.implementationArtifacts; this._abstract = builder._abstract; @@ -108,29 +109,20 @@ public QName getQName() { } @Nullable - public XTTags getTags() { - return tags; - } - - public void setTags(XTTags value) { - this.tags = value; - } - - @Nullable - public XTRequiredContainerFeatures getRequiredContainerFeatures() { + public List getRequiredContainerFeatures() { return requiredContainerFeatures; } - public void setRequiredContainerFeatures(XTRequiredContainerFeatures value) { + public void setRequiredContainerFeatures(List value) { this.requiredContainerFeatures = value; } @Nullable - public XTImplementationArtifacts getImplementationArtifacts() { + public List getImplementationArtifacts() { return implementationArtifacts; } - public void setImplementationArtifacts(XTImplementationArtifacts value) { + public void setImplementationArtifacts(List value) { this.implementationArtifacts = value; } @@ -182,6 +174,7 @@ public int hashCode() { } @Override + @NonNull public QName getTypeAsQName() { return this.implementedType; } @@ -191,17 +184,16 @@ public void setType(@NonNull QName type) { this.implementedType = type; } - public static abstract class Builder> extends XTExtensibleElements.Builder { + public static abstract class Builder> extends XTExtensibleElementWithTags.Builder { private final QName implementedType; private String name; private String targetNamespace; - private XTTags tags; - private XTRequiredContainerFeatures requiredContainerFeatures; - private XTImplementationArtifacts implementationArtifacts; + private List requiredContainerFeatures; + private List implementationArtifacts; private XTBoolean _abstract; private XTBoolean _final; - public Builder(Builder builder, String name, QName implementedType) { + public Builder(Builder builder, String name, QName implementedType) { super(builder); this.name = name; this.implementedType = implementedType; @@ -223,17 +215,12 @@ public T setTargetNamespace(String targetNamespace) { return self(); } - public T setTags(XTTags tags) { - this.tags = tags; - return self(); - } - - public T setRequiredContainerFeatures(XTRequiredContainerFeatures requiredContainerFeatures) { + public T setRequiredContainerFeatures(List requiredContainerFeatures) { this.requiredContainerFeatures = requiredContainerFeatures; return self(); } - public T setImplementationArtifacts(XTImplementationArtifacts implementationArtifacts) { + public T setImplementationArtifacts(List implementationArtifacts) { this.implementationArtifacts = implementationArtifacts; return self(); } @@ -253,114 +240,40 @@ public T setFinal(XTBoolean _final) { return self(); } - public T addTags(XTTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return self(); - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return self(); - } - - public T addTags(List tags) { - if (tags == null) { - return self(); - } - - XTTags tmp = new XTTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public T addTags(XTTag tags) { - if (tags == null) { - return self(); - } - - XTTags tmp = new XTTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - - public T addTags(String name, String value) { - if (name == null || name.isEmpty()) { - return self(); - } - - XTTag tmp = new XTTag(); - tmp.setName(name); - tmp.setValue(value); - return addTags(tmp); - } - - public T addRequiredContainerFeatures(XTRequiredContainerFeatures requiredContainerFeatures) { - if (requiredContainerFeatures == null || requiredContainerFeatures.getRequiredContainerFeature().isEmpty()) { + public T addRequiredContainerFeatures(List requiredContainerFeatures) { + if (requiredContainerFeatures == null || requiredContainerFeatures.isEmpty()) { return self(); } if (this.requiredContainerFeatures == null) { this.requiredContainerFeatures = requiredContainerFeatures; } else { - this.requiredContainerFeatures.getRequiredContainerFeature().addAll(requiredContainerFeatures.getRequiredContainerFeature()); + this.requiredContainerFeatures.addAll(requiredContainerFeatures); } return self(); } - public T addRequiredContainerFeatures(List requiredContainerFeatures) { - if (requiredContainerFeatures == null) { - return self(); - } - - XTRequiredContainerFeatures tmp = new XTRequiredContainerFeatures(); - tmp.getRequiredContainerFeature().addAll(requiredContainerFeatures); - return addRequiredContainerFeatures(tmp); - } - - public T addRequiredContainerFeatures(XTRequiredContainerFeature requiredContainerFeatures) { + public T addRequiredContainerFeature(XTRequiredContainerFeature requiredContainerFeatures) { if (requiredContainerFeatures == null) { return self(); } - XTRequiredContainerFeatures tmp = new XTRequiredContainerFeatures(); - tmp.getRequiredContainerFeature().add(requiredContainerFeatures); + List tmp = new ArrayList<>(); + tmp.add(requiredContainerFeatures); return addRequiredContainerFeatures(tmp); } - public T addImplementationArtifacts(XTImplementationArtifacts implementationArtifacts) { - if (implementationArtifacts == null || implementationArtifacts.getImplementationArtifact().isEmpty()) { + public T addImplementationArtifacts(List implementationArtifacts) { + if (implementationArtifacts == null || implementationArtifacts.isEmpty()) { return self(); } if (this.implementationArtifacts == null) { this.implementationArtifacts = implementationArtifacts; } else { - this.implementationArtifacts.getImplementationArtifact().addAll(implementationArtifacts.getImplementationArtifact()); + this.implementationArtifacts.addAll(implementationArtifacts); } return self(); } - - public T addImplementationArtifacts(List implementationArtifacts) { - if (implementationArtifacts == null) { - return self(); - } - - XTImplementationArtifacts tmp = new XTImplementationArtifacts(); - tmp.getImplementationArtifact().addAll(implementationArtifacts); - return addImplementationArtifacts(tmp); - } - - public T addImplementationArtifacts(XTImplementationArtifacts.ImplementationArtifact implementationArtifacts) { - if (implementationArtifacts == null) { - return self(); - } - - XTImplementationArtifacts tmp = new XTImplementationArtifacts(); - tmp.getImplementationArtifact().add(implementationArtifacts); - return addImplementationArtifacts(tmp); - } } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExportedInterface.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExportedInterface.java index d5923be22a..61b332fc3e 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExportedInterface.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExportedInterface.java @@ -14,17 +14,22 @@ package org.eclipse.winery.model.tosca.xml; -import org.eclipse.jdt.annotation.NonNull; - -import javax.xml.bind.annotation.*; - import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + import org.eclipse.winery.model.tosca.xml.visitor.Visitor; +import org.eclipse.jdt.annotation.NonNull; + @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tExportedInterface", propOrder = { "operation" @@ -40,7 +45,8 @@ public class XTExportedInterface implements XHasName, Serializable { protected String name; @Deprecated // required for XML deserialization - public XTExportedInterface() { } + public XTExportedInterface() { + } public XTExportedInterface(Builder builder) { this.name = builder.name; @@ -82,17 +88,13 @@ public void setName(@NonNull String value) { } public static class Builder { - private List operation; - private String name; - public Builder setOperation(List operation) { - this.operation = operation; - return this; - } + private final List operation; + private final String name; - public Builder setName(String name) { + public Builder(String name, List operation) { + this.operation = operation; this.name = name; - return this; } public XTExportedInterface build() { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElementWithTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElementWithTags.java new file mode 100644 index 0000000000..ab9ad777bf --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElementWithTags.java @@ -0,0 +1,104 @@ +/******************************************************************************* + * Copyright (c) 2021 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ + +package org.eclipse.winery.model.tosca.xml; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlTransient; + +import io.github.adr.embedded.ADR; +import org.eclipse.jdt.annotation.Nullable; + +@XmlTransient +@XmlAccessorType(XmlAccessType.FIELD) +public abstract class XTExtensibleElementWithTags extends XTExtensibleElements implements XHasTags { + + @XmlElementWrapper(name = "Tags") + @XmlElement(name = "Tag", required = true) + protected List tags; + + public XTExtensibleElementWithTags(Builder builder) { + super(builder); + this.tags = builder.tags; + } + + @Deprecated + public XTExtensibleElementWithTags() { + } + + public List getTags() { + return tags; + } + + public void setTags(@Nullable List value) { + this.tags = value; + } + + @ADR(11) + public abstract static class Builder> extends XTExtensibleElements.Builder { + + private List tags; + + public Builder() { + } + + public Builder(XTExtensibleElements.Builder builder) { + super(builder); + } + + public Builder(XTExtensibleElements extensibleElements) { + this.addDocumentation(extensibleElements.getDocumentation()); + this.addAny(extensibleElements.getAny()); + this.addOtherAttributes(extensibleElements.getOtherAttributes()); + } + + public T addTags(List tags) { + if (tags == null || tags.isEmpty()) { + return self(); + } + + if (this.tags == null) { + this.tags = tags; + } else { + this.tags.addAll(tags); + } + return self(); + } + + public T addTag(XTTag tag) { + if (tag == null) { + return self(); + } + + ArrayList tmp = new ArrayList<>(); + tmp.add(tag); + return addTags(tmp); + } + + public T addTag(String key, String value) { + if (value == null) { + return self(); + } + + XTTag tag = new XTTag.Builder(key, value).build(); + return addTag(tag); + } + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElements.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElements.java index aeea37b1e6..e96fa01131 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElements.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensibleElements.java @@ -48,7 +48,6 @@ XTRequirementDefinition.class, XTExtension.class, XTCapabilityDefinition.class, - XTExtensions.class, XTDeploymentArtifact.class, XTPlan.class, XTEntityTemplate.class, @@ -72,12 +71,10 @@ public abstract class XTExtensibleElements implements Serializable { @Deprecated // required for XML deserialization public XTExtensibleElements() { } - public XTExtensibleElements(Builder builder) { + public XTExtensibleElements(Builder builder) { this.documentation = builder.documentation; this.any = builder.any; - if (builder.otherAttributes == null) { - this.otherAttributes.clear(); - } else { + if (builder.otherAttributes != null) { this.otherAttributes = builder.otherAttributes; } } @@ -134,7 +131,7 @@ public abstract static class Builder> { public Builder() { } - public Builder(Builder builder) { + public Builder(Builder builder) { this.documentation = builder.documentation; this.any = builder.any; this.otherAttributes = builder.otherAttributes; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensions.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensions.java deleted file mode 100644 index ca6207d5ef..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTExtensions.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.winery.model.tosca.xml.visitor.Visitor; - -import org.eclipse.jdt.annotation.NonNull; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tExtensions", propOrder = { - "extension" -}) -public class XTExtensions extends XTExtensibleElements { - - @XmlElement(name = "Extension", required = true) - protected List extension; - - @Deprecated // required for XML deserialization - public XTExtensions() { } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof XTExtensions)) return false; - if (!super.equals(o)) return false; - XTExtensions that = (XTExtensions) o; - return Objects.equals(extension, that.extension); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), extension); - } - - @NonNull - public List getExtension() { - if (extension == null) { - extension = new ArrayList(); - } - return this.extension; - } - - @Override - public void accept(Visitor visitor) { - visitor.visit(this); - } - -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifact.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifact.java index e74cbe512d..e9a53bf431 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifact.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifact.java @@ -20,7 +20,6 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @@ -34,27 +33,29 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tImplementationArtifact") -@XmlSeeAlso( { - XTImplementationArtifacts.ImplementationArtifact.class -}) public class XTImplementationArtifact extends XTExtensibleElements implements XHasName { @XmlAttribute(name = "name") protected String name; + @XmlAttribute(name = "interfaceName") @XmlSchemaType(name = "anyURI") protected String interfaceName; + @XmlAttribute(name = "operationName") @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String operationName; + @XmlAttribute(name = "artifactType", required = true) protected QName artifactType; + @XmlAttribute(name = "artifactRef") protected QName artifactRef; @Deprecated // required for XML deserialization - public XTImplementationArtifact() { } + public XTImplementationArtifact() { + } public XTImplementationArtifact(Builder builder) { super(builder); @@ -136,7 +137,8 @@ public void setArtifactRef(@Nullable QName value) { this.artifactRef = value; } - public static class Builder> extends XTExtensibleElements.Builder> { + public static class Builder extends XTExtensibleElements.Builder { + private final QName artifactType; private String name; @@ -148,30 +150,30 @@ public Builder(QName artifactType) { this.artifactType = artifactType; } - public T setName(String name) { + public Builder setName(String name) { this.name = name; return self(); } - public T setInterfaceName(String interfaceName) { + public Builder setInterfaceName(String interfaceName) { this.interfaceName = interfaceName; return self(); } - public T setOperationName(String operationName) { + public Builder setOperationName(String operationName) { this.operationName = operationName; return self(); } - public T setArtifactRef(QName artifactRef) { + public Builder setArtifactRef(QName artifactRef) { this.artifactRef = artifactRef; return self(); } @ADR(11) @Override - public T self() { - return (T) this; + public Builder self() { + return this; } public XTImplementationArtifact build() { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifacts.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifacts.java deleted file mode 100644 index 08d5c112da..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTImplementationArtifacts.java +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.namespace.QName; - -import org.eclipse.jdt.annotation.NonNull; - -/** - *

Java class for tImplementationArtifacts complex type. - *

- *

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

- *

- * <complexType name="tImplementationArtifacts">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="ImplementationArtifact" maxOccurs="unbounded">
- *           <complexType>
- *             <complexContent>
- *               <extension base="{http://docs.oasis-open.org/tosca/ns/2011/12}tImplementationArtifact">
- *                 <anyAttribute processContents='lax' namespace='##other'/>
- *               </extension>
- *             </complexContent>
- *           </complexType>
- *         </element>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tImplementationArtifacts", propOrder = { - "implementationArtifact" -}) -public class XTImplementationArtifacts implements Serializable { - - @XmlElement(name = "ImplementationArtifact", required = true) - protected List implementationArtifact; - - @Deprecated // required for XML deserialization - public XTImplementationArtifacts() { } - - public XTImplementationArtifacts(Builder builder) { - this.implementationArtifact = builder.implementationArtifact; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof XTImplementationArtifacts)) return false; - XTImplementationArtifacts that = (XTImplementationArtifacts) o; - return Objects.equals(implementationArtifact, that.implementationArtifact); - } - - @Override - public int hashCode() { - return Objects.hash(implementationArtifact); - } - - /** - * Gets the value of the implementationArtifact property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link XTImplementationArtifacts.ImplementationArtifact - * } - */ - @NonNull - public List getImplementationArtifact() { - if (implementationArtifact == null) { - implementationArtifact = new ArrayList<>(); - } - return this.implementationArtifact; - } - - /** - *

Java class for anonymous complex type. - *

- *

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

- *

-     * <complexType>
-     *   <complexContent>
-     *     <extension base="{http://docs.oasis-open.org/tosca/ns/2011/12}tImplementationArtifact">
-     *       <anyAttribute processContents='lax' namespace='##other'/>
-     *     </extension>
-     *   </complexContent>
-     * </complexType>
-     * 
- */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class ImplementationArtifact extends XTImplementationArtifact { - - @Deprecated // required for XML deserialization - public ImplementationArtifact() { } - - public ImplementationArtifact(Builder builder) { - super(builder); - } - - public static class Builder extends XTImplementationArtifact.Builder { - public Builder(QName artifactType) { - super(artifactType); - } - - public Builder self() { - return this; - } - - public ImplementationArtifact build() { - return new ImplementationArtifact(this); - } - } - } - - public static class Builder { - public final List implementationArtifact; - - public Builder(List implementationArtifact) { - this.implementationArtifact = implementationArtifact; - } - - public XTImplementationArtifacts build() { - return new XTImplementationArtifacts(this); - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInstanceState.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInstanceState.java new file mode 100644 index 0000000000..83a366b4c9 --- /dev/null +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInstanceState.java @@ -0,0 +1,76 @@ +/******************************************************************************* + * Copyright (c) 2019 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 + * which is available at https://www.apache.org/licenses/LICENSE-2.0. + * + * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + *******************************************************************************/ + +package org.eclipse.winery.model.tosca.xml; + +import java.io.Serializable; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + +import org.eclipse.jdt.annotation.NonNull; + +/** + *

Java class for anonymous complex type. + *

+ *

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

+ *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="state" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +public class XTInstanceState implements Serializable { + + @XmlAttribute(name = "state", required = true) + @XmlSchemaType(name = "anyURI") + protected String state; + + @Deprecated + public XTInstanceState() { + } + + public XTInstanceState(String state) { + this.state = state; + } + + /** + * Gets the value of the state property. + * + * @return possible object is {@link String } + */ + @NonNull + public String getState() { + return state; + } + + /** + * Sets the value of the state property. + * + * @param value allowed object is {@link String } + */ + public void setState(String value) { + this.state = value; + } +} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInterface.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInterface.java index 10412d9598..a31f20b74e 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInterface.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInterface.java @@ -14,15 +14,19 @@ package org.eclipse.winery.model.tosca.xml; -import org.eclipse.jdt.annotation.NonNull; - -import javax.xml.bind.annotation.*; - import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlSchemaType; +import javax.xml.bind.annotation.XmlType; + +import org.eclipse.jdt.annotation.NonNull; /** *

Java class for tInterface complex type. @@ -44,21 +48,22 @@ * */ @XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tInterface", propOrder = { - "operation" -}) +@XmlType(name = "tInterface") public class XTInterface implements XHasName, Serializable { + @XmlElement(name = "Operation", required = true) - protected List operation; + protected List operations; + @XmlAttribute(name = "name", required = true) @XmlSchemaType(name = "anyURI") protected String name; @Deprecated // required for XML deserialization - public XTInterface() { } + public XTInterface() { + } public XTInterface(Builder builder) { - this.operation = builder.operation; + this.operations = builder.operation; this.name = builder.name; } @@ -67,23 +72,22 @@ public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof XTInterface)) return false; XTInterface that = (XTInterface) o; - return Objects.equals(operation, that.operation) && + return Objects.equals(operations, that.operations) && Objects.equals(name, that.name); } @Override public int hashCode() { - return Objects.hash(operation, name); + return Objects.hash(operations, name); } /** * Gets the value of the operation property. *

*

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

*

* For example, to add a new item, do as follows: @@ -93,15 +97,14 @@ public int hashCode() { *

*

*

- * Objects of the following type(s) are allowed in the list - * {@link XTOperation } + * Objects of the following type(s) are allowed in the list {@link XTOperation } */ @NonNull - public List getOperation() { - if (operation == null) { - operation = new ArrayList(); + public List getOperations() { + if (operations == null) { + operations = new ArrayList<>(); } - return this.operation; + return this.operations; } /** diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInterfaces.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInterfaces.java deleted file mode 100644 index dfa4f11060..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTInterfaces.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.jdt.annotation.NonNull; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = { - "_interface" -}) -public class XTInterfaces { - - @XmlElement(name = "Interface", required = true) - protected List _interface; - - @Deprecated // required for XML deserialization - public XTInterfaces() { } - - @NonNull - public List getInterface() { - if (_interface == null) { - _interface = new ArrayList<>(); - } - return this._interface; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - XTInterfaces that = (XTInterfaces) o; - return Objects.equals(_interface, that._interface); - } - - @Override - public int hashCode() { - return Objects.hash(_interface); - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeTemplate.java index 3a60064e08..456d16a51b 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeTemplate.java @@ -24,6 +24,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -43,18 +44,28 @@ }) public class XTNodeTemplate extends XRelationshipSourceOrTarget implements XHasPolicies { - @XmlElement(name = "Requirements") - protected XTNodeTemplate.Requirements requirements; - @XmlElement(name = "Capabilities") - protected XTNodeTemplate.Capabilities capabilities; - @XmlElement(name = "Policies") - protected XTPolicies policies; - @XmlElement(name = "DeploymentArtifacts") - protected XTDeploymentArtifacts deploymentArtifacts; + @XmlElementWrapper(name = "Requirements") + @XmlElement(name = "Requirement") + protected List requirements; + + @XmlElementWrapper(name = "Capabilities") + @XmlElement(name = "Capability") + protected List capabilities; + + @XmlElementWrapper(name = "Policies") + @XmlElement(name = "Policy") + protected List policies; + + @XmlElementWrapper(name = "DeploymentArtifacts") + @XmlElement(name = "DeploymentArtifact", required = true) + protected List deploymentArtifacts; + @XmlAttribute(name = "name") protected String name; + @XmlAttribute(name = "minInstances") protected Integer minInstances; + @XmlAttribute(name = "maxInstances") protected String maxInstances; @@ -109,36 +120,36 @@ public String getFakeJacksonType() { return "nodetemplate"; } - public XTNodeTemplate.@Nullable Requirements getRequirements() { + public List getRequirements() { return requirements; } - public void setRequirements(XTNodeTemplate.@Nullable Requirements value) { + public void setRequirements(List value) { this.requirements = value; } - public XTNodeTemplate.@Nullable Capabilities getCapabilities() { + public List getCapabilities() { return capabilities; } - public void setCapabilities(XTNodeTemplate.@Nullable Capabilities value) { + public void setCapabilities(List value) { this.capabilities = value; } - public @Nullable XTPolicies getPolicies() { + public List getPolicies() { return policies; } - public void setPolicies(@Nullable XTPolicies value) { + public void setPolicies(List value) { this.policies = value; } @Nullable - public XTDeploymentArtifacts getDeploymentArtifacts() { + public List getDeploymentArtifacts() { return deploymentArtifacts; } - public void setDeploymentArtifacts(XTDeploymentArtifacts value) { + public void setDeploymentArtifacts(List value) { this.deploymentArtifacts = value; } @@ -151,7 +162,6 @@ public void setName(@Nullable String value) { this.name = value; } - @NonNull public int getMinInstances() { if (minInstances == null) { return 1; @@ -164,7 +174,6 @@ public void setMinInstances(Integer value) { this.minInstances = value; } - @NonNull public String getMaxInstances() { if (maxInstances == null) { return "1"; @@ -188,8 +197,8 @@ public String getX() { } /** - * Sets the top coordinate of a {@link XTNodeTemplate}. When receiving the JSON, this method ensures that (i) the "y" - * property can be handled and (ii) the Y coordinate is written correctly in the extension namespace. + * Sets the top coordinate of a {@link XTNodeTemplate}. When receiving the JSON, this method ensures that (i) the + * "y" property can be handled and (ii) the Y coordinate is written correctly in the extension namespace. * * @param x the value of the x-coordinate to be set */ @@ -210,8 +219,8 @@ public String getY() { } /** - * Sets the top coordinate of a {@link XTNodeTemplate}. When receiving the JSON, this method ensures that (i) the "y" - * property can be handled and (ii) the Y coordinate is written correctly in the extension namespace. + * Sets the top coordinate of a {@link XTNodeTemplate}. When receiving the JSON, this method ensures that (i) the + * "y" property can be handled and (ii) the Y coordinate is written correctly in the extension namespace. * * @param y the value of the coordinate to be set */ @@ -224,59 +233,6 @@ public void accept(@NonNull Visitor visitor) { visitor.visit(this); } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "capability" - }) - public static class Capabilities implements Serializable { - - @XmlElement(name = "Capability", required = true) - protected List capability; - - /** - * Gets the value of the capability property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link XTCapability } - */ - @NonNull - public List getCapability() { - if (capability == null) { - capability = new ArrayList(); - } - return this.capability; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Capabilities that = (Capabilities) o; - return Objects.equals(capability, that.capability); - } - - @Override - public int hashCode() { - return Objects.hash(capability); - } - - public void accept(Visitor visitor) { - visitor.visit(this); - } - } - @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "requirement" @@ -289,7 +245,7 @@ public static class Requirements implements Serializable { @NonNull public List getRequirement() { if (requirement == null) { - requirement = new ArrayList(); + requirement = new ArrayList<>(); } return this.requirement; } @@ -313,10 +269,10 @@ public void accept(Visitor visitor) { } public static class Builder extends XRelationshipSourceOrTarget.Builder { - private Requirements requirements; - private Capabilities capabilities; - private XTPolicies policies; - private XTDeploymentArtifacts deploymentArtifacts; + private List requirements; + private List capabilities; + private List policies; + private List deploymentArtifacts; private String name; private Integer minInstances; private String maxInstances; @@ -331,22 +287,17 @@ public Builder(XTEntityTemplate entityTemplate) { super(entityTemplate); } - public Builder setRequirements(XTNodeTemplate.Requirements requirements) { + public Builder setRequirements(List requirements) { this.requirements = requirements; return this; } - public Builder setCapabilities(XTNodeTemplate.Capabilities capabilities) { + public Builder setCapabilities(List capabilities) { this.capabilities = capabilities; return this; } - public Builder setPolicies(XTPolicies policies) { - this.policies = policies; - return this; - } - - public Builder setDeploymentArtifacts(XTDeploymentArtifacts deploymentArtifacts) { + public Builder setDeploymentArtifacts(List deploymentArtifacts) { this.deploymentArtifacts = deploymentArtifacts; return this; } @@ -376,73 +327,33 @@ public Builder setY(String y) { return this; } - public Builder addRequirements(XTNodeTemplate.Requirements requirements) { - if (requirements == null || requirements.getRequirement().isEmpty()) { + public Builder addRequirements(List requirements) { + if (requirements == null || requirements.isEmpty()) { return this; } if (this.requirements == null) { this.requirements = requirements; } else { - this.requirements.getRequirement().addAll(requirements.getRequirement()); + this.requirements.addAll(requirements); } return this; } - public Builder addRequirements(List requirements) { - if (requirements == null) { - return this; - } - - XTNodeTemplate.Requirements tmp = new XTNodeTemplate.Requirements(); - tmp.getRequirement().addAll(requirements); - return addRequirements(tmp); - } - - public Builder addRequirements(XTRequirement requirements) { - if (requirements == null) { - return this; - } - - XTNodeTemplate.Requirements tmp = new XTNodeTemplate.Requirements(); - tmp.getRequirement().add(requirements); - return addRequirements(tmp); - } - - public Builder addCapabilities(XTNodeTemplate.Capabilities capabilities) { - if (capabilities == null || capabilities.getCapability().isEmpty()) { + public Builder addCapabilities(List capabilities) { + if (capabilities == null || capabilities.isEmpty()) { return this; } if (this.capabilities == null) { this.capabilities = capabilities; } else { - this.capabilities.getCapability().addAll(capabilities.getCapability()); + this.capabilities.addAll(capabilities); } return this; } - public Builder addCapabilities(List capabilities) { - if (capabilities == null) { - return this; - } - - XTNodeTemplate.Capabilities tmp = new XTNodeTemplate.Capabilities(); - tmp.getCapability().addAll(capabilities); - return addCapabilities(tmp); - } - - public Builder addCapabilities(XTCapability capabilities) { - if (capabilities == null) { - return this; - } - - XTNodeTemplate.Capabilities tmp = new XTNodeTemplate.Capabilities(); - tmp.getCapability().add(capabilities); - return addCapabilities(tmp); - } - - public Builder addPolicies(XTPolicies policies) { + public Builder addPolicies(List policies) { if (policies == null) { return this; } @@ -450,31 +361,11 @@ public Builder addPolicies(XTPolicies policies) { if (this.policies == null) { this.policies = policies; } else { - this.policies.getPolicy().addAll(policies.getPolicy()); + this.policies.addAll(policies); } return this; } - public Builder addPolicies(List policies) { - if (policies == null) { - return this; - } - - XTPolicies tmp = new XTPolicies(); - tmp.getPolicy().addAll(policies); - return addPolicies(tmp); - } - - public Builder addPolicies(XTPolicy policies) { - if (policies == null) { - return this; - } - - XTPolicies tmp = new XTPolicies(); - tmp.getPolicy().add(policies); - return addPolicies(tmp); - } - @Override public Builder self() { return this; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeType.java index 95361bda26..ebee00fc5c 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeType.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca.xml; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -22,11 +21,11 @@ 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.XmlType; import org.eclipse.winery.model.tosca.xml.visitor.Visitor; -import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @@ -37,17 +36,25 @@ "interfaces" }) public class XTNodeType extends XTEntityType { - @XmlElement(name = "RequirementDefinitions") - protected XTNodeType.RequirementDefinitions requirementDefinitions; - @XmlElement(name = "CapabilityDefinitions") - protected XTNodeType.CapabilityDefinitions capabilityDefinitions; + + @XmlElementWrapper(name = "RequirementDefinitions") + @XmlElement(name = "RequirementDefinition", required = true) + protected List requirementDefinitions; + + @XmlElementWrapper(name = "CapabilityDefinitions") + @XmlElement(name = "CapabilityDefinition") + protected List capabilityDefinitions; + @XmlElement(name = "InstanceStates") - protected XTTopologyElementInstanceStates instanceStates; - @XmlElement(name = "Interfaces") - protected XTInterfaces interfaces; + protected List instanceStates; + + @XmlElementWrapper(name = "Interfaces") + @XmlElement(name = "Interface", required = true) + protected List interfaces; @Deprecated // required for XML deserialization - public XTNodeType() { } + public XTNodeType() { + } public XTNodeType(Builder builder) { super(builder); @@ -74,36 +81,37 @@ public int hashCode() { return Objects.hash(super.hashCode(), requirementDefinitions, capabilityDefinitions, instanceStates, interfaces); } - public XTNodeType.@Nullable RequirementDefinitions getRequirementDefinitions() { + public List getRequirementDefinitions() { return requirementDefinitions; } - public void setRequirementDefinitions(XTNodeType.@Nullable RequirementDefinitions value) { + public void setRequirementDefinitions(List value) { this.requirementDefinitions = value; } - public XTNodeType.@Nullable CapabilityDefinitions getCapabilityDefinitions() { + public List getCapabilityDefinitions() { return capabilityDefinitions; } - public void setCapabilityDefinitions(XTNodeType.@Nullable CapabilityDefinitions value) { + public void setCapabilityDefinitions(List value) { this.capabilityDefinitions = value; } @Nullable - public XTTopologyElementInstanceStates getInstanceStates() { + public List getInstanceStates() { return instanceStates; } - public void setInstanceStates(@Nullable XTTopologyElementInstanceStates value) { + public void setInstanceStates(List value) { this.instanceStates = value; } - public @Nullable XTInterfaces getInterfaces() { + @Nullable + public List getInterfaces() { return interfaces; } - public void setInterfaces(@Nullable XTInterfaces value) { + public void setInterfaces(@Nullable List value) { this.interfaces = value; } @@ -112,73 +120,12 @@ public void accept(Visitor visitor) { visitor.visit(this); } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "capabilityDefinition" - }) - public static class CapabilityDefinitions implements Serializable { - - @XmlElement(name = "CapabilityDefinition", required = true) - protected List capabilityDefinition; - - @NonNull - public List getCapabilityDefinition() { - if (capabilityDefinition == null) { - capabilityDefinition = new ArrayList(); - } - return this.capabilityDefinition; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CapabilityDefinitions that = (CapabilityDefinitions) o; - return Objects.equals(capabilityDefinition, that.capabilityDefinition); - } - - @Override - public int hashCode() { - return Objects.hash(capabilityDefinition); - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "requirementDefinition" - }) - public static class RequirementDefinitions implements Serializable { - - @XmlElement(name = "RequirementDefinition", required = true) - protected List requirementDefinition; - - @NonNull - public List getRequirementDefinition() { - if (requirementDefinition == null) { - requirementDefinition = new ArrayList(); - } - return this.requirementDefinition; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - RequirementDefinitions that = (RequirementDefinitions) o; - return Objects.equals(requirementDefinition, that.requirementDefinition); - } - - @Override - public int hashCode() { - return Objects.hash(requirementDefinition); - } - } - public static class Builder extends XTEntityType.Builder { - private RequirementDefinitions requirementDefinitions; - private CapabilityDefinitions capabilityDefinitions; - private XTTopologyElementInstanceStates instanceStates; - private XTInterfaces interfaces; + + private List requirementDefinitions; + private List capabilityDefinitions; + private List instanceStates; + private List interfaces; public Builder(String name) { super(name); @@ -188,122 +135,46 @@ public Builder(XTEntityType entityType) { super(entityType); } - public Builder setRequirementDefinitions(XTNodeType.RequirementDefinitions requirementDefinitions) { + public Builder setRequirementDefinitions(List requirementDefinitions) { this.requirementDefinitions = requirementDefinitions; return this; } - public Builder setCapabilityDefinitions(XTNodeType.CapabilityDefinitions capabilityDefinitions) { + public Builder setCapabilityDefinitions(List capabilityDefinitions) { this.capabilityDefinitions = capabilityDefinitions; return this; } - public Builder setInstanceStates(XTTopologyElementInstanceStates instanceStates) { + public Builder setInstanceStates(List instanceStates) { this.instanceStates = instanceStates; return this; } - public Builder setInterfaces(XTInterfaces interfaces) { + public Builder setInterfaces(List interfaces) { this.interfaces = interfaces; return this; } - public Builder addRequirementDefinitions(XTNodeType.RequirementDefinitions requirementDefinitions) { - if (requirementDefinitions == null || requirementDefinitions.getRequirementDefinition().isEmpty()) { - return this; - } - - if (this.requirementDefinitions == null) { - this.requirementDefinitions = requirementDefinitions; - } else { - this.requirementDefinitions.getRequirementDefinition().addAll(requirementDefinitions.getRequirementDefinition()); - } - return this; - } - - public Builder addRequirementDefinitions(List requirementDefinitions) { - if (requirementDefinitions == null) { - return this; - } - - XTNodeType.RequirementDefinitions tmp = new XTNodeType.RequirementDefinitions(); - tmp.getRequirementDefinition().addAll(requirementDefinitions); - return addRequirementDefinitions(tmp); - } - - public Builder addRequirementDefinitions(XTRequirementDefinition requirementDefinition) { - if (requirementDefinition == null) { - return this; - } - - XTNodeType.RequirementDefinitions tmp = new XTNodeType.RequirementDefinitions(); - tmp.getRequirementDefinition().add(requirementDefinition); - return addRequirementDefinitions(tmp); - } - - public Builder addCapabilityDefinitions(XTNodeType.CapabilityDefinitions capabilityDefinitions) { - if (capabilityDefinitions == null || capabilityDefinitions.getCapabilityDefinition().isEmpty()) { - return this; - } - - if (this.capabilityDefinitions == null) { - this.capabilityDefinitions = capabilityDefinitions; - } else { - this.capabilityDefinitions.getCapabilityDefinition().addAll(capabilityDefinitions.getCapabilityDefinition()); - } - return this; - } - - public Builder addCapabilityDefinitions(List capabilityDefinitions) { - if (capabilityDefinitions == null) { - return this; - } - - XTNodeType.CapabilityDefinitions tmp = new XTNodeType.CapabilityDefinitions(); - tmp.getCapabilityDefinition().addAll(capabilityDefinitions); - return addCapabilityDefinitions(tmp); - } - - public Builder addCapabilityDefinitions(XTCapabilityDefinition capabilityDefinitions) { - if (capabilityDefinitions == null) { - return this; - } - - XTNodeType.CapabilityDefinitions tmp = new XTNodeType.CapabilityDefinitions(); - tmp.getCapabilityDefinition().add(capabilityDefinitions); - return addCapabilityDefinitions(tmp); - } - - public Builder addInterfaces(XTInterfaces interfaces) { - if (interfaces == null || interfaces.getInterface().isEmpty()) { + public Builder addInterfaces(List interfaces) { + if (interfaces == null || interfaces.isEmpty()) { return this; } if (this.interfaces == null) { this.interfaces = interfaces; } else { - this.interfaces.getInterface().addAll(interfaces.getInterface()); + this.interfaces.addAll(interfaces); } return this; } - public Builder addInterfaces(List interfaces) { - if (interfaces == null) { - return this; - } - - XTInterfaces tmp = new XTInterfaces(); - tmp.getInterface().addAll(interfaces); - return addInterfaces(tmp); - } - - public Builder addInterfaces(XTInterface interfaces) { + public Builder addInterface(XTInterface interfaces) { if (interfaces == null) { return this; } - XTInterfaces tmp = new XTInterfaces(); - tmp.getInterface().add(interfaces); + List tmp = new ArrayList<>(); + tmp.add(interfaces); return addInterfaces(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeTypeImplementation.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeTypeImplementation.java index fd7cf4c031..7ffe8ba753 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeTypeImplementation.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTNodeTypeImplementation.java @@ -14,18 +14,24 @@ package org.eclipse.winery.model.tosca.xml; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; - -import javax.xml.bind.annotation.*; -import javax.xml.namespace.QName; - import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import java.util.Objects; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlType; +import javax.xml.namespace.QName; + import org.eclipse.winery.model.tosca.xml.visitor.Visitor; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; + /** *

Java class for tNodeTypeImplementation complex type. *

@@ -77,22 +83,21 @@ }) public class XTNodeTypeImplementation extends XTEntityTypeImplementation { - @XmlElement(name = "DeploymentArtifacts") - protected XTDeploymentArtifacts deploymentArtifacts; + @XmlElementWrapper(name = "DeploymentArtifacts") + @XmlElement(name = "DeploymentArtifact", required = true) + protected List deploymentArtifacts; @XmlElement(name = "DerivedFrom") protected XTNodeTypeImplementation.DerivedFrom derivedFrom; @Deprecated // required for XML deserialization public XTNodeTypeImplementation() { - super(); } public XTNodeTypeImplementation(Builder builder) { super(builder); this.derivedFrom = builder.derivedFrom; this.deploymentArtifacts = builder.deploymentArtifacts; - this.implementationArtifacts = builder.implementationArtifacts; } @Override @@ -121,11 +126,11 @@ public void accept(Visitor visitor) { } @Nullable - public XTDeploymentArtifacts getDeploymentArtifacts() { + public List getDeploymentArtifacts() { return deploymentArtifacts; } - public void setDeploymentArtifacts(XTDeploymentArtifacts value) { + public void setDeploymentArtifacts(List value) { this.deploymentArtifacts = value; } @@ -222,10 +227,9 @@ public int hashCode() { } public static class Builder extends XTEntityTypeImplementation.Builder { + private DerivedFrom derivedFrom; - private XTRequiredContainerFeatures requiredContainerFeatures; - private XTImplementationArtifacts implementationArtifacts; - private XTDeploymentArtifacts deploymentArtifacts; + private List deploymentArtifacts; public Builder(XTExtensibleElements extensibleElements, String name, QName implementedNodeType) { super(extensibleElements, name, implementedNodeType); @@ -240,117 +244,31 @@ public Builder setDerivedFrom(XTNodeTypeImplementation.DerivedFrom derivedFrom) return this; } - public Builder setRequiredContainerFeatures(XTRequiredContainerFeatures requiredContainerFeatures) { - this.requiredContainerFeatures = requiredContainerFeatures; - return this; - } - - public Builder setImplementationArtifacts(XTImplementationArtifacts implementationArtifacts) { - this.implementationArtifacts = implementationArtifacts; - return this; - } - - public Builder setDeploymentArtifacts(XTDeploymentArtifacts deploymentArtifacts) { + public Builder setDeploymentArtifacts(List deploymentArtifacts) { this.deploymentArtifacts = deploymentArtifacts; return this; } - public Builder addRequiredContainerFeatures(XTRequiredContainerFeatures requiredContainerFeatures) { - if (requiredContainerFeatures == null || requiredContainerFeatures.getRequiredContainerFeature().isEmpty()) { - return this; - } - - if (this.requiredContainerFeatures == null) { - this.requiredContainerFeatures = requiredContainerFeatures; - } else { - this.requiredContainerFeatures.getRequiredContainerFeature().addAll(requiredContainerFeatures.getRequiredContainerFeature()); - } - return this; - } - - public Builder addRequiredContainerFeatures(List requiredContainerFeatures) { - if (requiredContainerFeatures == null) { - return this; - } - - XTRequiredContainerFeatures tmp = new XTRequiredContainerFeatures(); - tmp.getRequiredContainerFeature().addAll(requiredContainerFeatures); - return addRequiredContainerFeatures(tmp); - } - - public Builder addRequiredContainerFeatures(XTRequiredContainerFeature requiredContainerFeatures) { - if (requiredContainerFeatures == null) { - return this; - } - - XTRequiredContainerFeatures tmp = new XTRequiredContainerFeatures(); - tmp.getRequiredContainerFeature().add(requiredContainerFeatures); - return addRequiredContainerFeatures(tmp); - } - - public Builder addImplementationArtifacts(XTImplementationArtifacts implementationArtifacts) { - if (implementationArtifacts == null || implementationArtifacts.getImplementationArtifact().isEmpty()) { - return this; - } - - if (this.implementationArtifacts == null) { - this.implementationArtifacts = implementationArtifacts; - } else { - this.implementationArtifacts.getImplementationArtifact().addAll(implementationArtifacts.getImplementationArtifact()); - } - return this; - } - - public Builder addImplementationArtifacts(List implementationArtifacts) { - if (implementationArtifacts == null) { - return this; - } - - XTImplementationArtifacts tmp = new XTImplementationArtifacts(); - tmp.getImplementationArtifact().addAll(implementationArtifacts); - return addImplementationArtifacts(tmp); - } - - public Builder addImplementationArtifacts(XTImplementationArtifacts.ImplementationArtifact implementationArtifacts) { - if (implementationArtifacts == null) { - return this; - } - - XTImplementationArtifacts tmp = new XTImplementationArtifacts(); - tmp.getImplementationArtifact().add(implementationArtifacts); - return addImplementationArtifacts(tmp); - } - - public Builder addDeploymentArtifacts(XTDeploymentArtifacts deploymentArtifacts) { - if (deploymentArtifacts == null || deploymentArtifacts.getDeploymentArtifact().isEmpty()) { + public Builder addDeploymentArtifacts(List deploymentArtifacts) { + if (deploymentArtifacts == null || deploymentArtifacts.isEmpty()) { return this; } if (this.deploymentArtifacts == null) { this.deploymentArtifacts = deploymentArtifacts; } else { - this.deploymentArtifacts.getDeploymentArtifact().addAll(deploymentArtifacts.getDeploymentArtifact()); + this.deploymentArtifacts.addAll(deploymentArtifacts); } return this; } - public Builder addDeploymentArtifacts(List deploymentArtifacts) { - if (deploymentArtifacts == null) { - return this; - } - - XTDeploymentArtifacts tmp = new XTDeploymentArtifacts(); - tmp.getDeploymentArtifact().addAll(deploymentArtifacts); - return addDeploymentArtifacts(tmp); - } - - public Builder addDeploymentArtifacts(XTDeploymentArtifact deploymentArtifacts) { - if (deploymentArtifacts == null) { + public Builder addDeploymentArtifact(XTDeploymentArtifact deploymentArtifact) { + if (deploymentArtifact == null) { return this; } - XTDeploymentArtifacts tmp = new XTDeploymentArtifacts(); - tmp.getDeploymentArtifact().add(deploymentArtifacts); + List tmp = new ArrayList<>(); + tmp.add(deploymentArtifact); return addDeploymentArtifacts(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTOperation.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTOperation.java index 193d6c8189..da4c9c91cf 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTOperation.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTOperation.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca.xml; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -23,6 +22,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; @@ -31,7 +31,6 @@ import org.eclipse.winery.model.tosca.xml.visitor.Visitor; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "tOperation", propOrder = { @@ -39,17 +38,23 @@ "outputParameters" }) public class XTOperation extends XTExtensibleElements { - @XmlElement(name = "InputParameters") - protected XTOperation.InputParameters inputParameters; - @XmlElement(name = "OutputParameters") - protected XTOperation.OutputParameters outputParameters; + + @XmlElementWrapper(name = "InputParameters") + @XmlElement(name = "InputParameter", required = true) + protected List inputParameters; + + @XmlElementWrapper(name = "OutputParameters") + @XmlElement(name = "OutputParameter", required = true) + protected List outputParameters; + @XmlAttribute(name = "name", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String name; @Deprecated // required for XML deserialization - public XTOperation() { } + public XTOperation() { + } public XTOperation(Builder builder) { super(builder); @@ -74,19 +79,19 @@ public int hashCode() { return Objects.hash(super.hashCode(), inputParameters, outputParameters, name); } - public XTOperation.@Nullable InputParameters getInputParameters() { + public List getInputParameters() { return inputParameters; } - public void setInputParameters(XTOperation.@Nullable InputParameters value) { + public void setInputParameters(List value) { this.inputParameters = value; } - public XTOperation.@Nullable OutputParameters getOutputParameters() { + public List getOutputParameters() { return outputParameters; } - public void setOutputParameters(XTOperation.@Nullable OutputParameters value) { + public void setOutputParameters(List value) { this.outputParameters = value; } @@ -105,150 +110,68 @@ public void accept(Visitor visitor) { visitor.visit(this); } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "inputParameter" - }) - public static class InputParameters implements Serializable { - - @XmlElement(name = "InputParameter", required = true) - protected List inputParameter; - - @NonNull - public List getInputParameter() { - if (inputParameter == null) { - inputParameter = new ArrayList(); - } - return this.inputParameter; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - InputParameters that = (InputParameters) o; - return Objects.equals(inputParameter, that.inputParameter); - } - - @Override - public int hashCode() { - return Objects.hash(inputParameter); - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "outputParameter" - }) - public static class OutputParameters implements Serializable { - - @XmlElement(name = "OutputParameter", required = true) - protected List outputParameter; - - @NonNull - public List getOutputParameter() { - if (outputParameter == null) { - outputParameter = new ArrayList(); - } - return this.outputParameter; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - OutputParameters that = (OutputParameters) o; - return Objects.equals(outputParameter, that.outputParameter); - } - - @Override - public int hashCode() { - return Objects.hash(outputParameter); - } - } - public static class Builder extends XTExtensibleElements.Builder { private final String name; - private InputParameters inputParameters; - private OutputParameters outputParameters; + private List inputParameters; + private List outputParameters; public Builder(String name) { this.name = name; } - public Builder setInputParameters(XTOperation.InputParameters inputParameters) { + public Builder setInputParameters(List inputParameters) { this.inputParameters = inputParameters; return this; } - public Builder setOutputParameters(XTOperation.OutputParameters outputParameters) { + public Builder setOutputParameters(List outputParameters) { this.outputParameters = outputParameters; return this; } - public Builder addInputParameters(XTOperation.InputParameters inputParameters) { - if (inputParameters == null || inputParameters.getInputParameter().isEmpty()) { + public Builder addInputParameters(List inputParameters) { + if (inputParameters == null || inputParameters.isEmpty()) { return this; } if (this.inputParameters == null) { this.inputParameters = inputParameters; } else { - this.inputParameters.getInputParameter().addAll(inputParameters.getInputParameter()); + this.inputParameters.addAll(inputParameters); } return this; } - public Builder addInputParameters(List inputParameters) { - if (inputParameters == null) { - return this; - } - - XTOperation.InputParameters tmp = new XTOperation.InputParameters(); - tmp.getInputParameter().addAll(inputParameters); - return addInputParameters(tmp); - } - public Builder addInputParameters(XTParameter inputParameters) { if (inputParameters == null) { return this; } - XTOperation.InputParameters tmp = new XTOperation.InputParameters(); - tmp.getInputParameter().add(inputParameters); + List tmp = new ArrayList<>(); + tmp.add(inputParameters); return addInputParameters(tmp); } - public Builder addOutputParameters(XTOperation.OutputParameters outputParameters) { - if (outputParameters == null || outputParameters.getOutputParameter().isEmpty()) { + public Builder addOutputParameters(List outputParameters) { + if (outputParameters == null || outputParameters.isEmpty()) { return this; } if (this.outputParameters == null) { this.outputParameters = outputParameters; } else { - this.outputParameters.getOutputParameter().addAll(outputParameters.getOutputParameter()); + this.outputParameters.addAll(outputParameters); } return this; } - public Builder addOutputParameters(List outputParameters) { - if (outputParameters == null) { - return this; - } - - XTOperation.OutputParameters tmp = new XTOperation.OutputParameters(); - tmp.getOutputParameter().addAll(outputParameters); - return addOutputParameters(tmp); - } - public Builder addOutputParameters(XTParameter outputParameters) { if (outputParameters == null) { return this; } - XTOperation.OutputParameters tmp = new XTOperation.OutputParameters(); - tmp.getOutputParameter().add(outputParameters); + List tmp = new ArrayList<>(); + tmp.add(outputParameters); return addOutputParameters(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPlan.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPlan.java index cb9b39e034..a0ec35ead5 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPlan.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPlan.java @@ -15,7 +15,6 @@ package org.eclipse.winery.model.tosca.xml; import java.io.Serializable; -import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -24,6 +23,7 @@ import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlID; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; @@ -45,32 +45,44 @@ "planModelReference" }) public class XTPlan extends XTExtensibleElements { + @XmlElement(name = "Precondition") protected XTCondition precondition; - @XmlElement(name = "InputParameters") - protected XTPlan.InputParameters inputParameters; - @XmlElement(name = "OutputParameters") - protected XTPlan.OutputParameters outputParameters; + + @XmlElementWrapper(name = "InputParameters") + @XmlElement(name = "InputParameter", required = true) + protected List inputParameters; + + @XmlElementWrapper(name = "OutputParameters") + @XmlElement(name = "OutputParameter", required = true) + protected List outputParameters; + @XmlElement(name = "PlanModel") protected XTPlan.PlanModel planModel; + @XmlElement(name = "PlanModelReference") protected XTPlan.PlanModelReference planModelReference; + @XmlAttribute(name = "id", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlID @XmlSchemaType(name = "ID") protected String id; + @XmlAttribute(name = "name") protected String name; + @XmlAttribute(name = "planType", required = true) @XmlSchemaType(name = "anyURI") protected String planType; + @XmlAttribute(name = "planLanguage", required = true) @XmlSchemaType(name = "anyURI") protected String planLanguage; @Deprecated // required for XML deserialization - public XTPlan() { } + public XTPlan() { + } public XTPlan(Builder builder) { super(builder); @@ -116,19 +128,19 @@ public void setPrecondition(@Nullable XTCondition value) { this.precondition = value; } - public XTPlan.@Nullable InputParameters getInputParameters() { + public List getInputParameters() { return inputParameters; } - public void setInputParameters(XTPlan.@Nullable InputParameters value) { + public void setInputParameters(List value) { this.inputParameters = value; } - public XTPlan.@Nullable OutputParameters getOutputParameters() { + public List getOutputParameters() { return outputParameters; } - public void setOutputParameters(XTPlan.@Nullable OutputParameters value) { + public void setOutputParameters(List value) { this.outputParameters = value; } @@ -186,108 +198,6 @@ public void setPlanLanguage(@NonNull String value) { public void accept(Visitor visitor) { visitor.visit(this); - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "inputParameter" - }) - public static class InputParameters implements Serializable { - - @XmlElement(name = "InputParameter", required = true) - protected List inputParameter; - - /** - * Gets the value of the inputParameter property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link XTParameter } - */ - @NonNull - public List getInputParameter() { - if (inputParameter == null) { - inputParameter = new ArrayList(); - } - return this.inputParameter; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - InputParameters that = (InputParameters) o; - return Objects.equals(inputParameter, that.inputParameter); - } - - @Override - public int hashCode() { - return Objects.hash(inputParameter); - } - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "outputParameter" - }) - public static class OutputParameters implements Serializable { - - @XmlElement(name = "OutputParameter", required = true) - protected List outputParameter; - - /** - * Gets the value of the outputParameter property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link XTParameter } - */ - @NonNull - public List getOutputParameter() { - if (outputParameter == null) { - outputParameter = new ArrayList(); - } - return this.outputParameter; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - OutputParameters that = (OutputParameters) o; - return Objects.equals(outputParameter, that.outputParameter); - } - - @Override - public int hashCode() { - return Objects.hash(outputParameter); - } } @XmlAccessorType(XmlAccessType.FIELD) @@ -380,8 +290,8 @@ public static class Builder extends XTExtensibleElements.Builder { private final String planLanguage; private XTCondition precondition; - private InputParameters inputParameters; - private OutputParameters outputParameters; + private List inputParameters; + private List outputParameters; private PlanModel planModel; private PlanModelReference planModelReference; private String name; @@ -397,12 +307,12 @@ public Builder setPrecondition(XTCondition precondition) { return this; } - public Builder setInputParameters(InputParameters inputParameters) { + public Builder setInputParameters(List inputParameters) { this.inputParameters = inputParameters; return this; } - public Builder setOutputParameters(OutputParameters outputParameters) { + public Builder setOutputParameters(List outputParameters) { this.outputParameters = outputParameters; return this; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPlans.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPlans.java deleted file mode 100644 index 7e524bb7f5..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPlans.java +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; - -import javax.xml.bind.annotation.*; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - - -/** - *

Java class for tPlans complex type. - *

- *

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

- *

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

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link XTPlan } - */ - @NonNull - public List getPlan() { - if (plan == null) { - plan = new ArrayList(); - } - return this.plan; - } - - /** - * Gets the value of the targetNamespace property. - * - * @return possible object is {@link String } - */ - @Nullable - public String getTargetNamespace() { - return targetNamespace; - } - - /** - * Sets the value of the targetNamespace property. - * - * @param value allowed object is {@link String } - */ - public void setTargetNamespace(String value) { - this.targetNamespace = value; - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPolicies.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPolicies.java deleted file mode 100644 index fe764b78b8..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPolicies.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2018-2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.jdt.annotation.NonNull; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "Policies", propOrder = { - "policy" -}) -public class XTPolicies implements Serializable { - - @XmlElement(name = "Policy", required = true) - protected List policy; - - @Deprecated // required for XML deserialization - public XTPolicies() { } - - public XTPolicies(List policies) { - this.policy = policies; - } - - @NonNull - public List getPolicy() { - if (policy == null) { - policy = new ArrayList<>(); - } - return this.policy; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - XTPolicies policies = (XTPolicies) o; - return Objects.equals(policy, policies.policy); - } - - @Override - public int hashCode() { - return Objects.hash(policy); - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPolicyType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPolicyType.java index 317cd0afe4..c8486e372a 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPolicyType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPolicyType.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2013-2020 Contributors to the Eclipse Foundation + * Copyright (c) 2013-2021 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -14,17 +14,22 @@ package org.eclipse.winery.model.tosca.xml; +import java.io.Serializable; +import java.util.List; import java.util.Objects; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; +import javax.xml.namespace.QName; import org.eclipse.winery.model.tosca.xml.visitor.Visitor; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @XmlAccessorType(XmlAccessType.FIELD) @@ -32,15 +37,18 @@ "appliesTo" }) public class XTPolicyType extends XTEntityType { - - @XmlElement(name = "AppliesTo") - protected XTAppliesTo appliesTo; + + @XmlElementWrapper(name = "AppliesTo") + @XmlElement(name = "NodeTypeReference", required = true) + protected List appliesTo; + @XmlAttribute(name = "policyLanguage") @XmlSchemaType(name = "anyURI") protected String policyLanguage; @Deprecated // required for XML deserialization - public XTPolicyType() { } + public XTPolicyType() { + } public XTPolicyType(Builder builder) { super(builder); @@ -64,11 +72,11 @@ public int hashCode() { } @Nullable - public XTAppliesTo getAppliesTo() { + public List getAppliesTo() { return appliesTo; } - public void setAppliesTo(@Nullable XTAppliesTo value) { + public void setAppliesTo(@Nullable List value) { this.appliesTo = value; } @@ -86,8 +94,56 @@ public void accept(Visitor visitor) { visitor.visit(this); } + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "") + public static class XNodeTypeReference implements Serializable { + + @XmlAttribute(name = "typeRef", required = true) + protected QName typeRef; + + @SuppressWarnings("unused") + public XNodeTypeReference() { + } + + public XNodeTypeReference(QName typeRef) { + this.typeRef = typeRef; + } + + /** + * Gets the value of the typeRef property. + * + * @return possible object is {@link QName } + */ + @NonNull + public QName getTypeRef() { + return typeRef; + } + + /** + * Sets the value of the typeRef property. + * + * @param value allowed object is {@link QName } + */ + public void setTypeRef(QName value) { + this.typeRef = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + XNodeTypeReference that = (XNodeTypeReference) o; + return Objects.equals(typeRef, that.typeRef); + } + + @Override + public int hashCode() { + return Objects.hash(typeRef); + } + } + public static class Builder extends XTEntityType.Builder { - private XTAppliesTo appliesTo; + private List appliesTo; private String policyLanguage; public Builder(String name) { @@ -98,7 +154,7 @@ public Builder(XTEntityType entityType) { super(entityType); } - public Builder setAppliesTo(XTAppliesTo appliesTo) { + public Builder setAppliesTo(List appliesTo) { this.appliesTo = appliesTo; return this; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPropertyMapping.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPropertyMapping.java index c66be12778..85bc31ff39 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPropertyMapping.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTPropertyMapping.java @@ -47,7 +47,8 @@ public class XTPropertyMapping implements Serializable { protected String targetPropertyRef; @Deprecated // required for XML deserialization - public XTPropertyMapping() { } + public XTPropertyMapping() { + } private XTPropertyMapping(Builder builder) { this.serviceTemplatePropertyRef = builder.serviceTemplatePropertyRef; @@ -100,23 +101,15 @@ public void setTargetPropertyRef(@NonNull String value) { } public static class Builder { - private String serviceTemplatePropertyRef; - private XHasId targetObjectRef; - private String targetPropertyRef; - public Builder setServiceTemplatePropertyRef(String serviceTemplatePropertyRef) { - this.serviceTemplatePropertyRef = serviceTemplatePropertyRef; - return this; - } + private final String serviceTemplatePropertyRef; + private final XHasId targetObjectRef; + private final String targetPropertyRef; - public Builder setTargetObjectRef(XHasId targetObjectRef) { + public Builder(String serviceTemplatePropertyRef, XHasId targetObjectRef, String targetPropertyRef) { + this.serviceTemplatePropertyRef = serviceTemplatePropertyRef; this.targetObjectRef = targetObjectRef; - return this; - } - - public Builder setTargetPropertyRef(String targetPropertyRef) { this.targetPropertyRef = targetPropertyRef; - return this; } public XTPropertyMapping build() { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRelationshipTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRelationshipTemplate.java index a0812275aa..58ec34a8f4 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRelationshipTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRelationshipTemplate.java @@ -24,6 +24,7 @@ import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlIDREF; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; @@ -48,12 +49,16 @@ public class XTRelationshipTemplate extends XTEntityTemplate implements XHasPoli @XmlElement(name = "SourceElement") // AD: We need to combine source or target due to multi-inheritance protected XTRelationshipTemplate.@NonNull SourceOrTargetElement sourceElement; + @XmlElement(name = "TargetElement") protected XTRelationshipTemplate.@NonNull SourceOrTargetElement targetElement; + @XmlElement(name = "RelationshipConstraints") protected XTRelationshipTemplate.RelationshipConstraints relationshipConstraints; - @XmlElement(name = "Policies") - protected XTPolicies policies; + + @XmlElementWrapper(name = "Policies") + @XmlElement(name = "Policy", required = true) + protected List policies; @XmlAttribute(name = "name") protected String name; @@ -63,10 +68,6 @@ public XTRelationshipTemplate() { super(); } - public XTRelationshipTemplate(String id) { - super(id); - } - public XTRelationshipTemplate(Builder builder) { super(builder); this.sourceElement = builder.sourceElement; @@ -241,7 +242,7 @@ public int hashCode() { } @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "RelationshipSourceOrTaget") + @XmlType(name = "RelationshipSourceOrTarget") public static class SourceOrTargetElement implements Serializable { // We serialize XML and JSON differently. Solution for JSON taken from https://stackoverflow.com/a/17583175/873282 @@ -273,11 +274,11 @@ public int hashCode() { } } - public XTPolicies getPolicies() { + public List getPolicies() { return policies; } - public void setPolicies(XTPolicies policies) { + public void setPolicies(List policies) { this.policies = policies; } @@ -285,7 +286,7 @@ public static class Builder extends XTEntityTemplate.Builder { private final SourceOrTargetElement sourceElement; private final SourceOrTargetElement targetElement; private RelationshipConstraints relationshipConstraints; - private XTPolicies policies; + private List policies; private String name; public Builder(String id, QName type, XTRelationshipTemplate.SourceOrTargetElement sourceElement, XTRelationshipTemplate.SourceOrTargetElement targetElement) { @@ -336,9 +337,17 @@ public Builder addRelationshipConstraints(RelationshipConstraints.RelationshipCo tmp.getRelationshipConstraint().add(relationshipConstraints); return addRelationshipConstraints(tmp); } - - public Builder addPolicies(XTPolicies policies) { - this.policies = policies; + + public Builder addPolicies(List policies) { + if (policies == null) { + return this; + } + + if (this.policies == null) { + this.policies = policies; + } else { + this.policies.addAll(policies); + } return self(); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRelationshipType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRelationshipType.java index 7fcffe358d..47aa66b776 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRelationshipType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRelationshipType.java @@ -15,6 +15,7 @@ package org.eclipse.winery.model.tosca.xml; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -22,6 +23,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -42,21 +44,31 @@ }) public class XTRelationshipType extends XTEntityType { - @XmlElement(name = "InstanceStates") - protected XTTopologyElementInstanceStates instanceStates; - @XmlElement(name = "Interfaces", namespace = Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE) - protected XTInterfaces interfaces; - @XmlElement(name = "SourceInterfaces") - protected XTInterfaces sourceInterfaces; - @XmlElement(name = "TargetInterfaces") - protected XTInterfaces targetInterfaces; + @XmlElementWrapper(name = "InstanceStates") + @XmlElement(name = "InstanceState", required = true) + protected List instanceStates; + + @XmlElementWrapper(name = "Interfaces", namespace = Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE) + @XmlElement(name = "Interface", required = true) + protected List interfaces; + + @XmlElementWrapper(name = "SourceInterfaces") + @XmlElement(name = "Interface", required = true) + protected List sourceInterfaces; + + @XmlElementWrapper(name = "TargetInterfaces") + @XmlElement(name = "Interface", required = true) + protected List targetInterfaces; + @XmlElement(name = "ValidSource") protected XTRelationshipType.ValidSource validSource; + @XmlElement(name = "ValidTarget") protected XTRelationshipType.ValidTarget validTarget; @Deprecated // required for XML deserialization - public XTRelationshipType() { } + public XTRelationshipType() { + } public XTRelationshipType(Builder builder) { super(builder); @@ -88,36 +100,36 @@ public int hashCode() { } @Nullable - public XTTopologyElementInstanceStates getInstanceStates() { + public List getInstanceStates() { return instanceStates; } - public void setInstanceStates(@Nullable XTTopologyElementInstanceStates value) { + public void setInstanceStates(List value) { this.instanceStates = value; } @Nullable - public XTInterfaces getInterfaces() { + public List getInterfaces() { return interfaces; } - public void setInterfaces(@Nullable XTInterfaces interfaces) { + public void setInterfaces(@Nullable List interfaces) { this.interfaces = interfaces; } - public @Nullable XTInterfaces getSourceInterfaces() { + public @Nullable List getSourceInterfaces() { return sourceInterfaces; } - public void setSourceInterfaces(@Nullable XTInterfaces value) { + public void setSourceInterfaces(@Nullable List value) { this.sourceInterfaces = value; } - public @Nullable XTInterfaces getTargetInterfaces() { + public @Nullable List getTargetInterfaces() { return targetInterfaces; } - public void setTargetInterfaces(@Nullable XTInterfaces value) { + public void setTargetInterfaces(@Nullable List value) { this.targetInterfaces = value; } @@ -205,10 +217,11 @@ public int hashCode() { } public static class Builder extends XTEntityType.Builder { - private XTTopologyElementInstanceStates instanceStates; - private XTInterfaces interfaces; - private XTInterfaces sourceInterfaces; - private XTInterfaces targetInterfaces; + + private List instanceStates; + private List interfaces; + private List sourceInterfaces; + private List targetInterfaces; private ValidSource validSource; private ValidTarget validTarget; @@ -220,17 +233,17 @@ public Builder(XTEntityType entityType) { super(entityType); } - public Builder setInstanceStates(XTTopologyElementInstanceStates instanceStates) { + public Builder setInstanceStates(List instanceStates) { this.instanceStates = instanceStates; return this; } - public Builder setSourceInterfaces(XTInterfaces sourceInterfaces) { + public Builder setSourceInterfaces(List sourceInterfaces) { this.sourceInterfaces = sourceInterfaces; return this; } - public Builder setTargetInterfaces(XTInterfaces targetInterfaces) { + public Builder setTargetInterfaces(List targetInterfaces) { this.targetInterfaces = targetInterfaces; return this; } @@ -265,102 +278,62 @@ public Builder setValidTarget(QName validTarget) { return setValidTarget(tmp); } - public Builder addInterfaces(XTInterfaces interfaces) { - if (interfaces == null || interfaces.getInterface().isEmpty()) { + public Builder addInterfaces(List interfaces) { + if (interfaces == null || interfaces.isEmpty()) { return this; } if (this.interfaces == null) { this.interfaces = interfaces; } else { - this.interfaces.getInterface().addAll(interfaces.getInterface()); + this.interfaces.addAll(interfaces); } return this; } - public Builder addInterfaces(List interfaces) { - if (interfaces == null) { - return this; - } - - XTInterfaces tmp = new XTInterfaces(); - tmp.getInterface().addAll(interfaces); - return addInterfaces(tmp); - } - public Builder addInterfaces(XTInterface interfaces) { if (interfaces == null) { return this; } - XTInterfaces tmp = new XTInterfaces(); - tmp.getInterface().add(interfaces); + List tmp = new ArrayList<>(); + tmp.add(interfaces); return addInterfaces(tmp); } - public Builder addSourceInterfaces(XTInterfaces sourceInterfaces) { - if (sourceInterfaces == null || sourceInterfaces.getInterface().isEmpty()) { + public Builder addSourceInterfaces(List sourceInterfaces) { + if (sourceInterfaces == null || sourceInterfaces.isEmpty()) { return this; } if (this.sourceInterfaces == null) { this.sourceInterfaces = sourceInterfaces; } else { - this.sourceInterfaces.getInterface().addAll(sourceInterfaces.getInterface()); + this.sourceInterfaces.addAll(sourceInterfaces); } return this; } - public Builder addSourceInterfaces(List sourceInterfaces) { - if (sourceInterfaces == null) { - return this; - } - - XTInterfaces tmp = new XTInterfaces(); - tmp.getInterface().addAll(sourceInterfaces); - return addSourceInterfaces(tmp); - } - - public Builder addSourceInterfaces(XTInterface sourceInterfaces) { - if (sourceInterfaces == null) { - return this; - } - - XTInterfaces tmp = new XTInterfaces(); - tmp.getInterface().add(sourceInterfaces); - return addSourceInterfaces(tmp); - } - - public Builder addTargetInterfaces(XTInterfaces targetInterfaces) { - if (targetInterfaces == null || targetInterfaces.getInterface().isEmpty()) { + public Builder addTargetInterfaces(List targetInterfaces) { + if (targetInterfaces == null || targetInterfaces.isEmpty()) { return this; } if (this.targetInterfaces == null) { this.targetInterfaces = targetInterfaces; } else { - this.targetInterfaces.getInterface().addAll(targetInterfaces.getInterface()); + this.targetInterfaces.addAll(targetInterfaces); } return this; } - public Builder addTargetInterfaces(List targetInterfaces) { - if (targetInterfaces == null) { - return this; - } - - XTInterfaces tmp = new XTInterfaces(); - tmp.getInterface().addAll(targetInterfaces); - return addTargetInterfaces(tmp); - } - public Builder addTargetInterfaces(XTInterface targetInterfaces) { if (targetInterfaces == null) { return this; } - XTInterfaces tmp = new XTInterfaces(); - tmp.getInterface().add(targetInterfaces); + List tmp = new ArrayList<>(); + tmp.add(targetInterfaces); return addTargetInterfaces(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRequiredContainerFeatures.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRequiredContainerFeatures.java deleted file mode 100644 index a18224a77f..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRequiredContainerFeatures.java +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import org.eclipse.jdt.annotation.NonNull; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - - -/** - *

Java class for tRequiredContainerFeatures complex type. - *

- *

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

- *

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

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link XTRequiredContainerFeature } - */ - @NonNull - public List getRequiredContainerFeature() { - if (requiredContainerFeature == null) { - requiredContainerFeature = new ArrayList(); - } - return this.requiredContainerFeature; - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRequirementDefinition.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRequirementDefinition.java index bb0c323b6a..9f6ea56781 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRequirementDefinition.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTRequirementDefinition.java @@ -14,7 +14,6 @@ package org.eclipse.winery.model.tosca.xml; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -23,6 +22,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -36,26 +36,36 @@ "constraints" }) public class XTRequirementDefinition extends XTExtensibleElements { - @XmlElement(name = "Constraints") - protected XTRequirementDefinition.Constraints constraints; + + @XmlElementWrapper(name = "Constraints") + @XmlElement(name = "Constraint", required = true) + protected List constraints; + @XmlAttribute(name = "name", required = true) protected String name; + @XmlAttribute(name = "requirementType") protected QName requirementType; + @XmlAttribute(name = "lowerBound") protected Integer lowerBound; + @XmlAttribute(name = "upperBound") protected String upperBound; + // the following attributes are introduced to support the YAML specs @XmlAttribute(name = "capability") private QName capability; + @XmlAttribute(name = "node") private QName node; + @XmlAttribute(name = "relationship") private QName relationship; @Deprecated // required for XML deserialization - public XTRequirementDefinition() { } + public XTRequirementDefinition() { + } public XTRequirementDefinition(Builder builder) { super(builder); @@ -92,11 +102,11 @@ public void accept(Visitor visitor) { visitor.visit(this); } - public XTRequirementDefinition.@Nullable Constraints getConstraints() { + public List getConstraints() { return constraints; } - public void setConstraints(XTRequirementDefinition.@Nullable Constraints value) { + public void setConstraints(List value) { this.constraints = value; } @@ -120,7 +130,6 @@ public void setRequirementType(@NonNull QName value) { this.requirementType = value; } - @NonNull public int getLowerBound() { if (lowerBound == null) { return 1; @@ -170,41 +179,10 @@ public void setRelationship(QName relationship) { this.relationship = relationship; } - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "", propOrder = { - "constraint" - }) - public static class Constraints implements Serializable { - - @XmlElement(name = "Constraint", required = true) - protected List constraint; - - @NonNull - public List getConstraint() { - if (constraint == null) { - constraint = new ArrayList(); - } - return this.constraint; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Constraints that = (Constraints) o; - return Objects.equals(constraint, that.constraint); - } - - @Override - public int hashCode() { - return Objects.hash(constraint); - } - } - public static class Builder extends XTExtensibleElements.Builder { private final String name; private final QName requirementType; - private Constraints constraints; + private List constraints; private Integer lowerBound; private String upperBound; private QName capability; @@ -223,7 +201,7 @@ public Builder(String name, QName requirementType) { this.requirementType = requirementType; } - public Builder setConstraints(XTRequirementDefinition.Constraints constraints) { + public Builder setConstraints(List constraints) { this.constraints = constraints; return this; } @@ -253,36 +231,26 @@ public Builder setRelationship(QName relationship) { return self(); } - public Builder addConstraints(XTRequirementDefinition.Constraints constraints) { - if (constraints == null || constraints.getConstraint().isEmpty()) { + public Builder addConstraints(List constraints) { + if (constraints == null || constraints.isEmpty()) { return this; } if (this.constraints == null) { this.constraints = constraints; } else { - this.constraints.getConstraint().addAll(constraints.getConstraint()); + this.constraints.addAll(constraints); } return this; } - public Builder addConstraints(List constraints) { - if (constraints == null) { - return this; - } - - XTRequirementDefinition.Constraints tmp = new XTRequirementDefinition.Constraints(); - tmp.getConstraint().addAll(constraints); - return addConstraints(tmp); - } - - public Builder addConstraints(XTConstraint constraints) { + public Builder addConstraint(XTConstraint constraints) { if (constraints == null) { return this; } - XTRequirementDefinition.Constraints tmp = new XTRequirementDefinition.Constraints(); - tmp.getConstraint().add(constraints); + List tmp = new ArrayList<>(); + tmp.add(constraints); return addConstraints(tmp); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTServiceTemplate.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTServiceTemplate.java index ec716cde68..b0e7a48cfb 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTServiceTemplate.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTServiceTemplate.java @@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.namespace.QName; @@ -37,10 +38,7 @@ "topologyTemplate", "plans" }) -public class XTServiceTemplate extends XHasId implements XHasName, XHasTargetNamespace { - - @XmlElement(name = "Tags") - protected XTTags tags; +public class XTServiceTemplate extends XHasIdAndTags implements XHasName, XHasTargetNamespace { @XmlElement(name = "BoundaryDefinitions") protected XTBoundaryDefinitions boundaryDefinitions; @@ -48,8 +46,9 @@ public class XTServiceTemplate extends XHasId implements XHasName, XHasTargetNam @XmlElement(name = "TopologyTemplate", required = true) protected XTTopologyTemplate topologyTemplate; - @XmlElement(name = "Plans") - protected XTPlans plans; + @XmlElementWrapper(name = "Plans") + @XmlElement(name = "Plan", required = true) + protected List plans; @XmlAttribute(name = "name") protected String name; @@ -62,11 +61,11 @@ public class XTServiceTemplate extends XHasId implements XHasName, XHasTargetNam protected QName substitutableNodeType; @Deprecated // required for XML deserialization - public XTServiceTemplate() { } + public XTServiceTemplate() { + } public XTServiceTemplate(Builder builder) { super(builder); - this.tags = builder.tags; this.boundaryDefinitions = builder.boundaryDefinitions; this.topologyTemplate = builder.topologyTemplate; this.plans = builder.plans; @@ -95,15 +94,6 @@ public int hashCode() { return Objects.hash(super.hashCode(), tags, boundaryDefinitions, topologyTemplate, plans, name, targetNamespace, substitutableNodeType); } - @Nullable - public XTTags getTags() { - return tags; - } - - public void setTags(@Nullable XTTags value) { - this.tags = value; - } - @Nullable public XTBoundaryDefinitions getBoundaryDefinitions() { return boundaryDefinitions; @@ -131,11 +121,11 @@ public void setTopologyTemplate(@Nullable XTTopologyTemplate value) { } @Nullable - public XTPlans getPlans() { + public List getPlans() { return plans; } - public void setPlans(@Nullable XTPlans value) { + public void setPlans(List value) { this.plans = value; } @@ -170,16 +160,16 @@ public void accept(Visitor visitor) { visitor.visit(this); } - public static class Builder extends XHasId.Builder { + public static class Builder extends XHasIdAndTags.Builder { + private final XTTopologyTemplate topologyTemplate; - private XTTags tags; private XTBoundaryDefinitions boundaryDefinitions; - private XTPlans plans; + private List plans; private String name; private String targetNamespace; private QName substitutableNodeType; - + public Builder(String id) { super(id); topologyTemplate = null; @@ -190,17 +180,12 @@ public Builder(String id, XTTopologyTemplate topologyTemplate) { this.topologyTemplate = topologyTemplate; } - public Builder setTags(XTTags tags) { - this.tags = tags; - return this; - } - public Builder setBoundaryDefinitions(XTBoundaryDefinitions boundaryDefinitions) { this.boundaryDefinitions = boundaryDefinitions; return this; } - public Builder setPlans(XTPlans plans) { + public Builder setPlans(List plans) { this.plans = plans; return this; } @@ -220,39 +205,6 @@ public Builder setSubstitutableNodeType(QName substitutableNodeType) { return this; } - public Builder addTags(XTTags tags) { - if (tags == null || tags.getTag().isEmpty()) { - return this; - } - - if (this.tags == null) { - this.tags = tags; - } else { - this.tags.getTag().addAll(tags.getTag()); - } - return this; - } - - public Builder addTags(List tags) { - if (tags == null) { - return this; - } - - XTTags tmp = new XTTags(); - tmp.getTag().addAll(tags); - return addTags(tmp); - } - - public Builder addTags(XTTag tags) { - if (tags == null) { - return this; - } - - XTTags tmp = new XTTags(); - tmp.getTag().add(tags); - return addTags(tmp); - } - @Override public Builder self() { return this; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTag.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTag.java index 72e55c89e0..5c40ffc1c8 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTag.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTag.java @@ -87,14 +87,9 @@ public static class Builder { private String name; private String value; - public Builder setName(String name) { + public Builder(String name, String value) { this.name = name; - return this; - } - - public Builder setValue(String value) { this.value = value; - return this; } public XTTag build() { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTags.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTags.java deleted file mode 100644 index 6e98847802..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTags.java +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import org.eclipse.jdt.annotation.NonNull; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -/** - *

Java class for tTags complex type. - *

- *

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

- *

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

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link XTTag } - */ - @NonNull - public List getTag() { - if (tag == null) { - tag = new ArrayList(); - } - return this.tag; - } - - public static class Builder { - private List tag; - - public Builder() { - - } - - public Builder setTag(List tag) { - this.tag = tag; - return this; - } - - public Builder addTag(List tag) { - if (tag == null) { - return this; - } - - if (this.tag == null) { - this.tag = tag; - } else { - this.tag.addAll(tag); - } - return this; - } - - public Builder addTag(XTTag tag) { - if (tag == null) { - return this; - } - - List tmp = new ArrayList<>(); - tmp.add(tag); - return addTag(tmp); - } - - public Builder addTag(String name, String value) { - if (name == null || name.isEmpty()) { - return this; - } - - XTTag tag = new XTTag(); - tag.setName(name); - tag.setValue(value); - return addTag(tag); - } - - public XTTags build() { - return new XTTags(this); - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTopologyElementInstanceStates.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTopologyElementInstanceStates.java deleted file mode 100644 index f9592dde70..0000000000 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/XTTopologyElementInstanceStates.java +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ - -package org.eclipse.winery.model.tosca.xml; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - -import org.eclipse.jdt.annotation.NonNull; - -/** - *

Java class for tTopologyElementInstanceStates complex type. - *

- *

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

- *

- * <complexType name="tTopologyElementInstanceStates">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="InstanceState" maxOccurs="unbounded">
- *           <complexType>
- *             <complexContent>
- *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *                 <attribute name="state" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
- *               </restriction>
- *             </complexContent>
- *           </complexType>
- *         </element>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "tTopologyElementInstanceStates", propOrder = { - "instanceState" -}) -public class XTTopologyElementInstanceStates implements Serializable { - - @XmlElement(name = "InstanceState", required = true) - protected List instanceState; - - @Deprecated // required for XML deserialization - public XTTopologyElementInstanceStates() { } - - public XTTopologyElementInstanceStates(List states) { - this.instanceState = states; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof XTTopologyElementInstanceStates)) return false; - XTTopologyElementInstanceStates that = (XTTopologyElementInstanceStates) o; - return Objects.equals(instanceState, that.instanceState); - } - - @Override - public int hashCode() { - return Objects.hash(instanceState); - } - - /** - * Gets the value of the instanceState property. - *

- *

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

- *

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

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

- *

- *

- * Objects of the following type(s) are allowed in the list {@link XTTopologyElementInstanceStates.InstanceState } - */ - @NonNull - public List getInstanceState() { - if (instanceState == null) { - instanceState = new ArrayList(); - } - return this.instanceState; - } - - /** - *

Java class for anonymous complex type. - *

- *

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

- *

-     * <complexType>
-     *   <complexContent>
-     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
-     *       <attribute name="state" use="required" type="{http://www.w3.org/2001/XMLSchema}anyURI" />
-     *     </restriction>
-     *   </complexContent>
-     * </complexType>
-     * 
- */ - @XmlAccessorType(XmlAccessType.FIELD) - @XmlType(name = "") - public static class InstanceState implements Serializable { - - @XmlAttribute(name = "state", required = true) - @XmlSchemaType(name = "anyURI") - protected String state; - - /** - * Gets the value of the state property. - * - * @return possible object is {@link String } - */ - @NonNull - public String getState() { - return state; - } - - /** - * Sets the value of the state property. - * - * @param value allowed object is {@link String } - */ - public void setState(String value) { - this.state = value; - } - } -} diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTComplianceRule.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTComplianceRule.java index 88d4f72eac..cb9d361307 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTComplianceRule.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTComplianceRule.java @@ -13,8 +13,6 @@ *******************************************************************************/ package org.eclipse.winery.model.tosca.xml.extensions; -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; @@ -22,11 +20,9 @@ import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; -import org.eclipse.winery.model.tosca.xml.XHasId; +import org.eclipse.winery.model.tosca.xml.XHasIdAndTags; import org.eclipse.winery.model.tosca.xml.XHasName; import org.eclipse.winery.model.tosca.xml.XHasTargetNamespace; -import org.eclipse.winery.model.tosca.xml.XTTag; -import org.eclipse.winery.model.tosca.xml.XTTags; import org.eclipse.winery.model.tosca.xml.XTTopologyTemplate; import org.eclipse.winery.model.tosca.xml.visitor.Visitor; @@ -34,7 +30,7 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "otComplianceRule") -public class XOTComplianceRule extends XHasId implements XHasName, XHasTargetNamespace { +public class XOTComplianceRule extends XHasIdAndTags implements XHasName, XHasTargetNamespace { @XmlAttribute protected String name; @@ -49,20 +45,17 @@ public class XOTComplianceRule extends XHasId implements XHasName, XHasTargetNam @XmlElement(name = "RequiredStructure") protected XTTopologyTemplate requiredStructure; - @XmlElement(name = "Tags") - protected XTTags tags; - @Deprecated // required for XML deserialization - public XOTComplianceRule() { } + public XOTComplianceRule() { + } private XOTComplianceRule(Builder builder) { super(builder); this.name = builder.name; this.identifier = builder.identifier; this.requiredStructure = builder.requiredStructure; - this.tags = builder.tags; } - + @Override public String getName() { return name; @@ -90,7 +83,8 @@ public void setTargetNamespace(String value) { public XTTopologyTemplate getIdentifier() { if (identifier == null) { - identifier = new XTTopologyTemplate(); + identifier = new XTTopologyTemplate.Builder() + .build(); } return identifier; } @@ -110,25 +104,16 @@ public void setRequiredStructure(@Nullable XTTopologyTemplate requiredStructure) this.requiredStructure = requiredStructure; } - public XTTags getTags() { - return tags; - } - - public void setTags(XTTags tags) { - this.tags = tags; - } - @Override public void accept(Visitor visitor) { visitor.visit(this); } - public static class Builder extends XHasId.Builder { + public static class Builder extends XHasIdAndTags.Builder { private String name; private XTTopologyTemplate identifier; private XTTopologyTemplate requiredStructure; - private XTTags tags; public Builder(String id) { super(id); @@ -149,14 +134,6 @@ public Builder setRequiredStructure(XTTopologyTemplate requiredStructure) { return self(); } - public Builder addTags(List tags) { - if (this.tags == null) { - this.tags = new XTTags(); - } - this.tags.getTag().addAll(tags); - return self(); - } - public Builder self() { return this; } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTPrmMapping.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTPrmMapping.java index 655cb6aed7..38bda46c02 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTPrmMapping.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/extensions/XOTPrmMapping.java @@ -40,10 +40,11 @@ public abstract class XOTPrmMapping extends XHasId implements Serializable { @NonNull private XTEntityTemplate refinementElement; - @Deprecated // required for XML deserialization - public XOTPrmMapping() { } + // required for XML deserialization + public XOTPrmMapping() { + } - public XOTPrmMapping(Builder builder) { + public XOTPrmMapping(Builder builder) { super(builder); this.detectorElement = builder.detectorElement; this.refinementElement = builder.refinementElement; @@ -77,7 +78,7 @@ public static abstract class Builder> extends XHasId.Builde public Builder() { super(); } - + public Builder(String id) { super(id); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/utils/RemoveEmptyLists.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/utils/RemoveEmptyLists.java index 50bd8c2ff8..ef46091672 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/utils/RemoveEmptyLists.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/utils/RemoveEmptyLists.java @@ -13,13 +13,18 @@ *******************************************************************************/ package org.eclipse.winery.model.tosca.xml.utils; +import java.util.List; + +import org.eclipse.winery.model.tosca.xml.XTCapability; +import org.eclipse.winery.model.tosca.xml.XTDeploymentArtifact; import org.eclipse.winery.model.tosca.xml.XTEntityTemplate; import org.eclipse.winery.model.tosca.xml.XTNodeTemplate; -import org.eclipse.winery.model.tosca.xml.XTPolicies; +import org.eclipse.winery.model.tosca.xml.XTPolicy; +import org.eclipse.winery.model.tosca.xml.XTPropertyConstraint; import org.eclipse.winery.model.tosca.xml.XTRelationshipTemplate; -import org.eclipse.winery.model.tosca.xml.visitor.Visitor; -import org.eclipse.winery.model.tosca.xml.XTDeploymentArtifacts; +import org.eclipse.winery.model.tosca.xml.XTRequirement; import org.eclipse.winery.model.tosca.xml.XTTopologyTemplate; +import org.eclipse.winery.model.tosca.xml.visitor.Visitor; import io.github.adr.embedded.ADR; @@ -36,8 +41,8 @@ public class RemoveEmptyLists extends Visitor { @Override public void visit(XTEntityTemplate entityTemplate) { - final XTEntityTemplate.PropertyConstraints propertyConstraints = entityTemplate.getPropertyConstraints(); - if ((propertyConstraints != null) && propertyConstraints.getPropertyConstraint().isEmpty()) { + final List propertyConstraints = entityTemplate.getPropertyConstraints(); + if ((propertyConstraints != null) && propertyConstraints.isEmpty()) { entityTemplate.setPropertyConstraints(null); } XTEntityTemplate.Properties properties = entityTemplate.getProperties(); @@ -49,20 +54,20 @@ public void visit(XTEntityTemplate entityTemplate) { @Override public void visit(XTNodeTemplate nodeTemplate) { - final XTNodeTemplate.Requirements requirements = nodeTemplate.getRequirements(); - if ((requirements != null) && requirements.getRequirement().isEmpty()) { + final List requirements = nodeTemplate.getRequirements(); + if (requirements != null && requirements.isEmpty()) { nodeTemplate.setRequirements(null); } - final XTNodeTemplate.Capabilities capabilities = nodeTemplate.getCapabilities(); - if ((capabilities != null) && capabilities.getCapability().isEmpty()) { + final List capabilities = nodeTemplate.getCapabilities(); + if ((capabilities != null) && capabilities.isEmpty()) { nodeTemplate.setCapabilities(null); } - final XTDeploymentArtifacts deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); - if ((deploymentArtifacts != null) && deploymentArtifacts.getDeploymentArtifact().isEmpty()) { + final List deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); + if ((deploymentArtifacts != null) && deploymentArtifacts.isEmpty()) { nodeTemplate.setDeploymentArtifacts(null); } - final XTPolicies policies = nodeTemplate.getPolicies(); - if ((policies != null) && policies.getPolicy().isEmpty()) { + final List policies = nodeTemplate.getPolicies(); + if ((policies != null) && policies.isEmpty()) { nodeTemplate.setPolicies(null); } super.visit(nodeTemplate); diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/visitor/Visitor.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/visitor/Visitor.java index c75d615029..f927f5a5be 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/visitor/Visitor.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/main/java/org/eclipse/winery/model/tosca/xml/visitor/Visitor.java @@ -14,6 +14,7 @@ package org.eclipse.winery.model.tosca.xml.visitor; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -25,6 +26,7 @@ import org.eclipse.winery.model.tosca.xml.XTCapability; import org.eclipse.winery.model.tosca.xml.XTCapabilityRef; import org.eclipse.winery.model.tosca.xml.XTCondition; +import org.eclipse.winery.model.tosca.xml.XTDeploymentArtifact; import org.eclipse.winery.model.tosca.xml.XTDocumentation; import org.eclipse.winery.model.tosca.xml.XTEntityTemplate; import org.eclipse.winery.model.tosca.xml.XTEntityType; @@ -34,19 +36,14 @@ import org.eclipse.winery.model.tosca.xml.XTNodeTemplate; import org.eclipse.winery.model.tosca.xml.XTParameter; import org.eclipse.winery.model.tosca.xml.XTPlan; -import org.eclipse.winery.model.tosca.xml.XTPlans; -import org.eclipse.winery.model.tosca.xml.XTPolicies; import org.eclipse.winery.model.tosca.xml.XTPolicy; import org.eclipse.winery.model.tosca.xml.XTPropertyConstraint; import org.eclipse.winery.model.tosca.xml.XTPropertyMapping; import org.eclipse.winery.model.tosca.xml.XTRelationshipTemplate; +import org.eclipse.winery.model.tosca.xml.XTRequirement; import org.eclipse.winery.model.tosca.xml.XTRequirementRef; import org.eclipse.winery.model.tosca.xml.XTServiceTemplate; import org.eclipse.winery.model.tosca.xml.XTTag; -import org.eclipse.winery.model.tosca.xml.XTTags; -import org.eclipse.winery.model.tosca.xml.XTDeploymentArtifact; -import org.eclipse.winery.model.tosca.xml.XTDeploymentArtifacts; -import org.eclipse.winery.model.tosca.xml.XTRequirement; import org.eclipse.winery.model.tosca.xml.XTTopologyTemplate; import org.eclipse.winery.model.tosca.xml.extensions.XOTStringList; @@ -69,6 +66,7 @@ * * TODO: Implement it for all DefinitionsChildren (NodeType, NodeTypeImplementation, ...) */ +@SuppressWarnings("unused") public abstract class Visitor { public void visit(XTServiceTemplate serviceTemplate) { @@ -80,16 +78,16 @@ public void visit(XTServiceTemplate serviceTemplate) { topologyTemplate.accept(this); } - final XTTags tags = serviceTemplate.getTags(); + final List tags = serviceTemplate.getTags(); if (tags != null) { - for (XTTag tag : tags.getTag()) { + for (XTTag tag : tags) { tag.accept(this); } } - final XTPlans plans = serviceTemplate.getPlans(); + final List plans = serviceTemplate.getPlans(); if (plans != null) { - for (XTPlan plan : plans.getPlan()) { + for (XTPlan plan : plans) { plan.accept(this); } } @@ -108,13 +106,18 @@ public void visit(XTPlan plan) { if (precondition != null) { precondition.accept(this); } - final XTPlan.InputParameters inputParameters = plan.getInputParameters(); + final List inputParameters = plan.getInputParameters(); if (inputParameters != null) { - for (XTParameter parameter : inputParameters.getInputParameter()) { + for (XTParameter parameter : inputParameters) { + parameter.accept(this); + } + } + List outputParameters = plan.getOutputParameters(); + if (outputParameters != null) { + for (XTParameter parameter : outputParameters) { parameter.accept(this); } } - plan.getOutputParameters(); } public void visit(XTTopologyTemplate topologyTemplate) { @@ -127,7 +130,7 @@ public void visit(XTTopologyTemplate topologyTemplate) { for (XTRelationshipTemplate relationshipTemplate : topologyTemplate.getRelationshipTemplates()) { relationshipTemplate.accept(this); } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(XTExtensibleElements extensibleElement) { @@ -135,7 +138,7 @@ public void visit(XTExtensibleElements extensibleElement) { for (XTDocumentation documentation : extensibleElement.getDocumentation()) { documentation.accept(this); } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(XTEntityType entityType) { @@ -157,36 +160,36 @@ public void visit(XTEntityTemplate entityTemplate) { if (properties != null) { properties.accept(this); } - final XTEntityTemplate.PropertyConstraints propertyConstraints = entityTemplate.getPropertyConstraints(); + final List propertyConstraints = entityTemplate.getPropertyConstraints(); if (propertyConstraints != null) { - propertyConstraints.accept(this); + propertyConstraints.forEach(this::visit); } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(XTNodeTemplate nodeTemplate) { this.visit((XRelationshipSourceOrTarget) nodeTemplate); - final XTNodeTemplate.Requirements requirements = nodeTemplate.getRequirements(); + final List requirements = nodeTemplate.getRequirements(); if (requirements != null) { - requirements.accept(this); + requirements.forEach(requirement -> requirement.accept(this)); } - final XTNodeTemplate.Capabilities capabilities = nodeTemplate.getCapabilities(); + final List capabilities = nodeTemplate.getCapabilities(); if (capabilities != null) { - capabilities.accept(this); + capabilities.forEach(capability -> capability.accept(this)); } - final XTDeploymentArtifacts deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); + final List deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); if (deploymentArtifacts != null) { - for (XTDeploymentArtifact deploymentArtifact : deploymentArtifacts.getDeploymentArtifact()) { + for (XTDeploymentArtifact deploymentArtifact : deploymentArtifacts) { deploymentArtifact.accept(this); } } - final XTPolicies policies = nodeTemplate.getPolicies(); + final List policies = nodeTemplate.getPolicies(); if (policies != null) { - for (XTPolicy policy : policies.getPolicy()) { + for (XTPolicy policy : policies) { policy.accept(this); } } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(XTRelationshipTemplate relationshipTemplate) { @@ -197,48 +200,34 @@ public void visit(XTRelationshipTemplate relationshipTemplate) { relationshipConstraint.accept(this); } } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(XTEntityTemplate.Properties properties) { // this is a leaf because the xml model just has an "any" here } - public void visit(XTEntityTemplate.PropertyConstraints propertyConstraints) { - for (XTPropertyConstraint propertyConstraint : propertyConstraints.getPropertyConstraint()) { + public void visit(List propertyConstraints) { + for (XTPropertyConstraint propertyConstraint : propertyConstraints) { propertyConstraint.accept(this); } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(XTRelationshipTemplate.RelationshipConstraints.RelationshipConstraint relationshipConstraint) { // this is a leaf, so no action to take } - public void visit(XTNodeTemplate.Capabilities capabilities) { - for (XTCapability capability : capabilities.getCapability()) { - capability.accept(this); - } - // meta model does not offer more children - } - public void visit(XTNodeTemplate.Requirements requirements) { for (XTRequirement requirement : requirements.getRequirement()) { requirement.accept(this); } - // meta model does not offer more children + // metamodel does not offer more children } public void visit(XTRequirement requirement) { - final XTEntityTemplate.Properties properties = requirement.getProperties(); - if (properties != null) { - properties.accept(this); - } - final XTEntityTemplate.PropertyConstraints propertyConstraints = requirement.getPropertyConstraints(); - if (propertyConstraints != null) { - propertyConstraints.accept(this); - } - // meta model does not offer more children + this.visit((XTEntityTemplate) requirement); + // metamodel does not offer more children } public void accept(XTTag tag) { @@ -263,45 +252,45 @@ public void visit(@NonNull XTBoundaryDefinitions boundaryDefinitions) { } private void acceptBoundaryDefinitionsInterfaces(@NonNull XTBoundaryDefinitions boundaryDefinitions) { - final XTBoundaryDefinitions.Interfaces interfaces = boundaryDefinitions.getInterfaces(); + final List interfaces = boundaryDefinitions.getInterfaces(); if (interfaces != null) { - for (XTExportedInterface exportedInterface : interfaces.getInterface()) { + for (XTExportedInterface exportedInterface : interfaces) { exportedInterface.accept(this); } } } private void acceptBoundaryDefinitionsCapabilities(@NonNull XTBoundaryDefinitions boundaryDefinitions) { - final XTBoundaryDefinitions.Capabilities capabilities = boundaryDefinitions.getCapabilities(); + final List capabilities = boundaryDefinitions.getCapabilities(); if (capabilities != null) { - for (XTCapabilityRef capabilityRef : capabilities.getCapability()) { + for (XTCapabilityRef capabilityRef : capabilities) { capabilityRef.accept(this); } } } private void acceptBoundaryDefinitionsRequirements(@NonNull XTBoundaryDefinitions boundaryDefinitions) { - final XTBoundaryDefinitions.Requirements requirements = boundaryDefinitions.getRequirements(); + final List requirements = boundaryDefinitions.getRequirements(); if (requirements != null) { - for (XTRequirementRef requirementRef : requirements.getRequirement()) { + for (XTRequirementRef requirementRef : requirements) { requirementRef.accept(this); } } } private void acceptBoundaryDefinitionsPolicies(@NonNull XTBoundaryDefinitions boundaryDefinitions) { - final XTPolicies policies = boundaryDefinitions.getPolicies(); + final List policies = boundaryDefinitions.getPolicies(); if (policies != null) { - for (XTPolicy policy : policies.getPolicy()) { + for (XTPolicy policy : policies) { policy.accept(this); } } } private void acceptBoundaryDefinitionsPropertyConstraints(@NonNull XTBoundaryDefinitions boundaryDefinitions) { - final XTBoundaryDefinitions.PropertyConstraints propertyConstraints = boundaryDefinitions.getPropertyConstraints(); + final List propertyConstraints = boundaryDefinitions.getPropertyConstraints(); if (propertyConstraints != null) { - for (XTPropertyConstraint propertyConstraint : propertyConstraints.getPropertyConstraint()) { + for (XTPropertyConstraint propertyConstraint : propertyConstraints) { propertyConstraint.accept(this); } } @@ -315,9 +304,9 @@ private void acceptBoundaryDefinitionsProperties(@NonNull XTBoundaryDefinitions } public void visit(XTBoundaryDefinitions.Properties properties) { - final XTBoundaryDefinitions.Properties.PropertyMappings propertyMappings = properties.getPropertyMappings(); + final List propertyMappings = properties.getPropertyMappings(); if (propertyMappings != null) { - for (XTPropertyMapping propertyMapping : propertyMappings.getPropertyMapping()) { + for (XTPropertyMapping propertyMapping : propertyMappings) { propertyMapping.accept(this); } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/test/java/org/eclipse/winery/model/tosca/xml/utils/RemoveEmptyListsTest.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/test/java/org/eclipse/winery/model/tosca/xml/utils/RemoveEmptyListsTest.java index ddbe65bcd7..931de94768 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/test/java/org/eclipse/winery/model/tosca/xml/utils/RemoveEmptyListsTest.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.xml/src/test/java/org/eclipse/winery/model/tosca/xml/utils/RemoveEmptyListsTest.java @@ -14,9 +14,12 @@ package org.eclipse.winery.model.tosca.xml.utils; +import java.util.ArrayList; + +import javax.xml.namespace.QName; + import org.eclipse.winery.model.tosca.xml.XTEntityTemplate; import org.eclipse.winery.model.tosca.xml.XTNodeTemplate; -import org.eclipse.winery.model.tosca.xml.XTPolicies; import org.eclipse.winery.model.tosca.xml.XTTopologyTemplate; import org.junit.jupiter.api.Test; @@ -28,21 +31,24 @@ public class RemoveEmptyListsTest { @Test public void emptyPropertiesAndPoliciesListsRemovedFromNodeTemplate() { - XTTopologyTemplate topologyTemplate = new XTTopologyTemplate(); - XTNodeTemplate nodeTemplate = new XTNodeTemplate(); + XTTopologyTemplate topologyTemplate = new XTTopologyTemplate.Builder().build(); + XTNodeTemplate nodeTemplate = new XTNodeTemplate.Builder( + "test", + QName.valueOf("{ns}test") + ).build(); topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(nodeTemplate); nodeTemplate.setProperties(new XTEntityTemplate.Properties()); - nodeTemplate.setPolicies(new XTPolicies()); + nodeTemplate.setPolicies(new ArrayList<>()); assertNotNull(((XTNodeTemplate) topologyTemplate.getNodeTemplateOrRelationshipTemplate().get(0)).getPolicies()); - assertNotNull(((XTNodeTemplate) topologyTemplate.getNodeTemplateOrRelationshipTemplate().get(0)).getProperties()); + assertNotNull(topologyTemplate.getNodeTemplateOrRelationshipTemplate().get(0).getProperties()); // preconditions fulfilled RemoveEmptyLists removeEmptyLists = new RemoveEmptyLists(); removeEmptyLists.removeEmptyLists(topologyTemplate); - + assertNull(((XTNodeTemplate) topologyTemplate.getNodeTemplateOrRelationshipTemplate().get(0)).getPolicies()); - assertNull(((XTNodeTemplate) topologyTemplate.getNodeTemplateOrRelationshipTemplate().get(0)).getProperties()); + assertNull(topologyTemplate.getNodeTemplateOrRelationshipTemplate().get(0).getProperties()); } } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTCapabilityDefinition.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTCapabilityDefinition.java index d22e0eda68..d7dc2eb9dd 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTCapabilityDefinition.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTCapabilityDefinition.java @@ -33,6 +33,7 @@ import org.eclipse.jdt.annotation.Nullable; public class YTCapabilityDefinition implements VisitorNode { + private String description; private List occurrences; private List validSourceTypes; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTNodeType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTNodeType.java index 3454f4e3ec..f41e0c4afb 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTNodeType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTNodeType.java @@ -28,6 +28,7 @@ import org.eclipse.jdt.annotation.NonNull; public class YTNodeType extends YTNodeOrGroupType { + private Map attributes; private List requirements; private Map capabilities; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTPolicyType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTPolicyType.java index ae002e81c9..e4fc4aa718 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTPolicyType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTPolicyType.java @@ -91,11 +91,11 @@ public , P extends AbstractParameter

> R accept(IV } public static class Builder extends YTEntityType.Builder { + private List targets; private Object triggers; public Builder() { - } public Builder(YTEntityType entityType) { diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRelationshipType.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRelationshipType.java index 03727ff430..9986a30bc3 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRelationshipType.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRelationshipType.java @@ -29,6 +29,7 @@ import org.eclipse.jdt.annotation.NonNull; public class YTRelationshipType extends YTEntityType { + private List validTargetTypes; private Map interfaces; diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRequirementAssignment.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRequirementAssignment.java index ede6fa946f..87b3b7366d 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRequirementAssignment.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRequirementAssignment.java @@ -49,7 +49,7 @@ public boolean equals(Object o) { YTRequirementAssignment that = (YTRequirementAssignment) o; return Objects.equals(getNode(), that.getNode()) && Objects.equals(getRelationship(), that.getRelationship()) && - Objects.equals(getCapability(), that.getCapability()) && + Objects.equals(getCapability(), that) && Objects.equals(getNodeFilter(), that.getNodeFilter()) && Objects.equals(getOccurrences(), that.getOccurrences()); } diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRequirementDefinition.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRequirementDefinition.java index 1564645be0..8daf35a50d 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRequirementDefinition.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.yaml/src/main/java/org/eclipse/winery/model/tosca/yaml/YTRequirementDefinition.java @@ -53,7 +53,7 @@ public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof YTRequirementDefinition)) return false; YTRequirementDefinition that = (YTRequirementDefinition) o; - return Objects.equals(getCapability(), that.getCapability()) && + return Objects.equals(getCapability(), that) && Objects.equals(getNode(), that.getNode()) && Objects.equals(getRelationship(), that.getRelationship()) && Objects.equals(getOccurrences(), that.getOccurrences()) && diff --git a/org.eclipse.winery.repository.client/src/test/java/org/eclipse/winery/repository/client/TestWineryRepositoryClient.java b/org.eclipse.winery.repository.client/src/test/java/org/eclipse/winery/repository/client/TestWineryRepositoryClient.java index 68c0615218..25aebd28c0 100644 --- a/org.eclipse.winery.repository.client/src/test/java/org/eclipse/winery/repository/client/TestWineryRepositoryClient.java +++ b/org.eclipse.winery.repository.client/src/test/java/org/eclipse/winery/repository/client/TestWineryRepositoryClient.java @@ -19,8 +19,8 @@ import javax.xml.namespace.QName; -import org.eclipse.winery.model.tosca.HasName; import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; +import org.eclipse.winery.model.tosca.HasName; import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TExtensibleElements; @@ -31,9 +31,6 @@ import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.utils.ModelUtilities; import org.eclipse.winery.repository.TestWithGitBackedRepository; -import org.eclipse.winery.repository.backend.IRepository; -import org.eclipse.winery.repository.backend.RepositoryFactory; -import org.eclipse.winery.repository.backend.filebased.AbstractFileBasedRepository; import org.eclipse.winery.repository.rest.server.WineryUsingHttpServer; import org.eclipse.jetty.server.Server; @@ -55,6 +52,7 @@ * Client creation and multiple repositories are not tested. This should be subject to other test classes. */ public class TestWineryRepositoryClient extends TestWithGitBackedRepository { + private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(TestWineryRepositoryClient.class); private static final String repositoryURI = "http://localhost:8080/winery"; @@ -81,13 +79,6 @@ public class TestWineryRepositoryClient extends TestWithGitBackedRepository { public static void startWineryServer() throws Exception { server = WineryUsingHttpServer.createHttpServer(); server.start(); - - IRepository repository = RepositoryFactory.getRepository(); - if (repository instanceof AbstractFileBasedRepository) { - LOGGER.debug("Using path " + repository.getRepositoryRoot()); - } else { - LOGGER.debug("Repository is not filebased"); - } } @AfterAll diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/RestUtils.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/RestUtils.java index c6a654155f..b9983a36ac 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/RestUtils.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/RestUtils.java @@ -49,16 +49,14 @@ import javax.xml.namespace.QName; import org.eclipse.winery.common.Constants; +import org.eclipse.winery.common.configuration.Environments; +import org.eclipse.winery.common.configuration.UiConfigurationObject; +import org.eclipse.winery.common.constants.MimeTypes; import org.eclipse.winery.common.version.VersionUtils; +import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.edmm.EdmmManager; import org.eclipse.winery.edmm.model.EdmmConverter; import org.eclipse.winery.edmm.model.EdmmType; -import org.eclipse.winery.repository.backend.WineryVersionUtils; -import org.eclipse.winery.repository.common.RepositoryFileReference; -import org.eclipse.winery.repository.common.Util; -import org.eclipse.winery.common.configuration.Environments; -import org.eclipse.winery.common.configuration.UiConfigurationObject; -import org.eclipse.winery.common.constants.MimeTypes; import org.eclipse.winery.model.ids.GenericId; import org.eclipse.winery.model.ids.Namespace; import org.eclipse.winery.model.ids.XmlId; @@ -71,12 +69,11 @@ import org.eclipse.winery.model.ids.definitions.RelationshipTypeImplementationId; import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; import org.eclipse.winery.model.ids.elements.ToscaElementId; -import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.model.selfservice.Application; -import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.HasType; import org.eclipse.winery.model.tosca.TArtifactTemplate; import org.eclipse.winery.model.tosca.TConstraint; +import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TNodeTemplate; @@ -91,16 +88,18 @@ import org.eclipse.winery.repository.backend.IRepository; import org.eclipse.winery.repository.backend.NamespaceManager; import org.eclipse.winery.repository.backend.RepositoryFactory; +import org.eclipse.winery.repository.backend.WineryVersionUtils; import org.eclipse.winery.repository.backend.constants.MediaTypes; import org.eclipse.winery.repository.backend.filebased.GitBasedRepository; import org.eclipse.winery.repository.backend.selfcontainmentpackager.SelfContainmentPackager; import org.eclipse.winery.repository.backend.xsd.NamespaceAndDefinedLocalNames; +import org.eclipse.winery.repository.common.RepositoryFileReference; +import org.eclipse.winery.repository.common.Util; import org.eclipse.winery.repository.export.CsarExportConfiguration; import org.eclipse.winery.repository.export.CsarExportOptions; import org.eclipse.winery.repository.export.CsarExporter; import org.eclipse.winery.repository.export.ToscaExportUtil; import org.eclipse.winery.repository.rest.datatypes.ComponentId; -import org.eclipse.winery.repository.yaml.export.YamlExporter; import org.eclipse.winery.repository.rest.datatypes.LocalNameForAngular; import org.eclipse.winery.repository.rest.datatypes.NamespaceAndDefinedLocalNamesForAngular; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; @@ -114,6 +113,7 @@ import org.eclipse.winery.repository.rest.resources.entitytemplates.artifacttemplates.ArtifactTemplateResource; import org.eclipse.winery.repository.rest.resources.entitytemplates.artifacttemplates.ArtifactTemplatesResource; import org.eclipse.winery.repository.rest.resources.servicetemplates.ServiceTemplateResource; +import org.eclipse.winery.repository.yaml.export.YamlExporter; import io.github.edmm.core.parser.EntityGraph; import org.eclipse.jgit.api.errors.GitAPIException; @@ -452,9 +452,9 @@ public static String getIntermediateLocationStringForType(String type, String se *

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

- * If the passed ref is newer than the modified date (or the modified date is null), an OK response with an - * input stream pointing to the path is returned + * If the passed ref is newer than the modified date (or the modified date is null), an OK response with an input + * stream pointing to the path is returned */ private static Response.ResponseBuilder returnRefAsResponseBuilder(RepositoryFileReference ref, String modified) { if (!RepositoryFactory.getRepository().exists(ref)) { diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/_support/AbstractComponentInstanceResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/_support/AbstractComponentInstanceResource.java index 9f31b762c3..63684ccda0 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/_support/AbstractComponentInstanceResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/_support/AbstractComponentInstanceResource.java @@ -20,7 +20,9 @@ import java.net.URI; import java.time.Duration; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -45,32 +47,31 @@ import javax.xml.parsers.DocumentBuilder; import org.eclipse.winery.common.Constants; -import org.eclipse.winery.repository.backend.WineryVersionUtils; -import org.eclipse.winery.repository.common.RepositoryFileReference; import org.eclipse.winery.common.ToscaDocumentBuilderFactory; import org.eclipse.winery.common.configuration.Environments; import org.eclipse.winery.common.constants.MimeTypes; +import org.eclipse.winery.common.version.VersionUtils; +import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.model.ids.EncodingUtil; import org.eclipse.winery.model.ids.Namespace; import org.eclipse.winery.model.ids.XmlId; import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; -import org.eclipse.winery.model.version.ToscaDiff; -import org.eclipse.winery.common.version.VersionUtils; -import org.eclipse.winery.common.version.WineryVersion; -import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.HasIdInIdOrNameField; -import org.eclipse.winery.model.tosca.extensions.OTComplianceRule; +import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TEntityType; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; import org.eclipse.winery.model.tosca.TRelationshipTypeImplementation; import org.eclipse.winery.model.tosca.TServiceTemplate; -import org.eclipse.winery.model.tosca.TTags; +import org.eclipse.winery.model.tosca.TTag; +import org.eclipse.winery.model.tosca.extensions.OTComplianceRule; +import org.eclipse.winery.model.version.ToscaDiff; import org.eclipse.winery.repository.JAXBSupport; import org.eclipse.winery.repository.backend.BackendUtils; import org.eclipse.winery.repository.backend.IRepository; import org.eclipse.winery.repository.backend.RepositoryFactory; -import org.eclipse.winery.repository.backend.constants.MediaTypes; +import org.eclipse.winery.repository.backend.WineryVersionUtils; +import org.eclipse.winery.repository.common.RepositoryFileReference; import org.eclipse.winery.repository.export.CsarExportOptions; import org.eclipse.winery.repository.filebased.RepositoryUtils; import org.eclipse.winery.repository.rest.RestUtils; @@ -145,7 +146,7 @@ public AbstractComponentInstanceResource(DefinitionsChildId id) { LOGGER.debug("data file exists"); this.load(); } else { - LOGGER.debug("Data file {} does not exist. Creating a new one.", this.ref.toString()); + LOGGER.debug("Data file {} does not exist. Creating a new one.", this.ref); this.createNew(); } } @@ -353,7 +354,7 @@ public Response getElementAsYaml() { @GET @Produces(MediaType.APPLICATION_JSON) - public Object getElementAsJson(@QueryParam("versions") @ApiParam("If set, a list of availbale versions is returned.") String versions, + public Object getElementAsJson(@QueryParam("versions") @ApiParam("If set, a list of available versions is returned.") String versions, @QueryParam("subComponents") String subComponents, @QueryParam("compareTo") String compareTo, @QueryParam("asChangeLog") String asChangeLog) { if (!requestRepository.exists(this.id)) { @@ -400,10 +401,10 @@ private void load() { try { this.element = this.definitions.getElement(); } catch (IndexOutOfBoundsException e) { - // everything allright: + // everything alright: // ImportResource is a quick hack using 99% of the functionality offered here // As only 1% has to be "quick hacked", we do that instead of a clean design - // Clean design: Introduce a class between this and AbstractComponentInstanceResource, where this class and ImportResource inhertis from + // Clean design: Introduce a class between this and AbstractComponentInstanceResource, where this class and ImportResource inherits from // A clean design introducing a super class AbstractDefinitionsBackedResource does not work, as we currently also support PropertiesBackedResources and such a super class would required multi-inheritance if (!(this instanceof GenericImportResource)) { throw new IllegalStateException("Wrong storage format: No ServiceTemplateOrNodeTypeOrNodeTypeImplementation found."); @@ -528,7 +529,7 @@ public Response updateDefinitions(InputStream requestBodyStream) { BackendUtils.copyIdToFields((HasIdInIdOrNameField) element, this.getId()); try { - BackendUtils.persist(this.getDefinitions(), this.getRepositoryFileReference(), MediaTypes.MEDIATYPE_TOSCA_DEFINITIONS, requestRepository); + requestRepository.putDefinition(this.getId(), this.getDefinitions()); } catch (IOException e) { throw new WebApplicationException(e); } @@ -537,7 +538,7 @@ public Response updateDefinitions(InputStream requestBodyStream) { if (validationError.isEmpty()) { return Response.noContent().build(); } else { - // ADR-0005: well-formed XML, but non-schema-conforming XML is saved, but triggers warning at the iser + // ADR-0005: well-formed XML, but non-schema-conforming XML is saved, but triggers warning to the user return Response.ok().entity(validationError).build(); } } @@ -556,42 +557,42 @@ public DocumentationResource getDocumentationsResource() { @Path("tags/") public final TagsResource getTags() { - TTags tags; + List tags; if (this.element instanceof TServiceTemplate) { tags = ((TServiceTemplate) this.element).getTags(); if (tags == null) { - tags = new TTags(); + tags = new ArrayList<>(); ((ServiceTemplateResource) this).getServiceTemplate().setTags(tags); } } else if (this.element instanceof TEntityType) { tags = ((TEntityType) this.element).getTags(); if (tags == null) { - tags = new TTags(); + tags = new ArrayList<>(); ((EntityTypeResource) this).getEntityType().setTags(tags); } } else if (this.element instanceof TNodeTypeImplementation) { tags = ((TNodeTypeImplementation) this.element).getTags(); if (tags == null) { - tags = new TTags(); + tags = new ArrayList<>(); ((NodeTypeImplementationResource) this).getNTI().setTags(tags); } } else if (this.element instanceof TRelationshipTypeImplementation) { tags = ((TRelationshipTypeImplementation) this.element).getTags(); if (tags == null) { - tags = new TTags(); + tags = new ArrayList<>(); ((RelationshipTypeImplementationResource) this).getRTI().setTags(tags); } } else if (this.element instanceof OTComplianceRule) { tags = ((OTComplianceRule) this.element).getTags(); if (tags == null) { - tags = new TTags(); + tags = new ArrayList<>(); ((ComplianceRuleResource) this).getComplianceRule().setTags(tags); } } else { throw new IllegalStateException("tags was called on a resource not supporting tags"); } - return new TagsResource(this, tags.getTag()); + return new TagsResource(this, tags); } @GET diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/apiData/InterfacesSelectApiData.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/apiData/InterfacesSelectApiData.java index 14fe84f99c..57930916fb 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/apiData/InterfacesSelectApiData.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/apiData/InterfacesSelectApiData.java @@ -19,6 +19,7 @@ import org.eclipse.winery.repository.rest.datatypes.select2.Select2DataItem; public class InterfacesSelectApiData extends Select2DataItem { + public List operations; public InterfacesSelectApiData(String text, List operations) { diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/apiData/boundarydefinitions/PropertyMappingsApi.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/apiData/boundarydefinitions/PropertyMappingsApi.java index 35c67e1546..75c47c38e8 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/apiData/boundarydefinitions/PropertyMappingsApi.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/apiData/boundarydefinitions/PropertyMappingsApi.java @@ -14,17 +14,22 @@ package org.eclipse.winery.repository.rest.resources.apiData.boundarydefinitions; -import org.eclipse.winery.model.tosca.TBoundaryDefinitions; +import java.util.List; + +import org.eclipse.winery.model.tosca.TPropertyMapping; import org.eclipse.winery.model.tosca.TServiceTemplate; public class PropertyMappingsApi { - public TBoundaryDefinitions.Properties.PropertyMappings propertyMappings; + public List propertyMappings; + @SuppressWarnings("unused") // required for deserialization public PropertyMappingsApi() { } public PropertyMappingsApi(TServiceTemplate ste) { - this.propertyMappings = ste.getBoundaryDefinitions().getProperties().getPropertyMappings(); + if (ste.getBoundaryDefinitions() != null && ste.getBoundaryDefinitions().getProperties() != null) { + this.propertyMappings = ste.getBoundaryDefinitions().getProperties().getPropertyMappings(); + } } } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/DeploymentArtifactsResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/DeploymentArtifactsResource.java index 9c7f91176f..21727466b8 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/DeploymentArtifactsResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/DeploymentArtifactsResource.java @@ -23,7 +23,6 @@ import javax.ws.rs.PathParam; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.repository.rest.resources._support.INodeTemplateResourceOrNodeTypeImplementationResource; @@ -31,7 +30,7 @@ public class DeploymentArtifactsResource extends GenericArtifactsResource { - private List deploymentArtifacts; + private final List deploymentArtifacts; public DeploymentArtifactsResource(TNodeTemplate nodeTemplate, INodeTemplateResourceOrNodeTypeImplementationResource res) { this(DeploymentArtifactsResource.getDeploymentArtifacts(nodeTemplate), res); @@ -48,13 +47,13 @@ public DeploymentArtifactsResource(List deploymentArtifact, * If no DAs are existing, an empty list is created in the model for the node template */ private static List getDeploymentArtifacts(TNodeTemplate nodeTemplate) { - TDeploymentArtifacts deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); + List deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); final List res; if (deploymentArtifacts == null) { - deploymentArtifacts = new TDeploymentArtifacts(); + deploymentArtifacts = new ArrayList<>(); nodeTemplate.setDeploymentArtifacts(deploymentArtifacts); } - res = deploymentArtifacts.getDeploymentArtifact(); + res = deploymentArtifacts; return res; } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/GenericArtifactsResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/GenericArtifactsResource.java index acd41050d6..df99066714 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/GenericArtifactsResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/GenericArtifactsResource.java @@ -22,10 +22,10 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Optional; -import java.util.SortedSet; import javax.ws.rs.Consumes; import javax.ws.rs.POST; @@ -40,8 +40,8 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import org.eclipse.winery.model.tosca.TEntityTemplate; -import org.eclipse.winery.repository.common.Util; +import org.eclipse.winery.common.version.VersionUtils; +import org.eclipse.winery.generators.ia.Generator; import org.eclipse.winery.model.ids.EncodingUtil; import org.eclipse.winery.model.ids.Namespace; import org.eclipse.winery.model.ids.XmlId; @@ -51,12 +51,11 @@ import org.eclipse.winery.model.ids.definitions.EntityTypeId; import org.eclipse.winery.model.ids.definitions.NodeTypeId; import org.eclipse.winery.model.ids.definitions.RelationshipTypeId; -import org.eclipse.winery.common.version.VersionUtils; -import org.eclipse.winery.generators.ia.Generator; import org.eclipse.winery.model.tosca.TArtifactTemplate; import org.eclipse.winery.model.tosca.TArtifactType; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TImplementationArtifacts.ImplementationArtifact; +import org.eclipse.winery.model.tosca.TEntityTemplate; +import org.eclipse.winery.model.tosca.TImplementationArtifact; import org.eclipse.winery.model.tosca.TInterface; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TRelationshipType; @@ -65,6 +64,7 @@ import org.eclipse.winery.repository.backend.IRepository; import org.eclipse.winery.repository.backend.RepositoryFactory; import org.eclipse.winery.repository.backend.filebased.FileUtils; +import org.eclipse.winery.repository.common.Util; import org.eclipse.winery.repository.datatypes.ids.elements.ArtifactTemplateSourceDirectoryId; import org.eclipse.winery.repository.datatypes.ids.elements.DirectoryId; import org.eclipse.winery.repository.rest.RestUtils; @@ -72,7 +72,6 @@ import org.eclipse.winery.repository.rest.resources._support.INodeTemplateResourceOrNodeTypeImplementationResourceOrRelationshipTypeImplementationResource; import org.eclipse.winery.repository.rest.resources._support.collections.withid.EntityWithIdCollectionResource; import org.eclipse.winery.repository.rest.resources.apiData.GenerateArtifactApiData; -import org.eclipse.winery.repository.rest.resources.entitytemplates.artifacttemplates.ArtifactTemplateResource; import org.eclipse.winery.repository.rest.resources.entitytypeimplementations.nodetypeimplementations.NodeTypeImplementationResource; import org.eclipse.winery.repository.rest.resources.entitytypeimplementations.nodetypeimplementations.NodeTypeImplementationsResource; import org.eclipse.winery.repository.rest.resources.entitytypeimplementations.relationshiptypeimplementations.RelationshipTypeImplementationResource; @@ -165,7 +164,6 @@ public Response generateArtifact(GenerateArtifactApiData apiData, @Context UriIn ArtifactTypeId artifactTypeId; ArtifactTemplateId artifactTemplateId = null; - ArtifactTemplateResource artifactTemplateResource = null; boolean doAutoCreateArtifactTemplate = !(StringUtils.isEmpty(apiData.autoCreateArtifactTemplate) || apiData.autoCreateArtifactTemplate.equalsIgnoreCase("no") || apiData.autoCreateArtifactTemplate.equalsIgnoreCase("false")); if (!doAutoCreateArtifactTemplate) { @@ -241,43 +239,35 @@ public Response generateArtifact(GenerateArtifactApiData apiData, @Context UriIn ArtifactT resultingArtifact; if (this instanceof ImplementationArtifactsResource) { - ImplementationArtifact a = new ImplementationArtifact(); - // Winery internal id is the name of the artifact: - // store the name - a.setName(apiData.artifactName); - a.setInterfaceName(apiData.interfaceName); - a.setOperationName(apiData.operationName); - assert (artifactTypeId != null); - a.setArtifactType(artifactTypeId.getQName()); + TImplementationArtifact.Builder builder = new TImplementationArtifact.Builder(artifactTypeId.getQName()) + .setName(apiData.artifactName) + .setInterfaceName(apiData.interfaceName) + .setOperationName(apiData.operationName); if (artifactTemplateId != null) { - a.setArtifactRef(artifactTemplateId.getQName()); + builder.setArtifactRef(artifactTemplateId.getQName()); } if (doc != null) { // the content has been checked for validity at the beginning of the method. // If this point in the code is reached, the XML has been parsed into doc // just copy over the dom node. Hopefully, that works... - a.getAny().add(doc.getDocumentElement()); + builder.setAny(Collections.singletonList(doc.getDocumentElement())); } - this.list.add((ArtifactT) a); - resultingArtifact = (ArtifactT) a; + resultingArtifact = (ArtifactT) builder.build(); } else { // for comments see other branch - TDeploymentArtifact a = new TDeploymentArtifact(); - a.setName(apiData.artifactName); - assert (artifactTypeId != null); - a.setArtifactType(artifactTypeId.getQName()); + TDeploymentArtifact.Builder builder = new TDeploymentArtifact.Builder(apiData.artifactName, artifactTypeId.getQName()); if (artifactTemplateId != null) { - a.setArtifactRef(artifactTemplateId.getQName()); + builder.setArtifactRef(artifactTemplateId.getQName()); } if (doc != null) { - a.getAny().add(doc.getDocumentElement()); + builder.setAny(Collections.singletonList(doc.getDocumentElement())); } - this.list.add((ArtifactT) a); - resultingArtifact = (ArtifactT) a; + resultingArtifact = (ArtifactT) builder.build(); } + this.list.add(resultingArtifact); // TODO: Check for error, and in case one found return it RestUtils.persist(super.res); @@ -388,19 +378,19 @@ private Optional findInterface(EntityTypeId id, String interfaceName || this.res instanceof NodeTypeImplementationsResource) { TNodeType nodeType = repository.getElement((NodeTypeId) id); if (nodeType.getInterfaces() != null) { - interfaces.addAll(nodeType.getInterfaces().getInterface()); + interfaces.addAll(nodeType.getInterfaces()); } } else if (this.res instanceof RelationshipTypeImplementationResource || this.res instanceof RelationshipTypeImplementationsResource) { TRelationshipType relationshipType = repository.getElement((RelationshipTypeId) id); if (relationshipType.getSourceInterfaces() != null) { - interfaces.addAll(relationshipType.getSourceInterfaces().getInterface()); + interfaces.addAll(relationshipType.getSourceInterfaces()); } if (relationshipType.getTargetInterfaces() != null) { - interfaces.addAll(relationshipType.getTargetInterfaces().getInterface()); + interfaces.addAll(relationshipType.getTargetInterfaces()); } if (relationshipType.getInterfaces() != null) { - interfaces.addAll(relationshipType.getInterfaces().getInterface()); + interfaces.addAll(relationshipType.getInterfaces()); } } Iterator it = interfaces.iterator(); @@ -458,20 +448,6 @@ private void storeProperties(ArtifactTemplateId artifactTemplateId, DefinitionsC } } - /** - * Required for artifacts.jsp - * - * @return list of known artifact types. - */ - public List getAllArtifactTypes() { - SortedSet allArtifactTypes = RepositoryFactory.getRepository().getAllDefinitionsChildIds(ArtifactTypeId.class); - List res = new ArrayList<>(allArtifactTypes.size()); - for (ArtifactTypeId id : allArtifactTypes) { - res.add(id.getQName()); - } - return res; - } - /** * Required for artifacts.jsp * @@ -479,13 +455,6 @@ public List getAllArtifactTypes() { */ public abstract Collection getAllArtifactResources(); - /** - * Required by artifact.jsp to decide whether to display "Deployment Artifact" or "Implementation Artifact" - */ - public boolean getIsDeploymentArtifacts() { - return (this instanceof DeploymentArtifactsResource); - } - /** * required by artifacts.jsp */ diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactResource.java index eceb5f015c..90f2e44c8f 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactResource.java @@ -15,7 +15,8 @@ import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; import org.eclipse.winery.model.ids.definitions.ArtifactTypeId; -import org.eclipse.winery.model.tosca.TImplementationArtifacts.ImplementationArtifact; +import org.eclipse.winery.model.tosca.TDeploymentOrImplementationArtifact; +import org.eclipse.winery.model.tosca.TImplementationArtifact; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.IPersistable; import org.eclipse.winery.repository.rest.resources._support.collections.IIdDetermination; @@ -23,28 +24,22 @@ import java.util.List; import java.util.Objects; -public class ImplementationArtifactResource extends GenericArtifactResource { +public class ImplementationArtifactResource extends GenericArtifactResource { - private ImplementationArtifact a; + private TImplementationArtifact a; - public ImplementationArtifactResource(String artifactId, List implementationArtifacts, IPersistable res) { - this(ImplementationArtifactResource.getImplementationArtifact(artifactId, implementationArtifacts), implementationArtifacts, res); + public ImplementationArtifactResource(String artifactId, List implementationArtifacts, IPersistable res) { + this(ImplementationArtifactResource.getTImplementationArtifact(artifactId, implementationArtifacts), implementationArtifacts, res); } - public ImplementationArtifactResource(IIdDetermination idDetermination, ImplementationArtifact o, int idx, List list, IPersistable res) { + public ImplementationArtifactResource(IIdDetermination idDetermination, TImplementationArtifact o, int idx, List list, IPersistable res) { super(idDetermination, o, idx, list, res); this.a = o; } - public ImplementationArtifactResource(ImplementationArtifact a, List implementationArtifacts, IPersistable res) { - this(new IIdDetermination() { - - @Override - public String getId(ImplementationArtifact e) { - return e.getName(); - } - }, a, implementationArtifacts.indexOf(a), implementationArtifacts, res); + public ImplementationArtifactResource(TImplementationArtifact a, List implementationArtifacts, IPersistable res) { + this(TDeploymentOrImplementationArtifact::getName, a, implementationArtifacts.indexOf(a), implementationArtifacts, res); } /** @@ -53,10 +48,10 @@ public String getId(ImplementationArtifact e) { * SIDE EFFECT Adds it to the implementationArtifacts list if it * does not yet exist. */ - private static ImplementationArtifact getImplementationArtifact(String artifactId, List implementationArtifacts) { + private static TImplementationArtifact getTImplementationArtifact(String artifactId, List implementationArtifacts) { Objects.requireNonNull(artifactId); Objects.requireNonNull(implementationArtifacts); - for (ImplementationArtifact ia : implementationArtifacts) { + for (TImplementationArtifact ia : implementationArtifacts) { // ia.getName() might be null as TOSCA COS01 does not forsee a name on the implementation artifact // Therefore, we begin the test with "artifactId" if (artifactId.equals(ia.getName())) { @@ -64,13 +59,13 @@ private static ImplementationArtifact getImplementationArtifact(String artifactI } } // IA does not exist in list - ImplementationArtifact ia = new ImplementationArtifact(); + TImplementationArtifact ia = new TImplementationArtifact(); ia.setName(artifactId); implementationArtifacts.add(ia); return ia; } - public ImplementationArtifact getImplementationArtifact() { + public TImplementationArtifact getImplementationArtifact() { return this.a; } @@ -87,7 +82,7 @@ public void setArtifactTemplate(ArtifactTemplateId artifactTemplateId) { } @Override - public ImplementationArtifact getA() { + public TImplementationArtifact getA() { return this.a; } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactsResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactsResource.java index bdbfd1bbe9..bf62aec214 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactsResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/artifacts/ImplementationArtifactsResource.java @@ -24,7 +24,7 @@ import javax.ws.rs.core.MediaType; import javax.xml.namespace.QName; -import org.eclipse.winery.model.tosca.TImplementationArtifacts.ImplementationArtifact; +import org.eclipse.winery.model.tosca.TImplementationArtifact; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.INodeTypeImplementationResourceOrRelationshipTypeImplementationResource; import org.eclipse.winery.repository.rest.resources.entitytypeimplementations.nodetypeimplementations.NodeTypeImplementationResource; @@ -37,19 +37,19 @@ * ImplementationArtifact instead of TImplementationArtifact has to be used because of difference in the XSD at * tImplementationArtifacts vs. tDeploymentArtifacts */ -public class ImplementationArtifactsResource extends GenericArtifactsResource { +public class ImplementationArtifactsResource extends GenericArtifactsResource { - private List implementationArtifacts; + private List implementationArtifacts; - public ImplementationArtifactsResource(List implementationArtifact, INodeTypeImplementationResourceOrRelationshipTypeImplementationResource res) { - super(ImplementationArtifactResource.class, ImplementationArtifact.class, implementationArtifact, res); + public ImplementationArtifactsResource(List implementationArtifact, INodeTypeImplementationResourceOrRelationshipTypeImplementationResource res) { + super(ImplementationArtifactResource.class, TImplementationArtifact.class, implementationArtifact, res); this.implementationArtifacts = implementationArtifact; } @Override public Collection getAllArtifactResources() { Collection res = new ArrayList<>(this.implementationArtifacts.size()); - for (ImplementationArtifact da : this.implementationArtifacts) { + for (TImplementationArtifact da : this.implementationArtifacts) { ImplementationArtifactResource r = new ImplementationArtifactResource(da, this.implementationArtifacts, this.res); res.add(r); } @@ -84,7 +84,7 @@ public List getInterfacesOfAssociatedType() { } @Override - public String getId(ImplementationArtifact entity) { + public String getId(TImplementationArtifact entity) { return entity.getName(); } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/compliancerules/ComplianceRuleResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/compliancerules/ComplianceRuleResource.java index 89dd19899d..37a1195569 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/compliancerules/ComplianceRuleResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/compliancerules/ComplianceRuleResource.java @@ -19,9 +19,9 @@ import javax.ws.rs.core.Response; import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; -import org.eclipse.winery.model.tosca.extensions.OTComplianceRule; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TTopologyTemplate; +import org.eclipse.winery.model.tosca.extensions.OTComplianceRule; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResourceContainingATopology; import org.eclipse.winery.repository.rest.resources._support.IHasName; @@ -44,7 +44,7 @@ public ComplianceRuleResource(DefinitionsChildId id) { @Override protected TExtensibleElements createNewElement() { - return new OTComplianceRule(new OTComplianceRule.Builder()); + return new OTComplianceRule(new OTComplianceRule.Builder("default")); } public OTComplianceRule getComplianceRule() { diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/dataflowmodels/DataFlowResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/dataflowmodels/DataFlowResource.java index 76022d5468..7b2f5b61a5 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/dataflowmodels/DataFlowResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/dataflowmodels/DataFlowResource.java @@ -16,7 +16,6 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -35,10 +34,9 @@ import org.eclipse.winery.model.ids.definitions.NodeTypeId; import org.eclipse.winery.model.ids.definitions.RelationshipTypeId; import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; -import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TArtifactTemplate; +import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeType; @@ -48,7 +46,6 @@ import org.eclipse.winery.model.tosca.TRequirementDefinition; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.constants.ToscaBaseTypes; import org.eclipse.winery.model.tosca.extensions.kvproperties.PropertyDefinitionKV; @@ -99,17 +96,16 @@ public Response parseDataFlowToServiceTemplate(DataFlowModel dataFlowModel) { TDefinitions definitions = BackendUtils.createWrapperDefinitionsAndInitialEmptyElement(repo, templateId); TServiceTemplate serviceTemplate = definitions.getServiceTemplates().stream() - .filter(template -> template.getId().equals(templateId.getQName().getLocalPart()) && template - .getTargetNamespace().equals(templateId.getQName().getNamespaceURI())).findFirst().orElse(null); + .filter(template -> template.getId().equals(templateId.getQName().getLocalPart()) + && templateId.getQName().getNamespaceURI().equals(template.getTargetNamespace())).findFirst().orElse(null); if (Objects.isNull(serviceTemplate)) { return Response.serverError().entity("Unable to create ServiceTemplate for the given data flow model!") .build(); } - @SuppressWarnings("deprecated") TTopologyTemplate topology = serviceTemplate.getTopologyTemplate(); if (Objects.isNull(topology)) { - topology = new TTopologyTemplate(); + topology = new TTopologyTemplate.Builder().build(); } // iterate over all filters of the data flow and create corresponding NodeTemplates @@ -215,8 +211,8 @@ private TTopologyTemplate mergeTemplateForDataSource(TTopologyTemplate topology, TServiceTemplate serviceTemplate = repo.getElement(id); // only ServiceTemplates with location and provider tags are possible substitution candidates - if (containsMatchingTags(serviceTemplate, location, provider) && containsMatchingNodeType(serviceTemplate, - nodeTypeId)) { + if (containsMatchingTags(serviceTemplate, location, provider) + && containsMatchingNodeType(serviceTemplate, nodeTypeId)) { LOGGER.debug("Found suited substitution candidate for filter {}: {}", templateName, id.getQName()); TTopologyTemplate substitutionTopology = serviceTemplate.getTopologyTemplate(); @@ -225,12 +221,16 @@ private TTopologyTemplate mergeTemplateForDataSource(TTopologyTemplate topology, Map nameMap = new HashMap<>(); + if (substitutionTopology == null) { + continue; + } + // insert all NodeTemplates from the substitution candidate for (TNodeTemplate node : substitutionTopology.getNodeTemplates()) { - LinkedHashMap propertyList = new LinkedHashMap<>(); - if (Objects.nonNull(node.getProperties()) && Objects.nonNull(ModelUtilities.getPropertiesKV(node))) { - propertyList = ModelUtilities.getPropertiesKV(node); + LinkedHashMap propertyList = ModelUtilities.getPropertiesKV(node); + if (propertyList == null) { + propertyList = new LinkedHashMap<>(); } if (node.getType().equals(nodeTypeId.getQName())) { @@ -249,9 +249,9 @@ private TTopologyTemplate mergeTemplateForDataSource(TTopologyTemplate topology, } // update properties of the NodeTemplate if they are set at the filter - Map propertyCopy = new HashMap(properties); + Map propertyCopy = new HashMap<>(properties); for (String propertyName : propertyCopy.keySet()) { - if (propertyList.containsKey(propertyName)) { + if (propertyName != null && propertyList.containsKey(propertyName)) { propertyList.put(propertyName, properties.get(propertyName)); properties.remove(propertyName); } @@ -265,7 +265,7 @@ private TTopologyTemplate mergeTemplateForDataSource(TTopologyTemplate topology, } // add all properties that are not defined in the NodeTypes to the node corresponding to the filter - if (Objects.nonNull(filterCorrespondingNode) && Objects.nonNull(filterCorrespondingNodeProperties)) { + if (Objects.nonNull(filterCorrespondingNode)) { LOGGER.debug("{} properties defined without property at a matching type. Adding to filter " + "NodeTemplate!", properties.size()); @@ -273,17 +273,21 @@ private TTopologyTemplate mergeTemplateForDataSource(TTopologyTemplate topology, filterCorrespondingNodeProperties.put(propertyName, properties.get(propertyName)); } ModelUtilities.setPropertiesKV(filterCorrespondingNode, filterCorrespondingNodeProperties); - } - // add location and provider attribute to the NodeTemplate - filterCorrespondingNode.getOtherAttributes().put(ModelUtilities.NODE_TEMPLATE_REGION, location); - filterCorrespondingNode.getOtherAttributes().put(ModelUtilities.NODE_TEMPLATE_PROVIDER, provider); + // add location and provider attribute to the NodeTemplate + filterCorrespondingNode.getOtherAttributes().put(ModelUtilities.NODE_TEMPLATE_REGION, location); + filterCorrespondingNode.getOtherAttributes().put(ModelUtilities.NODE_TEMPLATE_PROVIDER, provider); + } // add all relations from the substitution fragment to the incomplete topology for (TRelationshipTemplate relation : substitutionTopology.getRelationshipTemplates()) { // update source id if it was changed - if (nameMap.containsKey(relation.getSourceElement().getRef().getId())) { - relation.setSourceNodeTemplate(topology.getNodeTemplate(nameMap.get(relation.getSourceElement().getRef().getId()))); + String sourceId = relation.getSourceElement().getRef().getId(); + if (nameMap.containsKey(sourceId)) { + TNodeTemplate nodeTemplate = topology.getNodeTemplate(nameMap.get(sourceId)); + if (nodeTemplate != null) { + relation.setSourceNodeTemplate(nodeTemplate); + } } // update target id if it was changed @@ -315,7 +319,8 @@ private TTopologyTemplate mergeTemplateForDataSource(TTopologyTemplate topology, * RelationshipTemplates and is therefore suited as a substitution candidate. */ private boolean containsMatchingNodeType(TServiceTemplate serviceTemplate, NodeTypeId nodeTypeId) { - return serviceTemplate.getTopologyTemplate().getNodeTemplates().stream() + return serviceTemplate.getTopologyTemplate() != null + && serviceTemplate.getTopologyTemplate().getNodeTemplates().stream() .anyMatch(nodeTemplate -> nodeTemplate.getType().equals(nodeTypeId.getQName()) && ModelUtilities.getIncomingRelationshipTemplates(serviceTemplate.getTopologyTemplate(), nodeTemplate).isEmpty()); } @@ -324,13 +329,13 @@ private boolean containsMatchingNodeType(TServiceTemplate serviceTemplate, NodeT * Check if the ServiceTemplate contains the location and provider tags with matching values. */ private boolean containsMatchingTags(TServiceTemplate serviceTemplate, String location, String provider) { - TTags tags = serviceTemplate.getTags(); + List tags = serviceTemplate.getTags(); if (Objects.isNull(tags)) { return false; } int tests = 0; - for (TTag tag : tags.getTag()) { + for (TTag tag : tags) { if (tag.getName().equalsIgnoreCase(TAG_NAME_LOCATION) && tag.getValue().equalsIgnoreCase(location) || tag.getName().equalsIgnoreCase(TAG_NAME_PROVIDER) && tag.getValue().equalsIgnoreCase(provider)) { tests++; @@ -376,19 +381,19 @@ private TTopologyTemplate createNodeTemplate(TTopologyTemplate topology, NodeTyp } // add all requirements which are defined by the corresponding NodeType - TNodeType.RequirementDefinitions def = nodeType.getRequirementDefinitions(); - if (Objects.nonNull(def)) { - for (TRequirementDefinition requirementDef : def.getRequirementDefinition()) { + if (nodeType.getRequirementDefinitions() != null) { + for (TRequirementDefinition requirementDef : nodeType.getRequirementDefinitions()) { String requirementId = templateName + "-" + requirementDef.getName(); - templateBuilder.addRequirements(new TRequirement.Builder(requirementId, requirementDef.getName(), - requirementDef.getRequirementType()).build()); + templateBuilder.addRequirement( + new TRequirement.Builder(requirementId, requirementDef.getName(), + requirementDef.getRequirementType()).build() + ); } } // add the DAs to the NodeTemplate if (Objects.nonNull(artifacts) && !artifacts.isEmpty()) { LOGGER.debug("{} artifacts specified for filter {}", artifacts.size(), templateName); - List daList = new ArrayList<>(); // get the IDs of all available ArtifactTemplates List artifactTemplateIds = repo.getAllDefinitionsChildIds().stream() @@ -401,16 +406,13 @@ private TTopologyTemplate createNodeTemplate(TTopologyTemplate topology, NodeTyp if (idOptional.isPresent()) { ArtifactTemplateId artifactTemplateId = idOptional.get(); TArtifactTemplate artifactTemplate = repo.getElement(artifactTemplateId); - daList.add(new TDeploymentArtifact.Builder(artifactName.toString(), artifactTemplate.getType()) + templateBuilder.addDeploymentArtifact(new TDeploymentArtifact.Builder(artifactName.toString(), artifactTemplate.getType()) .setArtifactRef(artifactName).build()); } else { LOGGER.warn("Filter '{}' specifies DA with name '{}' but no such artifact available in repository!", templateName, artifactName); } } - - TDeploymentArtifacts das = new TDeploymentArtifacts.Builder(daList).build(); - templateBuilder.setDeploymentArtifacts(das); } topology.addNodeTemplate(templateBuilder.build()); @@ -428,17 +430,14 @@ private TRelationshipTemplate createRelationshipTemplate(RelationshipTypeId rela return null; } - TRelationshipTemplate.SourceOrTargetElement sourceElement = new TRelationshipTemplate.SourceOrTargetElement(); - TRelationshipTemplate.SourceOrTargetElement targetElement = new TRelationshipTemplate.SourceOrTargetElement(); String relationId = source.getId() + "-connectsTo-" + target.getId(); - // default connectsTo direction if no further information is provided - sourceElement.setRef(source); - targetElement.setRef(target); - - TRelationshipTemplate.Builder builder = new TRelationshipTemplate.Builder(relationId, relationshipTypeId.getQName(), - sourceElement, targetElement); - builder.setName(relationId); + TRelationshipTemplate.Builder builder = new TRelationshipTemplate.Builder( + relationId, + relationshipTypeId.getQName(), + source, + target + ).setName(relationId); // add empty properties to avoid errors due to missing properties if (Objects.nonNull(relationshipType.getWinerysPropertiesDefinition())) { diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/documentation/DocumentationResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/documentation/DocumentationResource.java index 3486403211..f21d43679e 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/documentation/DocumentationResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/documentation/DocumentationResource.java @@ -13,14 +13,15 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.documentation; -import org.eclipse.winery.model.tosca.TDocumentation; -import org.eclipse.winery.repository.rest.RestUtils; -import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; +import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.core.Response; -import java.util.List; + +import org.eclipse.winery.model.tosca.TDocumentation; +import org.eclipse.winery.repository.rest.RestUtils; +import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; public class DocumentationResource { @@ -48,10 +49,11 @@ public String onGet() { @PUT public Response onPost(String documentation) { this.documentation.clear(); - TDocumentation tDocumentation = new TDocumentation(); - tDocumentation.getContent().add(documentation); - this.documentation.add(tDocumentation); + this.documentation.add( + new TDocumentation.Builder() + .addContent(documentation) + .build() + ); return RestUtils.persist(this.abstractComponentInstanceResource); } - } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/edmm/EdmmResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/edmm/EdmmResource.java index 2b0847771a..1dc6142322 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/edmm/EdmmResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/edmm/EdmmResource.java @@ -44,7 +44,7 @@ import org.eclipse.winery.edmm.model.EdmmType; import org.eclipse.winery.edmm.plugins.PluginManager; import org.eclipse.winery.model.ids.EncodingUtil; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; +import org.eclipse.winery.model.tosca.TImplementationArtifact; import org.eclipse.winery.model.tosca.TInterface; import org.eclipse.winery.model.tosca.TOperation; import org.eclipse.winery.model.tosca.TServiceTemplate; @@ -147,7 +147,8 @@ public Response transform(@QueryParam(value = "target") String target) { "

%s
" + "
Probably something is missing in the service template XML or something went wrong on the server
" + "", - e.toString()); + e + ); return Response.status(Response.Status.INTERNAL_SERVER_ERROR) .type(MediaType.TEXT_HTML) .entity(message) @@ -242,7 +243,8 @@ public Response createPlaceholders(String componentType, @Context UriInfo uriInf .getAllArtifactResources() .stream() .anyMatch(artifactResource -> { - TImplementationArtifacts.ImplementationArtifact implementationArtifact = artifactResource.getImplementationArtifact(); + TImplementationArtifact implementationArtifact = artifactResource.getImplementationArtifact(); + return operation.equals(implementationArtifact.getOperationName()) && LIFECYCLE_NAME.equals(implementationArtifact.getInterfaceName()) && implementationArtifact.getArtifactRef() != null && diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/TEntityTemplateResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/TEntityTemplateResource.java index 6bb7996e85..52d9e2c2c5 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/TEntityTemplateResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/TEntityTemplateResource.java @@ -13,12 +13,14 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.entitytemplates; +import java.util.ArrayList; import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; import org.eclipse.winery.model.tosca.TEntityTemplate; +import org.eclipse.winery.model.tosca.TPropertyConstraint; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; import org.eclipse.winery.repository.rest.resources._support.IPersistable; import org.eclipse.winery.repository.rest.resources._support.collections.IIdDetermination; @@ -46,9 +48,9 @@ public PropertiesResource getPropertiesResource() { @GET @Path("propertyconstraints") public PropertyConstraintsResource getPropertyConstraints() { - TEntityTemplate.PropertyConstraints constraints = this.o.getPropertyConstraints(); + List constraints = this.o.getPropertyConstraints(); if (constraints == null) { - constraints = new TEntityTemplate.PropertyConstraints(); + constraints = new ArrayList<>(); } return new PropertyConstraintsResource(constraints, (AbstractComponentInstanceResource) this.res); } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/artifacttemplates/ArtifactTemplateResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/artifacttemplates/ArtifactTemplateResource.java index 35605a4fb7..e8942918c8 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/artifacttemplates/ArtifactTemplateResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/artifacttemplates/ArtifactTemplateResource.java @@ -14,6 +14,8 @@ package org.eclipse.winery.repository.rest.resources.entitytemplates.artifacttemplates; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -27,8 +29,8 @@ import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; import org.eclipse.winery.model.tosca.HasType; import org.eclipse.winery.model.tosca.TArtifactTemplate; -import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TExtensibleElements; +import org.eclipse.winery.model.tosca.TPropertyConstraint; import org.eclipse.winery.repository.backend.BackendUtils; import org.eclipse.winery.repository.backend.RepositoryFactory; import org.eclipse.winery.repository.datatypes.ids.elements.ArtifactTemplateFilesDirectoryId; @@ -147,9 +149,9 @@ public Response getReferenceCount( @Path("propertyconstraints") public PropertyConstraintsResource getPropertyConstraints() { - TEntityTemplate.PropertyConstraints constraints = this.getTArtifactTemplate().getPropertyConstraints(); + List constraints = this.getTArtifactTemplate().getPropertyConstraints(); if (constraints == null) { - constraints = new TEntityTemplate.PropertyConstraints(); + constraints = new ArrayList<>(); this.getTArtifactTemplate().setPropertyConstraints(constraints); } return new PropertyConstraintsResource(constraints, this); diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/policytemplates/PolicyTemplateResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/policytemplates/PolicyTemplateResource.java index ad295f758c..f75e52ab22 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/policytemplates/PolicyTemplateResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytemplates/policytemplates/PolicyTemplateResource.java @@ -13,13 +13,16 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.entitytemplates.policytemplates; +import java.util.ArrayList; +import java.util.List; + import javax.ws.rs.Path; import javax.ws.rs.core.Response; import org.eclipse.winery.model.ids.definitions.PolicyTemplateId; -import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TPolicyTemplate; +import org.eclipse.winery.model.tosca.TPropertyConstraint; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; import org.eclipse.winery.repository.rest.resources._support.IHasName; @@ -77,9 +80,9 @@ public Response setName(String name) { @Path("propertyconstraints") public PropertyConstraintsResource getPropertyConstraints() { - TEntityTemplate.PropertyConstraints constraints = this.getPolicyTemplate().getPropertyConstraints(); + List constraints = this.getPolicyTemplate().getPropertyConstraints(); if (constraints == null) { - constraints = new TEntityTemplate.PropertyConstraints(); + constraints = new ArrayList<>(); this.getPolicyTemplate().setPropertyConstraints(constraints); } return new PropertyConstraintsResource(constraints, this); diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/EntityTypeImplementationResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/EntityTypeImplementationResource.java index 157e35a948..51619a6e02 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/EntityTypeImplementationResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/EntityTypeImplementationResource.java @@ -15,14 +15,9 @@ import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResourceWithNameDerivedFromAbstractFinal; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public abstract class EntityTypeImplementationResource extends AbstractComponentInstanceResourceWithNameDerivedFromAbstractFinal { - private static final Logger LOGGER = LoggerFactory.getLogger(EntityTypeImplementationResource.class); - - protected EntityTypeImplementationResource(DefinitionsChildId id) { super(id); } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/nodetypeimplementations/NodeTypeImplementationResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/nodetypeimplementations/NodeTypeImplementationResource.java index beb32350d1..4d0cf198bb 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/nodetypeimplementations/NodeTypeImplementationResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/nodetypeimplementations/NodeTypeImplementationResource.java @@ -13,10 +13,15 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.entitytypeimplementations.nodetypeimplementations; +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.Path; + import org.eclipse.winery.model.ids.definitions.NodeTypeImplementationId; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; +import org.eclipse.winery.model.tosca.TDeploymentArtifact; import org.eclipse.winery.model.tosca.TExtensibleElements; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; +import org.eclipse.winery.model.tosca.TImplementationArtifact; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; import org.eclipse.winery.repository.rest.resources._support.INodeTemplateResourceOrNodeTypeImplementationResource; import org.eclipse.winery.repository.rest.resources._support.INodeTypeImplementationResourceOrRelationshipTypeImplementationResource; @@ -24,8 +29,6 @@ import org.eclipse.winery.repository.rest.resources.artifacts.ImplementationArtifactsResource; import org.eclipse.winery.repository.rest.resources.entitytypeimplementations.EntityTypeImplementationResource; -import javax.ws.rs.Path; - public class NodeTypeImplementationResource extends EntityTypeImplementationResource implements INodeTemplateResourceOrNodeTypeImplementationResource, INodeTypeImplementationResourceOrRelationshipTypeImplementationResource { public NodeTypeImplementationResource(NodeTypeImplementationId id) { @@ -45,13 +48,12 @@ public TNodeTypeImplementation getNTI() { */ @Path("implementationartifacts/") public ImplementationArtifactsResource getImplementationArtifacts() { - TImplementationArtifacts implementationArtifacts; - implementationArtifacts = this.getNTI().getImplementationArtifacts(); + List implementationArtifacts = this.getNTI().getImplementationArtifacts(); if (implementationArtifacts == null) { - implementationArtifacts = new TImplementationArtifacts(); + implementationArtifacts = new ArrayList<>(); this.getNTI().setImplementationArtifacts(implementationArtifacts); } - return new ImplementationArtifactsResource(implementationArtifacts.getImplementationArtifact(), this); + return new ImplementationArtifactsResource(implementationArtifacts, this); } /** @@ -60,13 +62,12 @@ public ImplementationArtifactsResource getImplementationArtifacts() { */ @Path("deploymentartifacts/") public DeploymentArtifactsResource getDeploymentArtifacts() { - TDeploymentArtifacts deploymentArtifacts; - deploymentArtifacts = this.getNTI().getDeploymentArtifacts(); + List deploymentArtifacts = this.getNTI().getDeploymentArtifacts(); if (deploymentArtifacts == null) { - deploymentArtifacts = new TDeploymentArtifacts(); + deploymentArtifacts = new ArrayList<>(); this.getNTI().setDeploymentArtifacts(deploymentArtifacts); } - return new DeploymentArtifactsResource(deploymentArtifacts.getDeploymentArtifact(), this); + return new DeploymentArtifactsResource(deploymentArtifacts, this); } @Override diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/relationshiptypeimplementations/RelationshipTypeImplementationResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/relationshiptypeimplementations/RelationshipTypeImplementationResource.java index 3f11398795..c1624d336e 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/relationshiptypeimplementations/RelationshipTypeImplementationResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/relationshiptypeimplementations/RelationshipTypeImplementationResource.java @@ -13,9 +13,12 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.entitytypeimplementations.relationshiptypeimplementations; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.winery.model.ids.definitions.RelationshipTypeImplementationId; import org.eclipse.winery.model.tosca.TExtensibleElements; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; +import org.eclipse.winery.model.tosca.TImplementationArtifact; import org.eclipse.winery.model.tosca.TRelationshipTypeImplementation; import org.eclipse.winery.repository.rest.resources._support.INodeTypeImplementationResourceOrRelationshipTypeImplementationResource; import org.eclipse.winery.repository.rest.resources.artifacts.ImplementationArtifactsResource; @@ -40,13 +43,12 @@ public TRelationshipTypeImplementation getRTI() { */ @Path("implementationartifacts/") public ImplementationArtifactsResource getImplementationArtifacts() { - TImplementationArtifacts implementationArtifacts; - implementationArtifacts = this.getRTI().getImplementationArtifacts(); + List implementationArtifacts = this.getRTI().getImplementationArtifacts(); if (implementationArtifacts == null) { - implementationArtifacts = new TImplementationArtifacts(); + implementationArtifacts = new ArrayList<>(); this.getRTI().setImplementationArtifacts(implementationArtifacts); } - return new ImplementationArtifactsResource(implementationArtifacts.getImplementationArtifact(), this); + return new ImplementationArtifactsResource(implementationArtifacts , this); } @Override diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/InstanceStatesResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/InstanceStatesResource.java index 2f88b400ca..d891316ae2 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/InstanceStatesResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/InstanceStatesResource.java @@ -14,7 +14,6 @@ package org.eclipse.winery.repository.rest.resources.entitytypes; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import javax.ws.rs.Consumes; @@ -29,30 +28,26 @@ import javax.ws.rs.core.Response.Status; import org.eclipse.winery.model.ids.EncodingUtil; -import org.eclipse.winery.model.tosca.TTopologyElementInstanceStates; -import org.eclipse.winery.model.tosca.TTopologyElementInstanceStates.InstanceState; +import org.eclipse.winery.model.tosca.TInstanceState; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources.apiData.InstanceStateApiData; import org.apache.commons.lang3.StringUtils; /** - * Resource for instance states. - * Used by relationship types and node types + * Resource for instance states. Used by relationship types and node types */ public class InstanceStatesResource { private TopologyGraphElementEntityTypeResource typeResource; - private TTopologyElementInstanceStates instanceStates; - + private List instanceStates; /** * @param instanceStates the instanceStates to manage - * @param typeResource the type resource, where the instance states are - * managed. This reference is required to fire "persist()" in - * case of updates + * @param typeResource the type resource, where the instance states are managed. This reference is required to + * fire "persist()" in case of updates */ - public InstanceStatesResource(TTopologyElementInstanceStates instanceStates, TopologyGraphElementEntityTypeResource typeResource) { + public InstanceStatesResource(List instanceStates, TopologyGraphElementEntityTypeResource typeResource) { this.instanceStates = instanceStates; this.typeResource = typeResource; } @@ -60,9 +55,9 @@ public InstanceStatesResource(TTopologyElementInstanceStates instanceStates, Top @GET @Produces(MediaType.APPLICATION_JSON) public List getInstanceStates() { - List instanceStates = this.instanceStates.getInstanceState(); + List instanceStates = this.instanceStates; ArrayList states = new ArrayList<>(instanceStates.size()); - for (InstanceState instanceState : instanceStates) { + for (TInstanceState instanceState : instanceStates) { states.add(new InstanceStateApiData(instanceState.getState())); } return states; @@ -74,25 +69,12 @@ public Response deleteInstanceState(@PathParam("instanceState") String instanceS if (StringUtils.isEmpty(instanceStateToRemove)) { return Response.status(Status.BAD_REQUEST).entity("null instance to remove").build(); } - instanceStateToRemove = EncodingUtil.URLdecode(instanceStateToRemove); - - // InstanceState does not override "equals()", therefore we have to manually remove it + String decodedInstanceState = EncodingUtil.URLdecode(instanceStateToRemove); - List instanceStates = this.instanceStates.getInstanceState(); - Iterator iterator = instanceStates.iterator(); - boolean found = false; - while (iterator.hasNext() && !found) { - if (iterator.next().getState().equals(instanceStateToRemove)) { - found = true; - } - } - - if (!found) { + if (!this.instanceStates.removeIf(state -> state.getState().equals(decodedInstanceState))) { return Response.status(Status.NOT_FOUND).build(); } - iterator.remove(); - return RestUtils.persist(this.typeResource); } @@ -105,27 +87,13 @@ public Response addInstanceState(InstanceStateApiData json) { return Response.notAcceptable(null).build(); } - // InstanceState does not override "equals()", therefore we have to manually check for existance - - List instanceStates = this.instanceStates.getInstanceState(); - Iterator iterator = instanceStates.iterator(); - boolean found = false; - while (iterator.hasNext() && !found) { - if (iterator.next().getState().equals(state)) { - found = true; - } - } - - if (found) { - // no error, just return + if (this.instanceStates.removeIf(instanceState -> instanceState.getState().equals(state))) { + // This state is already defined, just return return Response.noContent().build(); } - InstanceState instanceState = new InstanceState(); - instanceState.setState(state); - instanceStates.add(instanceState); + instanceStates.add(new TInstanceState(state)); return RestUtils.persist(this.typeResource); } - } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResource.java index c669bbf079..4afc506e88 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResource.java @@ -30,12 +30,9 @@ import org.eclipse.winery.model.ids.definitions.NodeTypeId; import org.eclipse.winery.model.ids.definitions.NodeTypeImplementationId; import org.eclipse.winery.model.tosca.TArtifact; -import org.eclipse.winery.model.tosca.TArtifacts; +import org.eclipse.winery.model.tosca.TCapabilityDefinition; import org.eclipse.winery.model.tosca.TExtensibleElements; -import org.eclipse.winery.model.tosca.TInterfaces; import org.eclipse.winery.model.tosca.TNodeType; -import org.eclipse.winery.model.tosca.TNodeType.RequirementDefinitions; -import org.eclipse.winery.model.tosca.TTopologyElementInstanceStates; import org.eclipse.winery.repository.datatypes.ids.elements.DirectoryId; import org.eclipse.winery.repository.datatypes.ids.elements.GenericDirectoryId; import org.eclipse.winery.repository.rest.RestUtils; @@ -73,43 +70,36 @@ public List getImplementations() { @Path("instancestates/") public InstanceStatesResource getInstanceStatesResource() { - TTopologyElementInstanceStates instanceStates = this.getNodeType().getInstanceStates(); - if (instanceStates == null) { + if (this.getNodeType().getInstanceStates() == null) { // if an explicit (empty) list does not exist, create it - instanceStates = new TTopologyElementInstanceStates(); - this.getNodeType().setInstanceStates(instanceStates); + this.getNodeType().setInstanceStates(new ArrayList<>()); } - return new InstanceStatesResource(instanceStates, this); + return new InstanceStatesResource(this.getNodeType().getInstanceStates(), this); } @Path("interfaces/") public InterfacesResource getInterfaces() { - TInterfaces interfaces = this.getNodeType().getInterfaces(); - if (interfaces == null) { - interfaces = new TInterfaces(); - this.getNodeType().setInterfaces(interfaces); + if (this.getNodeType().getInterfaces() == null) { + this.getNodeType().setInterfaces(new ArrayList<>()); } - return new InterfacesResource(this, interfaces.getInterface(), "nodeType"); + return new InterfacesResource(this, this.getNodeType().getInterfaces(), "nodeType"); } @Path("requirementdefinitions/") public RequirementDefinitionsResource getRequirementDefinitions() { - RequirementDefinitions definitions = this.getNodeType().getRequirementDefinitions(); - if (definitions == null) { - definitions = new RequirementDefinitions(); - this.getNodeType().setRequirementDefinitions(definitions); + if (this.getNodeType().getRequirementDefinitions() == null) { + this.getNodeType().setRequirementDefinitions(new ArrayList<>()); } - return new RequirementDefinitionsResource(this, definitions.getRequirementDefinition()); + return new RequirementDefinitionsResource(this, this.getNodeType().getRequirementDefinitions()); } @Path("capabilitydefinitions/") public CapabilityDefinitionsResource getCapabilityDefinitions() { - TNodeType.CapabilityDefinitions definitions = this.getNodeType().getCapabilityDefinitions(); - if (definitions == null) { - definitions = new TNodeType.CapabilityDefinitions(); - this.getNodeType().setCapabilityDefinitions(definitions); + List capabilityDefinitions = this.getNodeType().getCapabilityDefinitions(); + if (capabilityDefinitions == null) { + this.getNodeType().setCapabilityDefinitions(new ArrayList<>()); } - return new CapabilityDefinitionsResource(this, definitions.getCapabilityDefinition()); + return new CapabilityDefinitionsResource(this, this.getNodeType().getCapabilityDefinitions()); } @Path("appearance") @@ -126,11 +116,9 @@ public InterfaceDefinitionsResource InterfaceDefinitionsResource() { @Path("artifacts/") @Produces(MediaType.APPLICATION_JSON) public List getArtifacts() { - TArtifacts artifacts = this.getNodeType().getArtifacts(); - if (artifacts == null) { - return new ArrayList<>(); - } - return artifacts.getArtifact(); + return this.getNodeType().getArtifacts() == null + ? new ArrayList<>() + : this.getNodeType().getArtifacts(); } @POST @@ -139,9 +127,9 @@ public List getArtifacts() { public Response addArtifact(TArtifact artifact) { TNodeType nodeType = this.getNodeType(); if (nodeType.getArtifacts() == null) { - nodeType.setArtifacts(new TArtifacts()); + nodeType.setArtifacts(new ArrayList<>()); } - this.getNodeType().getArtifacts().addArtifact(artifact); + nodeType.getArtifacts().add(artifact); return RestUtils.persist(this); } @@ -151,10 +139,10 @@ public Response addArtifact(TArtifact artifact) { public Response deleteArtifact(@PathParam("name") String name) { TNodeType nodeType = this.getNodeType(); if (nodeType.getArtifacts() == null) { - nodeType.setArtifacts(new TArtifacts()); + nodeType.setArtifacts(new ArrayList<>()); } TArtifact artifact = null; - for (TArtifact item : nodeType.getArtifacts().getArtifact()) { + for (TArtifact item : nodeType.getArtifacts()) { if (name.equalsIgnoreCase(item.getName())) { artifact = item; } @@ -162,9 +150,8 @@ public Response deleteArtifact(@PathParam("name") String name) { if (artifact == null) { return Response.noContent().build(); } - List artifacts = nodeType.getArtifacts().getArtifact(); + List artifacts = nodeType.getArtifacts(); artifacts.remove(artifact); - this.getNodeType().getArtifacts().setArtifact(artifacts); this.uploadArtifact(name).deleteFile(artifact.getFile(), null); return RestUtils.persist(this); } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/CapabilityDefinitionResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/CapabilityDefinitionResource.java index 1519cff1e6..2d4b5c794c 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/CapabilityDefinitionResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/CapabilityDefinitionResource.java @@ -13,8 +13,16 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.entitytypes.nodetypes.reqandcapdefs; +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.FormParam; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.core.Response; +import javax.xml.namespace.QName; + import org.eclipse.winery.model.tosca.TCapabilityDefinition; -import org.eclipse.winery.model.tosca.TCapabilityDefinition.Constraints; import org.eclipse.winery.model.tosca.TConstraint; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; @@ -22,31 +30,21 @@ import org.eclipse.winery.repository.rest.resources._support.collections.IIdDetermination; import org.eclipse.winery.repository.rest.resources.entitytypes.nodetypes.NodeTypeResource; -import javax.ws.rs.FormParam; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.core.Response; -import javax.xml.namespace.QName; -import java.util.List; - /** - * Implementation similar to RequirementDefinitionResource, but with - * TCapabilityDefinition instead of TRequirementDefinition + * Implementation similar to RequirementDefinitionResource, but with TCapabilityDefinition instead of + * TRequirementDefinition */ public final class CapabilityDefinitionResource extends AbstractReqOrCapDefResource { private final TCapabilityDefinition capDef; - /** - * Constructor has to follow the pattern of EnetityTResource as the - * constructor is invoked by reflection in EntityWithIdcollectionResource + * Constructor has to follow the pattern of EnetityTResource as the constructor is invoked by reflection in + * EntityWithIdCollectionResource * - * @param res the resource this req def is nested in. Has to be of Type - * "NodeTypeResource". Due to the implementation of - * org.eclipse.winery .repository.resources._support.collections. - * withid.EntityWithIdCollectionResource - * .getEntityResourceInstance(EntityT, int), we have to use + * @param res the resource this req def is nested in. Has to be of Type "NodeTypeResource". Due to the + * implementation of org.eclipse.winery.repository.resources._support.collections. + * withId.EntityWithIdCollectionResource.getEntityResourceInstance(EntityT, int), we have to use * "AbstractComponentInstanceResource" as type */ public CapabilityDefinitionResource(IIdDetermination idDetermination, TCapabilityDefinition capDef, int idx, List list, AbstractComponentInstanceResource res) { @@ -62,16 +60,16 @@ public CapabilityDefinitionResource(IIdDetermination idDe } /** - * Fetch the list of constraints from the given definition. If the list does - * not exist, the list is created an stored in the given capDef + * Fetch the list of constraints from the given definition. If the list does not exist, the list is created an + * stored in the given capDef */ public static List getConstraints(TCapabilityDefinition capDef) { - Constraints constraints = capDef.getConstraints(); + List constraints = capDef.getConstraints(); if (constraints == null) { - constraints = new Constraints(); + constraints = new ArrayList<>(); capDef.setConstraints(constraints); } - return constraints.getConstraint(); + return constraints; } public QName getType() { diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/RequirementDefinitionResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/RequirementDefinitionResource.java index b0f47cc1a0..0519a36a3b 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/RequirementDefinitionResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/RequirementDefinitionResource.java @@ -13,6 +13,7 @@ *******************************************************************************/ package org.eclipse.winery.repository.rest.resources.entitytypes.nodetypes.reqandcapdefs; +import java.util.ArrayList; import java.util.List; import javax.ws.rs.Consumes; @@ -27,7 +28,6 @@ import org.eclipse.winery.model.tosca.TConstraint; import org.eclipse.winery.model.tosca.TRequirementDefinition; -import org.eclipse.winery.model.tosca.TRequirementDefinition.Constraints; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; import org.eclipse.winery.repository.rest.resources._support.IPersistable; @@ -38,12 +38,12 @@ public final class RequirementDefinitionResource extends AbstractReqOrCapDefResource { /** - * Constructor has to follow the pattern of EnetityTResource as the constructor is invoked by reflection in - * EntityWithIdcollectionResource + * Constructor has to follow the pattern of EntityTResource as the constructor is invoked by reflection in + * EntityWithIdCollectionResource * * @param res the resource this req def is nested in. Has to be of Type "NodeTypeResource". Due to the * implementation of org.eclipse.winery .repository.resources._support.collections. - * withid.EntityWithIdCollectionResource .getEntityResourceInstance(EntityT, int), we have to use + * withId.EntityWithIdCollectionResource .getEntityResourceInstance(EntityT, int), we have to use * "AbstractComponentInstanceResource" as type */ public RequirementDefinitionResource(IIdDetermination idDetermination, TRequirementDefinition reqDef, int idx, List list, AbstractComponentInstanceResource res) { @@ -53,6 +53,7 @@ public RequirementDefinitionResource(IIdDetermination id /** * Quick fix to avoid internal server error when opening RequirementDefinitions Tab */ + @SuppressWarnings("unused") public RequirementDefinitionResource(IIdDetermination idDetermination, TRequirementDefinition reqDef, int idx, List list, IPersistable res) { this(idDetermination, reqDef, idx, list, (AbstractComponentInstanceResource) res); } @@ -62,16 +63,16 @@ public TRequirementDefinition getDefinition() { } /** - * Fetch the list of constraints from the given definition. If the list does not exist, the list is created an + * Fetch the list of constraints from the given definition. If the list does not exist, the list is created and * stored in the given def */ public static List getConstraints(TRequirementDefinition def) { - Constraints constraints = def.getConstraints(); + List constraints = def.getConstraints(); if (constraints == null) { - constraints = new Constraints(); + constraints = new ArrayList<>(); def.setConstraints(constraints); } - return constraints.getConstraint(); + return constraints; } public QName getType() { diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/RequirementOrCapabilityDefinitionsResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/RequirementOrCapabilityDefinitionsResource.java index 69e2ca46df..0e75385e96 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/RequirementOrCapabilityDefinitionsResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/reqandcapdefs/RequirementOrCapabilityDefinitionsResource.java @@ -46,7 +46,9 @@ public abstract class RequirementOrCapabilityDefinitionsResource entityResourceTClazz, Class entityTClazz, List list, NodeTypeResource res) { + public RequirementOrCapabilityDefinitionsResource(Class entityResourceTClazz, + Class entityTClazz, + List list, NodeTypeResource res) { super(entityResourceTClazz, entityTClazz, list, res); this.res = res; } @@ -58,7 +60,6 @@ public RequirementOrCapabilityDefinitionsResource(Class @POST // As there is no supertype of TCapabilityType and TRequirementType containing the common attributes, we have to rely on unchecked casts - @SuppressWarnings("unchecked") @Consumes(MediaType.APPLICATION_JSON) public Response onPost(RequirementOrCapabilityDefinitionPostData postData) { return this.performPost(postData); @@ -84,10 +85,11 @@ protected Response performPost(RequirementOrCapabilityDefinitionPostData postDat return this.persistDef(def, postData); } catch (NumberFormatException e) { - return Response.status(Status.BAD_REQUEST).entity("Bad format of lowerbound: " + e.getMessage()).build(); + return Response.status(Status.BAD_REQUEST).entity("Bad format of lower bound: " + e.getMessage()).build(); } } + @SuppressWarnings("unchecked") protected ReqDefOrCapDef createBasicReqOrCapDef(RequirementOrCapabilityDefinitionPostData postData) throws NumberFormatException { int lbound = 1; if (!StringUtils.isEmpty(postData.lowerBound)) { @@ -103,25 +105,30 @@ protected ReqDefOrCapDef createBasicReqOrCapDef(RequirementOrCapabilityDefinitio ReqDefOrCapDef def; if (this instanceof CapabilityDefinitionsResource) { - def = (ReqDefOrCapDef) new TCapabilityDefinition(); + def = (ReqDefOrCapDef) new TCapabilityDefinition.Builder( + postData.name, + QName.valueOf(postData.type) + ) + .setUpperBound(ubound) + .setLowerBound(lbound) + .build(); } else { assert (this instanceof RequirementDefinitionsResource); - def = (ReqDefOrCapDef) new TRequirementDefinition(); + def = (ReqDefOrCapDef) new TRequirementDefinition.Builder( + postData.name, + QName.valueOf(postData.type) + ) + .setUpperBound(ubound) + .setLowerBound(lbound) + .build(); } - // copy all basic data into object - AbstractReqOrCapDefResource.invokeSetter(def, "setName", postData.name); - AbstractReqOrCapDefResource.invokeSetter(def, "setLowerBound", lbound); - AbstractReqOrCapDefResource.invokeSetter(def, "setUpperBound", ubound); - return def; } protected void handleDefType(ReqDefOrCapDef def, RequirementOrCapabilityDefinitionPostData postData) { - QName typeQName = null; - if (postData.type != null) { - typeQName = QName.valueOf(postData.type); + QName typeQName = QName.valueOf(postData.type); if (def instanceof TCapabilityDefinition) { ((TCapabilityDefinition) def).setCapabilityType(typeQName); diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/policytypes/AppliesToResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/policytypes/AppliesToResource.java index 40dd656649..f2d6167601 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/policytypes/AppliesToResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/policytypes/AppliesToResource.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012-2020 Contributors to the Eclipse Foundation + * Copyright (c) 2012-2021 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -21,7 +21,6 @@ import javax.ws.rs.core.Response; import javax.xml.namespace.QName; -import org.eclipse.winery.model.tosca.TAppliesTo; import org.eclipse.winery.model.tosca.TPolicyType; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources.apiData.QNameApiData; @@ -34,39 +33,25 @@ public class AppliesToResource { public AppliesToResource(PolicyTypeResource policyTypeResource) { this.policyTypeResource = policyTypeResource; } - + @GET public ValidTypesListApiData getValidSourceTypes() { - List qNames = null; + List qNames = getPolicyType() + .getAppliesTo() + .stream() + .map(TPolicyType.NodeTypeReference::getTypeRef) + .collect(Collectors.toList()); - if (getPolicyType().getAppliesTo() != null) { - qNames = getPolicyType() - .getAppliesTo() - .getNodeTypeReference() - .stream() - .map(TAppliesTo.NodeTypeReference::getTypeRef) - .collect(Collectors.toList()); - } return new ValidTypesListApiData(qNames); } - + @PUT public Response saveValidSourceTypes(ValidTypesListApiData newValidSourceTypes) { - TPolicyType t = this.getPolicyType(); - List references = newValidSourceTypes - .getNodes() - .stream() + List references = newValidSourceTypes.getNodes().stream() .map(QNameApiData::asQName) - .map(qName -> { - TAppliesTo.NodeTypeReference ntr = new TAppliesTo.NodeTypeReference(); - ntr.setTypeRef(qName); - return ntr; - } - ) + .map(TPolicyType.NodeTypeReference::new) .collect(Collectors.toList()); - TAppliesTo appliesTo = new TAppliesTo(); - appliesTo.getNodeTypeReference().addAll(references); - t.setAppliesTo(appliesTo); + this.getPolicyType().setAppliesTo(references); return RestUtils.persist(this.policyTypeResource); } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/relationshiptypes/RelationshipTypeResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/relationshiptypes/RelationshipTypeResource.java index f0d9c7cd2a..60c28ead46 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/relationshiptypes/RelationshipTypeResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/entitytypes/relationshiptypes/RelationshipTypeResource.java @@ -29,11 +29,9 @@ import org.eclipse.winery.model.ids.definitions.RelationshipTypeId; import org.eclipse.winery.model.ids.definitions.RelationshipTypeImplementationId; import org.eclipse.winery.model.tosca.TExtensibleElements; -import org.eclipse.winery.model.tosca.TInterfaces; import org.eclipse.winery.model.tosca.TRelationshipType; import org.eclipse.winery.model.tosca.TRelationshipType.ValidSource; import org.eclipse.winery.model.tosca.TRelationshipType.ValidTarget; -import org.eclipse.winery.model.tosca.TTopologyElementInstanceStates; import org.eclipse.winery.repository.datatypes.ids.elements.DirectoryId; import org.eclipse.winery.repository.datatypes.ids.elements.GenericDirectoryId; import org.eclipse.winery.repository.rest.RestUtils; @@ -73,43 +71,35 @@ public VisualAppearanceResource getVisualAppearanceResource() { @Path("instancestates/") public InstanceStatesResource getInstanceStatesResource() { - TTopologyElementInstanceStates instanceStates = this.getRelationshipType().getInstanceStates(); - if (instanceStates == null) { + if (this.getRelationshipType().getInstanceStates() == null) { // if an explicit (empty) list does not exist, create it - instanceStates = new TTopologyElementInstanceStates(); - this.getRelationshipType().setInstanceStates(instanceStates); + this.getRelationshipType().setInstanceStates(new ArrayList<>()); } return new InstanceStatesResource(this.getRelationshipType().getInstanceStates(), this); } @Path("interfaces/") public InterfacesResource getInterfaces() { - TInterfaces interfaces = this.getRelationshipType().getInterfaces(); - if (interfaces == null) { - interfaces = new TInterfaces(); - this.getRelationshipType().setInterfaces(interfaces); + if (this.getRelationshipType().getInterfaces() == null) { + this.getRelationshipType().setInterfaces(new ArrayList<>()); } - return new InterfacesResource(this, interfaces.getInterface(), "yaml"); + return new InterfacesResource(this, this.getRelationshipType().getInterfaces(), "yaml"); } @Path("sourceinterfaces/") public InterfacesResource getSourceInterfaces() { - TInterfaces interfaces = this.getRelationshipType().getSourceInterfaces(); - if (interfaces == null) { - interfaces = new TInterfaces(); - this.getRelationshipType().setSourceInterfaces(interfaces); + if (this.getRelationshipType().getInterfaces() == null) { + this.getRelationshipType().setInterfaces(new ArrayList<>()); } - return new InterfacesResource(this, interfaces.getInterface(), "source"); + return new InterfacesResource(this, this.getRelationshipType().getSourceInterfaces(), "source"); } @Path("targetinterfaces/") public InterfacesResource getTargetInterfaces() { - TInterfaces interfaces = this.getRelationshipType().getTargetInterfaces(); - if (interfaces == null) { - interfaces = new TInterfaces(); - this.getRelationshipType().setTargetInterfaces(interfaces); + if (this.getRelationshipType().getInterfaces() == null) { + this.getRelationshipType().setInterfaces(new ArrayList<>()); } - return new InterfacesResource(this, interfaces.getInterface(), "target"); + return new InterfacesResource(this, this.getRelationshipType().getTargetInterfaces(), "target"); } @Path("interfacedefinitions") diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResource.java index 8fda075c16..013fff8d02 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/interfaces/InterfacesResource.java @@ -25,7 +25,6 @@ import javax.ws.rs.core.Response; import org.eclipse.winery.model.tosca.TInterface; -import org.eclipse.winery.model.tosca.TInterfaces; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TOperation; import org.eclipse.winery.model.tosca.TRelationshipType; @@ -52,12 +51,12 @@ public InterfacesResource(TopologyGraphElementEntityTypeResource res, List interfaceApiData) { if (!interfaceApiData.isEmpty()) { for (TInterface tInt : interfaceApiData) { - if (!tInt.getOperation().isEmpty()) { - for (TOperation tOp : tInt.getOperation()) { - if (tOp.getInputParameters() == null || tOp.getInputParameters().getInputParameter().isEmpty()) { + if (!tInt.getOperations().isEmpty()) { + for (TOperation tOp : tInt.getOperations()) { + if (tOp.getInputParameters() == null || tOp.getInputParameters().isEmpty()) { tOp.setInputParameters(null); } - if (tOp.getOutputParameters() == null || tOp.getOutputParameters().getOutputParameter().isEmpty()) { + if (tOp.getOutputParameters() == null || tOp.getOutputParameters().isEmpty()) { tOp.setOutputParameters(null); } } @@ -67,9 +66,7 @@ public Response onPost(List interfaceApiData) { } } - TInterfaces interfaces = new TInterfaces(); - interfaces.getInterface().clear(); - interfaces.getInterface().addAll(interfaceApiData); + List interfaces = new ArrayList<>(interfaceApiData); if (this.res instanceof RelationshipTypeResource) { TRelationshipType relationshipType = (TRelationshipType) this.res.getElement(); switch (this.interfaceType) { @@ -102,7 +99,7 @@ public List onGet(@QueryParam("selectData") String selectData) { List list = new ArrayList<>(); for (TInterface item : this.interfaces) { List ops = new ArrayList<>(); - for (TOperation op : item.getOperation()) { + for (TOperation op : item.getOperations()) { ops.add(op.getName()); } list.add(new InterfacesSelectApiData(item.getName(), ops)); diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResource.java index 011ad516c4..f4218b7c10 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResource.java @@ -19,8 +19,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; -import java.util.LinkedHashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -59,20 +59,17 @@ import org.eclipse.winery.model.tosca.TCapabilityRef; import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TInterface; -import org.eclipse.winery.model.tosca.TInterfaces; import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TNodeTemplate.Capabilities; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TOperation; import org.eclipse.winery.model.tosca.TParameter; -import org.eclipse.winery.model.tosca.TPlans; +import org.eclipse.winery.model.tosca.TPlan; import org.eclipse.winery.model.tosca.TPropertyMapping; import org.eclipse.winery.model.tosca.TRelationshipTemplate; import org.eclipse.winery.model.tosca.TRequirement; import org.eclipse.winery.model.tosca.TRequirementRef; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.constants.Namespaces; import org.eclipse.winery.model.tosca.constants.ToscaBaseTypes; @@ -81,20 +78,20 @@ import org.eclipse.winery.model.tosca.extensions.kvproperties.WinerysPropertiesDefinition; import org.eclipse.winery.model.tosca.utils.ModelUtilities; import org.eclipse.winery.repository.backend.BackendUtils; -import org.eclipse.winery.repository.backend.RepositoryFactory; import org.eclipse.winery.repository.backend.IRepository; import org.eclipse.winery.repository.backend.NamespaceManager; +import org.eclipse.winery.repository.backend.RepositoryFactory; import org.eclipse.winery.repository.backend.YamlArtifactsSynchronizer; import org.eclipse.winery.repository.driverspecificationandinjection.DASpecification; import org.eclipse.winery.repository.driverspecificationandinjection.DriverInjection; import org.eclipse.winery.repository.rest.RestUtils; -import org.eclipse.winery.repository.rest.resources.edmm.EdmmResource; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResourceContainingATopology; import org.eclipse.winery.repository.rest.resources._support.IHasName; import org.eclipse.winery.repository.rest.resources._support.ResourceResult; import org.eclipse.winery.repository.rest.resources._support.dataadapter.injectionadapter.InjectorReplaceData; import org.eclipse.winery.repository.rest.resources._support.dataadapter.injectionadapter.InjectorReplaceOptions; import org.eclipse.winery.repository.rest.resources.apiData.QNameApiData; +import org.eclipse.winery.repository.rest.resources.edmm.EdmmResource; import org.eclipse.winery.repository.rest.resources.servicetemplates.boundarydefinitions.BoundaryDefinitionsResource; import org.eclipse.winery.repository.rest.resources.servicetemplates.plans.PlansResource; import org.eclipse.winery.repository.rest.resources.servicetemplates.selfserviceportal.SelfServicePortalResource; @@ -145,18 +142,19 @@ public void setTopology(TTopologyTemplate topologyTemplate, String type) { } catch (IOException e) { LOGGER.error("Failed to delete yaml artifact files from disk. Reason {}", e.getMessage()); } - if (topologyTemplate.getNodeTemplates().stream().anyMatch(nt -> nt.getRequirements() != null - && nt.getRequirements().getRequirement().stream().anyMatch(req -> req.getRelationship() != null))) { + if (topologyTemplate.getNodeTemplates().stream() + .filter(nt -> nt.getRequirements() != null) + .anyMatch(nt -> nt.getRequirements().stream().anyMatch(req -> req.getRelationship() != null))) { // filter unused requirements // (1) get a list of requirement template ids // (2) filter requirement entry on node template if there is relations assigned Set usedRelationshipTemplateIds = topologyTemplate.getRelationshipTemplates() .stream().map(HasId::getId).collect(Collectors.toSet()); - topologyTemplate.getNodeTemplates().forEach(node -> { - if (node.getRequirements() == null) return; - node.getRequirements().getRequirement() - .removeIf(r -> !usedRelationshipTemplateIds.contains(r.getRelationship())); - }); + topologyTemplate.getNodeTemplates().stream() + .filter(node -> node.getRequirements() != null) + .forEach(node -> node.getRequirements() + .removeIf(r -> !usedRelationshipTemplateIds.contains(r.getRelationship())) + ); } } this.getServiceTemplate().setTopologyTemplate(topologyTemplate); @@ -166,12 +164,12 @@ public void setTopology(TTopologyTemplate topologyTemplate, String type) { private void cullElementReferences() { final TTopologyTemplate topology = this.getServiceTemplate().getTopologyTemplate(); TBoundaryDefinitions boundaryDefs = this.getServiceTemplate().getBoundaryDefinitions(); - if (boundaryDefs == null) { + if (topology == null || boundaryDefs == null) { return; } if (boundaryDefs.getProperties() != null && boundaryDefs.getProperties().getPropertyMappings() != null) { - for (Iterator it = boundaryDefs.getProperties().getPropertyMappings().getPropertyMapping().iterator(); it.hasNext(); ) { + for (Iterator it = boundaryDefs.getProperties().getPropertyMappings().iterator(); it.hasNext(); ) { TPropertyMapping propMapping = it.next(); HasId targetObject = propMapping.getTargetObjectRef(); if (!containsTarget(topology, targetObject)) { @@ -181,7 +179,7 @@ private void cullElementReferences() { } } if (boundaryDefs.getCapabilities() != null) { - for (Iterator it = boundaryDefs.getCapabilities().getCapability().iterator(); it.hasNext(); ) { + for (Iterator it = boundaryDefs.getCapabilities().iterator(); it.hasNext(); ) { TCapabilityRef ref = it.next(); TCapability target = ref.getRef(); if (!containsCapability(topology, target)) { @@ -191,7 +189,7 @@ private void cullElementReferences() { } } if (boundaryDefs.getRequirements() != null) { - for (Iterator it = boundaryDefs.getRequirements().getRequirement().iterator(); it.hasNext(); ) { + for (Iterator it = boundaryDefs.getRequirements().iterator(); it.hasNext(); ) { TRequirementRef ref = it.next(); TRequirement target = ref.getRef(); if (!containsRequirement(topology, target)) { @@ -210,13 +208,12 @@ private static boolean containsTarget(TTopologyTemplate topology, HasId target) private static boolean containsCapability(TTopologyTemplate topology, TCapability target) { return topology.getNodeTemplates().stream() .anyMatch(nt -> nt.getCapabilities() != null - && nt.getCapabilities().getCapability().contains(target)); + && nt.getCapabilities().contains(target)); } private static boolean containsRequirement(TTopologyTemplate topology, TRequirement target) { return topology.getNodeTemplates().stream() - .anyMatch(nt -> nt.getRequirements() != null - && nt.getRequirements().getRequirement().contains(target)); + .anyMatch(nt -> nt.getRequirements().contains(target)); } /** @@ -236,12 +233,12 @@ public TopologyTemplateResource getTopologyTemplateResource() { @Path("plans/") public PlansResource getPlansResource() { - TPlans plans = this.getServiceTemplate().getPlans(); + List plans = this.getServiceTemplate().getPlans(); if (plans == null) { - plans = new TPlans(); + plans = new ArrayList<>(); this.getServiceTemplate().setPlans(plans); } - return new PlansResource(plans.getPlan(), this); + return new PlansResource(plans, this); } @Path("selfserviceportal/") @@ -253,7 +250,7 @@ public SelfServicePortalResource getSelfServicePortalResource() { public BoundaryDefinitionsResource getBoundaryDefinitionsResource() { TBoundaryDefinitions boundaryDefinitions = this.getServiceTemplate().getBoundaryDefinitions(); if (boundaryDefinitions == null) { - boundaryDefinitions = new TBoundaryDefinitions(); + boundaryDefinitions = new TBoundaryDefinitions.Builder().build(); this.getServiceTemplate().setBoundaryDefinitions(boundaryDefinitions); } return new BoundaryDefinitionsResource(this, boundaryDefinitions); @@ -359,6 +356,9 @@ public Response getInjectorOptions() { public Response generatePlaceholdersWithCapability() { Splitting splitting = new Splitting(); TTopologyTemplate topologyTemplate = this.getServiceTemplate().getTopologyTemplate(); + if (topologyTemplate == null) { + return Response.notModified().build(); + } try { // get all open requirements and the respective node templates with open requirements @@ -376,21 +376,15 @@ public Response generatePlaceholdersWithCapability() { NodeTypeId id = new NodeTypeId(nodeTemplateWithOpenReq.getType()); TNodeType sourceNodeType = repo.getElement(id); - TInterfaces sourceNodeTypeInterfaces = sourceNodeType.getInterfaces(); + List sourceNodeTypeInterfaces = sourceNodeType.getInterfaces(); if (sourceNodeTypeInterfaces != null) { - for (TInterface tInterface : sourceNodeTypeInterfaces.getInterface()) { + for (TInterface tInterface : sourceNodeTypeInterfaces) { // TODO: make this more safe - for (TOperation tOperation : tInterface.getOperation()) { - TOperation.InputParameters inputParameters = tOperation.getInputParameters(); + for (TOperation tOperation : tInterface.getOperations()) { + List inputParameters = tOperation.getInputParameters(); if (inputParameters != null) { - for (TParameter inputParameter : inputParameters.getInputParameter()) { - PropertyDefinitionKV inputParamKV = new PropertyDefinitionKV(inputParameter.getName(), inputParameter.getType()); - if (sourceNodeType.getWinerysPropertiesDefinition() != null && - !sourceNodeType.getWinerysPropertiesDefinition().getPropertyDefinitions().contains(inputParamKV) - && !propertyDefinitionKVList.contains(inputParamKV)) { - propertyDefinitionKVList.add(inputParamKV); - placeholderNodeTemplateProperties.put(inputParameter.getName(), "get_input: " + inputParameter.getName()); - } + for (TParameter inputParameter : inputParameters) { + generateInputParameters(propertyDefinitionKVList, placeholderNodeTemplateProperties, sourceNodeType, inputParameter); } } } @@ -411,13 +405,7 @@ public Response generatePlaceholdersWithCapability() { } inputParameter.setName(inputParamName); - PropertyDefinitionKV inputParamKV = new PropertyDefinitionKV(inputParameter.getName(), inputParameter.getType()); - if (sourceNodeType.getWinerysPropertiesDefinition() != null && - !sourceNodeType.getWinerysPropertiesDefinition().getPropertyDefinitions().contains(inputParamKV) - && !propertyDefinitionKVList.contains(inputParamKV)) { - propertyDefinitionKVList.add(inputParamKV); - placeholderNodeTemplateProperties.put(inputParameter.getName(), "get_input: " + inputParameter.getName()); - } + generateInputParameters(propertyDefinitionKVList, placeholderNodeTemplateProperties, sourceNodeType, inputParameter); } // get required capability type of open requirement @@ -455,8 +443,12 @@ public Response generatePlaceholdersWithCapability() { TCapability capa = splitting.createPlaceholderCapability(topologyTemplate, capabilityType); ModelUtilities.setPropertiesKV(placeholderNodeTemplate, placeholderNodeTemplateProperties); - placeholderNodeTemplate.setCapabilities(new Capabilities()); - placeholderNodeTemplate.getCapabilities().getCapability().add(capa); + + if (placeholderNodeTemplate.getCapabilities() == null) { + placeholderNodeTemplate.setCapabilities(new ArrayList<>()); + } + placeholderNodeTemplate.getCapabilities().add(capa); + for (Map.Entry targetLocation : nodeTemplateWithOpenReq.getOtherAttributes().entrySet()) { placeholderNodeTemplate.getOtherAttributes().put(targetLocation.getKey(), targetLocation.getValue()); } @@ -476,6 +468,16 @@ public Response generatePlaceholdersWithCapability() { } } + private void generateInputParameters(List propertyDefinitionKVList, LinkedHashMap placeholderNodeTemplateProperties, TNodeType sourceNodeType, TParameter inputParameter) { + PropertyDefinitionKV inputParamKV = new PropertyDefinitionKV(inputParameter.getName(), inputParameter.getType()); + if (sourceNodeType.getWinerysPropertiesDefinition() != null && + !sourceNodeType.getWinerysPropertiesDefinition().getPropertyDefinitions().contains(inputParamKV) + && !propertyDefinitionKVList.contains(inputParamKV)) { + propertyDefinitionKVList.add(inputParamKV); + placeholderNodeTemplateProperties.put(inputParameter.getName(), "get_input: " + inputParameter.getName()); + } + } + @POST @Path("injector/replace") @Consumes( {MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) @@ -576,17 +578,21 @@ public ServiceTemplateId substitute() { @Produces( {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public Response createPlaceholderSubstituteVersion() throws IOException, SplittingException { TTopologyTemplate originTopologyTemplate = this.getServiceTemplate().getTopologyTemplate(); - TTags tagsOfServiceTemplate = this.getServiceTemplate().getTags(); + if (originTopologyTemplate == null) { + return Response.notModified().build(); + } + + List tagsOfServiceTemplate = this.getServiceTemplate().getTags(); List participants = originTopologyTemplate.getParticipants(); String participantId = ""; - TTags newTagList = new TTags(); - for (TTag tagOfServiceTemplate : tagsOfServiceTemplate.getTag()) { + List newTagList = new ArrayList<>(); + for (TTag tagOfServiceTemplate : tagsOfServiceTemplate) { if (tagOfServiceTemplate.getName().equals("participant")) { participantId = tagOfServiceTemplate.getValue(); - newTagList.getTag().add(tagOfServiceTemplate); + newTagList.add(tagOfServiceTemplate); } else if (!tagOfServiceTemplate.getName().equals("choreography")) { - newTagList.getTag().add(tagOfServiceTemplate); + newTagList.add(tagOfServiceTemplate); } } final String finalParticipantId = participantId; @@ -597,8 +603,12 @@ public Response createPlaceholderSubstituteVersion() throws IOException, Splitti //Multiple participants can be annotated on one node template Optional nodeOwners = ModelUtilities.getParticipant(tNodeTemplate); if (nodeOwners.isPresent() && nodeOwners.get().contains(finalParticipantId)) { - for (TRelationshipTemplate tRelationshipTemplate : ModelUtilities.getIncomingRelationshipTemplates(originTopologyTemplate, tNodeTemplate)) { - nodeTemplatesWithNewHost.add(ModelUtilities.getSourceNodeTemplateOfRelationshipTemplate(originTopologyTemplate, tRelationshipTemplate).getId()); + for (TRelationshipTemplate tRelationshipTemplate : + ModelUtilities.getIncomingRelationshipTemplates(originTopologyTemplate, tNodeTemplate)) { + nodeTemplatesWithNewHost.add( + ModelUtilities.getSourceNodeTemplateOfRelationshipTemplate(originTopologyTemplate, tRelationshipTemplate) + .getId() + ); } } } @@ -650,7 +660,7 @@ public Response createPlaceholderSubstituteVersion() throws IOException, Splitti choreoTag.setName("choreography"); choreoTag.setValue(choreoValue); - newTagList.getTag().add(choreoTag); + newTagList.add(choreoTag); newServiceTemplate.setTags(newTagList); repo.setElement(newId, newServiceTemplate); @@ -677,62 +687,57 @@ public List createParticipantsVersion() throws IOException { WineryVersion version = VersionUtils.getVersion(id.getXmlId().getDecoded()); TTopologyTemplate topologyTemplate = this.getTopology(); - TTags tagsOfServiceTemplate = this.getServiceTemplate().getTags(); - List tags = tagsOfServiceTemplate.getTag(); + List tags = new ArrayList<>(); Splitting splitting = new Splitting(); // iterate over tags of origin service template - for (OTParticipant participant : topologyTemplate.getParticipants()) { - // check if tag with partner in service template - WineryVersion newVersion = new WineryVersion( - participant.getName() + "-" + version.toString().replace("gdm", "ldm"), - 1, - 1 - ); - - List newParticipantList = new ArrayList<>(); - newParticipantList.addAll(topologyTemplate.getParticipants()); - - // create list of tags to add to service template - TTags tTagList = new TTags(); - tTagList.getTag().addAll(tags); - - // new tag to define participant of service template - TTag participantTag = new TTag(); - participantTag.setName("participant"); - participantTag.setValue(participant.getName()); - tTagList.getTag().add(participantTag); - - String choreoValue = splitting.calculateChoreographyTag(this.getServiceTemplate().getTopologyTemplate().getNodeTemplates(), participant.getName()); - TTag choreoTag = new TTag(); - choreoTag.setName("choreography"); - choreoTag.setValue(choreoValue); - tTagList.getTag().add(choreoTag); - ServiceTemplateId newId = new ServiceTemplateId(id.getNamespace().getDecoded(), - VersionUtils.getNameWithoutVersion(id.getXmlId().getDecoded()) + WineryVersion.WINERY_NAME_FROM_VERSION_SEPARATOR + newVersion.toString(), - false); - - if (repo.exists(newId)) { - repo.forceDelete(newId); - } + if (topologyTemplate.getParticipants() != null) { + for (OTParticipant participant : topologyTemplate.getParticipants()) { + // check if tag with partner in service template + WineryVersion newVersion = new WineryVersion( + participant.getName() + "-" + version.toString().replace("gdm", "ldm"), + 1, + 1 + ); + + List newParticipantList = new ArrayList<>(topologyTemplate.getParticipants()); + + // new tag to define participant of service template + tags.add( + new TTag.Builder("participant", participant.getName()) + .build() + ); + + String choreoValue = splitting.calculateChoreographyTag(this.getServiceTemplate().getTopologyTemplate().getNodeTemplates(), participant.getName()); + tags.add( + new TTag.Builder("choreography", choreoValue) + .build() + ); + + ServiceTemplateId newId = new ServiceTemplateId(id.getNamespace().getDecoded(), + VersionUtils.getNameWithoutVersion(id.getXmlId().getDecoded()) + WineryVersion.WINERY_NAME_FROM_VERSION_SEPARATOR + newVersion.toString(), + false); + + if (repo.exists(newId)) { + repo.forceDelete(newId); + } - ResourceResult response = RestUtils.duplicate(id, newId); + ResourceResult response = RestUtils.duplicate(id, newId); - if (response.getStatus() == Status.CREATED) { - response.setUri(null); - response.setMessage(new QNameApiData(newId)); - } + if (response.getStatus() == Status.CREATED) { + response.setUri(null); + response.setMessage(new QNameApiData(newId)); + } - TServiceTemplate tempServiceTempl = repo.getElement(newId); - // reset tags and set tags with respective entry - tempServiceTempl.setTags(null); - tempServiceTempl.setTags(tTagList); - tempServiceTempl.getTopologyTemplate().setParticipants(newParticipantList); + TServiceTemplate tempServiceTempl = repo.getElement(newId); + tempServiceTempl.setTags(tags); + tempServiceTempl.getTopologyTemplate().setParticipants(newParticipantList); - listOfResponses.add(response.getResponse()); - // set element to propagate changed tags - repo.setElement(newId, tempServiceTempl); + listOfResponses.add(response.getResponse()); + // set element to propagate changed tags + repo.setElement(newId, tempServiceTempl); + } } return listOfResponses; } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplatesResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplatesResource.java index 4436612e1f..9fa8db4f18 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplatesResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplatesResource.java @@ -38,7 +38,6 @@ import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.repository.backend.BackendUtils; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; @@ -57,8 +56,8 @@ public class ServiceTemplatesResource extends AbstractComponentsWithoutTypeRefer @Path("createfromartifact") @Produces(MediaType.APPLICATION_JSON) public CreateFromArtifactApiData getCreateFromArtifactData() { - Set artifactTypes = new HashSet(); - Set infrastructureNodeTypes = new HashSet(); + Set artifactTypes = new HashSet<>(); + Set infrastructureNodeTypes = new HashSet<>(); Collection templates = this.getAll(); for (AbstractComponentInstanceResource resource : templates) { @@ -67,18 +66,16 @@ public CreateFromArtifactApiData getCreateFromArtifactData() { if (stRes.getServiceTemplate().getTags() != null) { int check = 0; QName artifactType = null; - for (TTag tag : stRes.getServiceTemplate().getTags().getTag()) { + for (TTag tag : stRes.getServiceTemplate().getTags()) { switch (tag.getName()) { case "xaasPackageNode": + case "xaasPackageDeploymentArtifact": check++; break; case "xaasPackageArtifactType": check++; artifactType = QName.valueOf(tag.getValue()); break; - case "xaasPackageDeploymentArtifact": - check++; - break; case "xaasPackageInfrastructure": // optional tag, hence no check++ infrastructureNodeTypes.add(QName.valueOf(tag.getValue())); @@ -99,7 +96,7 @@ public CreateFromArtifactApiData getCreateFromArtifactData() { @Consumes(MediaType.MULTIPART_FORM_DATA) public Response createFromArtifact(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail, - @FormDataParam("file") FormDataBodyPart body, + @FormDataParam("file") FormDataBodyPart body, @FormDataParam("artifactType") QName artifactType, @FormDataParam("nodeTypes") List nodeTypesList, @FormDataParam("infrastructureNodeType") QName infrastructureNodeType, @@ -125,7 +122,7 @@ public Response createFromArtifact(@FormDataParam("file") InputStream uploadedIn nodeTypes = RestUtils.cleanQNameSet(nodeTypes); Collection xaasPackages = this.getXaaSPackageTemplates(artifactType); - Collection toRemove = new ArrayList(); + Collection toRemove = new ArrayList<>(); // check whether the serviceTemplate contains all the given nodeTypes for (ServiceTemplateId serviceTemplate : xaasPackages) { @@ -138,10 +135,12 @@ public Response createFromArtifact(@FormDataParam("file") InputStream uploadedIn toRemove.add(serviceTemplate); } else { String value = RestUtils.getTagValue(new ServiceTemplateResource(serviceTemplate).getServiceTemplate(), "xaasPackageInfrastructure"); - String localName = value.split("}")[1]; - String namespace = value.split("}")[0].substring(1); - if (!infrastructureNodeType.equals(new QName(namespace, localName))) { - toRemove.add(serviceTemplate); + if (value != null) { + String localName = value.split("}")[1]; + String namespace = value.split("}")[0].substring(1); + if (!infrastructureNodeType.equals(new QName(namespace, localName))) { + toRemove.add(serviceTemplate); + } } } } @@ -183,12 +182,17 @@ public Response createFromArtifact(@FormDataParam("file") InputStream uploadedIn } private Collection getXaaSPackageTemplates(QName artifactType) { - Collection xaasPackages = new ArrayList(); + Collection xaasPackages = new ArrayList<>(); for (ServiceTemplateId serviceTemplate : this.getXaaSPackageTemplates()) { - String artifactTypeTagValue = RestUtils.getTagValue(new ServiceTemplateResource(serviceTemplate).getServiceTemplate(), "xaasPackageArtifactType"); - QName taggedArtifactType = QName.valueOf(artifactTypeTagValue); - if (taggedArtifactType.equals(artifactType)) { - xaasPackages.add(serviceTemplate); + String artifactTypeTagValue = RestUtils.getTagValue( + new ServiceTemplateResource(serviceTemplate).getServiceTemplate(), + "xaasPackageArtifactType" + ); + if (artifactTypeTagValue != null) { + QName taggedArtifactType = QName.valueOf(artifactTypeTagValue); + if (taggedArtifactType.equals(artifactType)) { + xaasPackages.add(serviceTemplate); + } } } return xaasPackages; @@ -196,19 +200,19 @@ private Collection getXaaSPackageTemplates(QName artifactType private Collection getXaaSPackageTemplates() { Collection templates = this.getAll(); - Collection xaasPackages = new ArrayList(); + Collection xaasPackages = new ArrayList<>(); for (AbstractComponentInstanceResource resource : templates) { if (resource instanceof ServiceTemplateResource) { ServiceTemplateResource stRes = (ServiceTemplateResource) resource; - TTags tags = stRes.getServiceTemplate().getTags(); + List tags = stRes.getServiceTemplate().getTags(); if (tags == null) { continue; } int check = 0; - for (TTag tag : tags.getTag()) { + for (TTag tag : tags) { switch (tag.getName()) { case "xaasPackageNode": case "xaasPackageArtifactType": diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/BoundaryDefinitionsJSPData.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/BoundaryDefinitionsJSPData.java index 71953c4b9e..2671690d6e 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/BoundaryDefinitionsJSPData.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/BoundaryDefinitionsJSPData.java @@ -14,10 +14,10 @@ package org.eclipse.winery.repository.rest.resources.servicetemplates.boundarydefinitions; import java.net.URI; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.SortedSet; +import java.util.stream.Collectors; import javax.xml.namespace.QName; @@ -25,7 +25,6 @@ import org.eclipse.winery.model.tosca.TBoundaryDefinitions; import org.eclipse.winery.model.tosca.TBoundaryDefinitions.Properties; import org.eclipse.winery.model.tosca.TPlan; -import org.eclipse.winery.model.tosca.TPlans; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.utils.ModelUtilities; import org.eclipse.winery.repository.backend.BackendUtils; @@ -48,7 +47,6 @@ public class BoundaryDefinitionsJSPData { /** * @param ste the service template of the boundary definitions. Required to get a list of all plans * @param baseURI the base URI of the service. Requried for rendering the topology template for the selections - * @param repository */ public BoundaryDefinitionsJSPData(TServiceTemplate ste, URI baseURI, IRepository repository) { this.ste = ste; @@ -117,19 +115,14 @@ public String getRepositoryURL() { return this.baseURI.toString(); } - public List getlistOfAllPlans() { - TPlans plans = this.ste.getPlans(); + public List getListOfAllPlans() { + List plans = this.ste.getPlans(); if (plans == null) { return null; - } else { - List res = new ArrayList<>(plans.getPlan().size()); - for (TPlan plan : plans.getPlan()) { - String id = plan.getId(); - String name = ModelUtilities.getNameWithIdFallBack(plan); - Select2DataItem di = new Select2DataItem(id, name); - res.add(di); - } - return res; } + + return plans.stream() + .map(plan -> new Select2DataItem(plan.getId(), plan.getName())) + .collect(Collectors.toList()); } } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/BoundaryDefinitionsResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/BoundaryDefinitionsResource.java index 6064bb32a7..51f71625ae 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/BoundaryDefinitionsResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/BoundaryDefinitionsResource.java @@ -14,6 +14,7 @@ package org.eclipse.winery.repository.rest.resources.servicetemplates.boundarydefinitions; +import java.util.ArrayList; import java.util.List; import javax.ws.rs.Consumes; @@ -26,14 +27,13 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TBoundaryDefinitions; -import org.eclipse.winery.model.tosca.TBoundaryDefinitions.Capabilities; -import org.eclipse.winery.model.tosca.TBoundaryDefinitions.Interfaces; import org.eclipse.winery.model.tosca.TBoundaryDefinitions.Properties; -import org.eclipse.winery.model.tosca.TBoundaryDefinitions.Properties.PropertyMappings; -import org.eclipse.winery.model.tosca.TBoundaryDefinitions.Requirements; import org.eclipse.winery.model.tosca.TCapabilityRef; +import org.eclipse.winery.model.tosca.TExportedInterface; +import org.eclipse.winery.model.tosca.TPolicy; +import org.eclipse.winery.model.tosca.TPropertyConstraint; +import org.eclipse.winery.model.tosca.TPropertyMapping; import org.eclipse.winery.model.tosca.TRequirementRef; import org.eclipse.winery.model.tosca.utils.ModelUtilities; import org.eclipse.winery.repository.backend.IRepository; @@ -91,7 +91,8 @@ public String getProperties(@Context UriInfo uriInfo) { /** * The well-formedness of the XML element is done using the framework. If you see [Fatal Error] :1:19: The - * prefix "tosca" for element "tosca:properties" is not bound. in the console, it is an indicator that the XML element is not well-formed. + * prefix "tosca" for element "tosca:properties" is not bound. in the console, it is an indicator that the + * XML element is not well-formed. */ @Path("properties/") @PUT @@ -104,41 +105,38 @@ public Response putProperties(@ApiParam(value = "Stored properties. The XSD allo } @Path("requirements/") - public RequirementsResource getRequiremensResource() { - Requirements requirements = this.boundaryDefinitions.getRequirements(); + public RequirementsResource getRequirementsResource() { + List requirements = this.boundaryDefinitions.getRequirements(); if (requirements == null) { - requirements = new Requirements(); + requirements = new ArrayList<>(); this.boundaryDefinitions.setRequirements(requirements); } - List refs = requirements.getRequirement(); - return new RequirementsResource(this.serviceTemplateResource, refs); + return new RequirementsResource(this.serviceTemplateResource, requirements); } @Path("capabilities/") public CapabilitiesResource getCapabilitiesResource() { - Capabilities caps = this.boundaryDefinitions.getCapabilities(); + List caps = this.boundaryDefinitions.getCapabilities(); if (caps == null) { - caps = new Capabilities(); + caps = new ArrayList<>(); this.boundaryDefinitions.setCapabilities(caps); } - List refs = caps.getCapability(); - return new CapabilitiesResource(this.serviceTemplateResource, refs); + return new CapabilitiesResource(this.serviceTemplateResource, caps); } @Path("policies/") public PoliciesResource getPoliciesResource() { - TPolicies policies = this.boundaryDefinitions.getPolicies(); + List policies = this.boundaryDefinitions.getPolicies(); if (policies == null) { - policies = new TPolicies(); + policies = new ArrayList<>(); this.boundaryDefinitions.setPolicies(policies); } - return new PoliciesResource(policies.getPolicy(), this.serviceTemplateResource); + return new PoliciesResource(policies, this.serviceTemplateResource); } /** - * This path is below "boundary definitions" to ease implementation If it - * was modeled following the XSD, it would have been nested below - * "properties". We did not do that + * This path is below "boundary definitions" to ease implementation If it was modeled following the XSD, it would + * have been nested below "properties". We did not do that */ @Path("propertymappings/") public PropertyMappingsResource getPropertyMappings() { @@ -147,9 +145,9 @@ public PropertyMappingsResource getPropertyMappings() { properties = new Properties(); this.boundaryDefinitions.setProperties(properties); } - PropertyMappings propertyMappings = properties.getPropertyMappings(); + List propertyMappings = properties.getPropertyMappings(); if (propertyMappings == null) { - propertyMappings = new PropertyMappings(); + propertyMappings = new ArrayList<>(); properties.setPropertyMappings(propertyMappings); } return new PropertyMappingsResource(propertyMappings, this.serviceTemplateResource); @@ -157,9 +155,9 @@ public PropertyMappingsResource getPropertyMappings() { @Path("propertyconstraints") public PropertyConstraintsResource getPropertyConstraints() { - TBoundaryDefinitions.PropertyConstraints constraints = this.boundaryDefinitions.getPropertyConstraints(); + List constraints = this.boundaryDefinitions.getPropertyConstraints(); if (constraints == null) { - constraints = new TBoundaryDefinitions.PropertyConstraints(); + constraints = new ArrayList<>(); this.boundaryDefinitions.setPropertyConstraints(constraints); } return new PropertyConstraintsResource(constraints, this.serviceTemplateResource); @@ -167,11 +165,11 @@ public PropertyConstraintsResource getPropertyConstraints() { @Path("interfaces/") public InterfacesResource getInterfacesResource() { - Interfaces interfaces = this.boundaryDefinitions.getInterfaces(); + List interfaces = this.boundaryDefinitions.getInterfaces(); if (interfaces == null) { - interfaces = new Interfaces(); + interfaces = new ArrayList<>(); this.boundaryDefinitions.setInterfaces(interfaces); } - return new InterfacesResource(interfaces.getInterface(), this.serviceTemplateResource); + return new InterfacesResource(interfaces, this.serviceTemplateResource); } } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/PropertyConstraintsResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/PropertyConstraintsResource.java index b624246e8b..947ff96a13 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/PropertyConstraintsResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/PropertyConstraintsResource.java @@ -15,9 +15,9 @@ package org.eclipse.winery.repository.rest.resources.servicetemplates.boundarydefinitions; import java.io.IOException; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -31,14 +31,11 @@ import javax.ws.rs.core.Response.Status; import org.eclipse.winery.model.ids.EncodingUtil; -import org.eclipse.winery.model.tosca.TBoundaryDefinitions; -import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TPropertyConstraint; import org.eclipse.winery.model.tosca.utils.ModelUtilities; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResource; import org.eclipse.winery.repository.rest.resources.apiData.boundarydefinitions.PropertyConstraintsApiData; -import org.eclipse.winery.repository.rest.resources.servicetemplates.ServiceTemplateResource; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -48,35 +45,20 @@ public class PropertyConstraintsResource { private static final Logger LOGGER = LoggerFactory.getLogger(PropertyConstraintsResource.class); - private final TBoundaryDefinitions.PropertyConstraints propertyConstraints; - private final TEntityTemplate.PropertyConstraints entityPropertyConstraints; + private final List propertyConstraints; private final AbstractComponentInstanceResource res; - private final boolean isEntitytemplate; - public PropertyConstraintsResource(TBoundaryDefinitions.PropertyConstraints propertyConstraints, ServiceTemplateResource res) { + public PropertyConstraintsResource(List propertyConstraints, AbstractComponentInstanceResource res) { this.propertyConstraints = propertyConstraints; this.res = res; - this.entityPropertyConstraints = null; - this.isEntitytemplate = false; - } - - public PropertyConstraintsResource(TEntityTemplate.PropertyConstraints propertyConstraints, AbstractComponentInstanceResource res) { - this.res = res; - this.propertyConstraints = null; - this.entityPropertyConstraints = propertyConstraints; - this.isEntitytemplate = true; } @Path("{id}") @DELETE public Response onDelete(@PathParam("id") String id) { id = EncodingUtil.URLdecode(id); - Iterator iterator; - if (isEntitytemplate) { - iterator = this.entityPropertyConstraints.getPropertyConstraint().iterator(); - } else { - iterator = this.propertyConstraints.getPropertyConstraint().iterator(); - } + Iterator iterator = this.propertyConstraints.iterator(); + while (iterator.hasNext()) { TPropertyConstraint propertyConstraint = iterator.next(); if (propertyConstraint.getProperty().equals(id)) { @@ -109,27 +91,16 @@ public Response onPost(PropertyConstraintsApiData constraintsApiData) { return Response.notAcceptable(null).build(); } propertyConstraint.setConstraintType(constraintsApiData.getConstraintType()); - if (isEntitytemplate) { - this.entityPropertyConstraints.getPropertyConstraint().add(propertyConstraint); - } else { - this.propertyConstraints.getPropertyConstraint().add(propertyConstraint); - } + this.propertyConstraints.add(propertyConstraint); + return RestUtils.persist(this.res); } @GET @Produces(MediaType.APPLICATION_JSON) public List onGet() { - List apiDatas = new ArrayList<>(); - if (isEntitytemplate) { - for (TPropertyConstraint propertyConstraint: this.entityPropertyConstraints.getPropertyConstraint()) { - apiDatas.add(new PropertyConstraintsApiData(propertyConstraint)); - } - } else { - for (TPropertyConstraint propertyConstraint: this.propertyConstraints.getPropertyConstraint()) { - apiDatas.add(new PropertyConstraintsApiData(propertyConstraint)); - } - } - return apiDatas; + return this.propertyConstraints.stream() + .map(PropertyConstraintsApiData::new) + .collect(Collectors.toList()); } } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/PropertyMappingsResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/PropertyMappingsResource.java index 66bb14811d..9017dbc303 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/PropertyMappingsResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/PropertyMappingsResource.java @@ -14,6 +14,7 @@ package org.eclipse.winery.repository.rest.resources.servicetemplates.boundarydefinitions; import java.util.Iterator; +import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -29,7 +30,6 @@ import javax.ws.rs.core.UriInfo; import org.eclipse.winery.model.ids.EncodingUtil; -import org.eclipse.winery.model.tosca.TBoundaryDefinitions.Properties.PropertyMappings; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TPropertyMapping; import org.eclipse.winery.model.tosca.utils.ModelUtilities; @@ -43,11 +43,10 @@ public class PropertyMappingsResource { - private final PropertyMappings propertyMappings; + private final List propertyMappings; private final ServiceTemplateResource res; - - public PropertyMappingsResource(PropertyMappings propertyMappings, ServiceTemplateResource res) { + public PropertyMappingsResource(List propertyMappings, ServiceTemplateResource res) { this.propertyMappings = propertyMappings; this.res = res; } @@ -62,7 +61,7 @@ public PropertyMappingsApi getJSON(@Context UriInfo uriInfo) { @DELETE public Response onDelete(@PathParam("serviceTemplatePropertyRef") String serviceTemplatePropertyRef) { serviceTemplatePropertyRef = EncodingUtil.URLdecode(serviceTemplatePropertyRef); - Iterator iterator = this.propertyMappings.getPropertyMapping().iterator(); + Iterator iterator = this.propertyMappings.iterator(); while (iterator.hasNext()) { TPropertyMapping propertyMapping = iterator.next(); if (propertyMapping.getServiceTemplatePropertyRef().equals(serviceTemplatePropertyRef)) { @@ -103,7 +102,7 @@ public Response onPost(PropertyMapping apiPropertyMapping) { } // replace propertyMapping if it exists - for (TPropertyMapping propertyMapping : this.propertyMappings.getPropertyMapping()) { + for (TPropertyMapping propertyMapping : this.propertyMappings) { if (propertyMapping.getServiceTemplatePropertyRef().equals(apiPropertyMapping.serviceTemplatePropertyRef)) { // we found a property with the same mapping // just update it ... @@ -115,9 +114,14 @@ public Response onPost(PropertyMapping apiPropertyMapping) { // the property mapping didn't exist, // we create a new one - TPropertyMapping newPropertyMapping = new TPropertyMapping(); - this.updatePropertyMapping(newPropertyMapping, apiPropertyMapping.serviceTemplatePropertyRef, template, apiPropertyMapping.targetPropertyRef); - this.propertyMappings.getPropertyMapping().add(newPropertyMapping); + this.propertyMappings.add( + new TPropertyMapping( + apiPropertyMapping.serviceTemplatePropertyRef, + template, + apiPropertyMapping.targetPropertyRef + ) + ); + return RestUtils.persist(this.res); } } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/interfaces/InterfacesResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/interfaces/InterfacesResource.java index bac797505e..dee785bff0 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/interfaces/InterfacesResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/interfaces/InterfacesResource.java @@ -14,18 +14,27 @@ package org.eclipse.winery.repository.rest.resources.servicetemplates.boundarydefinitions.interfaces; -import org.eclipse.winery.model.tosca.*; +import java.util.Arrays; +import java.util.List; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.eclipse.winery.model.tosca.TExportedInterface; +import org.eclipse.winery.model.tosca.TExportedOperation; +import org.eclipse.winery.model.tosca.TNodeTemplate; +import org.eclipse.winery.model.tosca.TPlan; +import org.eclipse.winery.model.tosca.TRelationshipTemplate; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.IPersistable; import org.eclipse.winery.repository.rest.resources._support.collections.withid.EntityWithIdCollectionResource; import org.eclipse.winery.repository.rest.resources.servicetemplates.ServiceTemplateResource; -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.util.Arrays; -import java.util.List; - public class InterfacesResource extends EntityWithIdCollectionResource { public InterfacesResource(List list, IPersistable res) { @@ -38,8 +47,8 @@ public String getId(TExportedInterface entity) { } /** - * A special handling for TExportedInterface is required as this object uses IDREF, which must not be a string, - * but the real object when persisting. + * A special handling for TExportedInterface is required as this object uses IDREF, which must not be a string, but + * the real object when persisting. */ @POST @Consumes(MediaType.APPLICATION_JSON) @@ -77,7 +86,6 @@ public Response onPost(TExportedInterface[] exportedInterfacesList) { final TPlan planTemplate = ((ServiceTemplateResource) res).getServiceTemplate() .getPlans() - .getPlan() .stream() .filter(relationship -> relationship.getId().contentEquals(planRef)) .findFirst() diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/plans/PlanResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/plans/PlanResource.java index 2ce14f69fc..0b9c0cfe76 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/plans/PlanResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/plans/PlanResource.java @@ -15,6 +15,7 @@ package org.eclipse.winery.repository.rest.resources.servicetemplates.plans; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import javax.ws.rs.DELETE; @@ -29,9 +30,8 @@ import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; import org.eclipse.winery.model.ids.elements.PlanId; import org.eclipse.winery.model.ids.elements.PlansId; +import org.eclipse.winery.model.tosca.TParameter; import org.eclipse.winery.model.tosca.TPlan; -import org.eclipse.winery.model.tosca.TPlan.InputParameters; -import org.eclipse.winery.model.tosca.TPlan.OutputParameters; import org.eclipse.winery.repository.backend.RepositoryFactory; import org.eclipse.winery.repository.rest.RestUtils; import org.eclipse.winery.repository.rest.resources._support.IHasName; @@ -43,14 +43,12 @@ import org.slf4j.LoggerFactory; /** - * Does not implement {@link org.eclipse.winery.repository.resources.IHasTypeReference}, because the type of a - * plan is outside the system of TOSCA. + * Does not implement a type reference, because the plan type is outside the system of TOSCA. */ public class PlanResource extends EntityWithIdResource implements IHasName { private static final Logger LOGGER = LoggerFactory.getLogger(PlanResource.class); - public PlanResource(IIdDetermination idDetermination, TPlan o, int idx, List list, ServiceTemplateResource res) { super(idDetermination, o, idx, list, res); } @@ -152,21 +150,21 @@ public Response setLanguage(@FormParam("language") String language) { @Path("inputparameters/") public ParametersResource getInputParametersResource() { - InputParameters inputParameters = this.o.getInputParameters(); + List inputParameters = this.o.getInputParameters(); if (inputParameters == null) { - inputParameters = new InputParameters(); + inputParameters = new ArrayList<>(); this.o.setInputParameters(inputParameters); } - return new ParametersResource(inputParameters.getInputParameter(), this.getServiceTemplateResource()); + return new ParametersResource(inputParameters, this.getServiceTemplateResource()); } @Path("outputparameters/") public ParametersResource getOutputParametersResource() { - OutputParameters outputParameters = this.o.getOutputParameters(); + List outputParameters = this.o.getOutputParameters(); if (outputParameters == null) { - outputParameters = new OutputParameters(); + outputParameters = new ArrayList<>(); this.o.setOutputParameters(outputParameters); } - return new ParametersResource(outputParameters.getOutputParameter(), this.getServiceTemplateResource()); + return new ParametersResource(outputParameters, this.getServiceTemplateResource()); } } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/NodeTemplateResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/NodeTemplateResource.java index deb05315ec..725991d0e1 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/NodeTemplateResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/NodeTemplateResource.java @@ -15,6 +15,7 @@ import java.io.InputStream; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -43,7 +44,6 @@ import org.eclipse.winery.common.version.VersionUtils; import org.eclipse.winery.common.version.WineryVersion; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.constants.Namespaces; import org.eclipse.winery.model.tosca.constants.OpenToscaBaseTypes; @@ -136,7 +136,7 @@ public Response setMaxInstances(@FormParam(value = "maxInstances") String maxIns /* * * * The visual appearance * - * We do not use a subresource "visualappearance" here to avoid generation of more objects + * We do not use a subresource "visual-appearance" here to avoid generation of more objects * * */ @Path("x") @@ -190,14 +190,14 @@ public Response createStateElement(@FormDataParam("file") InputStream uploadedIn // create DA Optional stateDeploymentArtifact = this.getDeploymentArtifacts().getDeploymentArtifacts().stream() + .filter(artifact -> artifact.getArtifactType() != null) .filter(artifact -> artifact.getArtifactType().equals(OpenToscaBaseTypes.stateArtifactType)) .findFirst(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss"); - TDeploymentArtifact deploymentArtifact = new TDeploymentArtifact(); - deploymentArtifact.setArtifactType(OpenToscaBaseTypes.stateArtifactType); - deploymentArtifact.setName("state"); + TDeploymentArtifact deploymentArtifact = new TDeploymentArtifact.Builder("state", OpenToscaBaseTypes.stateArtifactType) + .build(); String componentVersion = dateFormat.format(new Date()); ArtifactTemplateId newArtifactTemplateId = new ArtifactTemplateId( @@ -227,13 +227,13 @@ public Response createStateElement(@FormDataParam("file") InputStream uploadedIn ); } else { LOGGER.debug("Creating the state DA of the Node Template..."); - TDeploymentArtifacts list = this.nodeTemplate.getDeploymentArtifacts(); + List list = this.nodeTemplate.getDeploymentArtifacts(); if (Objects.isNull(list)) { - list = new TDeploymentArtifacts(); + list = new ArrayList<>(); this.nodeTemplate.setDeploymentArtifacts(list); } - list.getDeploymentArtifact().add(deploymentArtifact); + list.add(deploymentArtifact); } new ArtifactTemplatesResource() diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/RefinementTopologyTemplateResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/RefinementTopologyTemplateResource.java index 03a9c89b5f..8f82583bbc 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/RefinementTopologyTemplateResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/RefinementTopologyTemplateResource.java @@ -37,7 +37,8 @@ import org.eclipse.winery.repository.rest.resources._support.AbstractComponentInstanceResourceContainingATopology; public class RefinementTopologyTemplateResource extends TopologyTemplateResource { - private static TTopologyTemplate prmModellingTopologyTemplate = new TTopologyTemplate(); + + private static final TTopologyTemplate prmModellingTopologyTemplate = new TTopologyTemplate.Builder().build(); /** * A topology template is always nested in a service template @@ -55,22 +56,20 @@ private void createPrmTopologyTemplate(OTRefinementModel refinementModel) { final int setPointRefinementAvg = 1330; int dAvg = nodesPositionAverage(refinementModel.getDetector().getNodeTemplates()); int rAvg = nodesPositionAverage(refinementModel.getRefinementTopology().getNodeTemplates()); - prmModellingTopologyTemplate.setNodeTemplates(new ArrayList()); - prmModellingTopologyTemplate.setRelationshipTemplates(new ArrayList()); + prmModellingTopologyTemplate.setNodeTemplates(new ArrayList<>()); + prmModellingTopologyTemplate.setRelationshipTemplates(new ArrayList<>()); for (TNodeTemplate nodeTemplate : refinementModel.getDetector().getNodeTemplates()) { - TNodeTemplate newNodeTemplate = nodeTemplate; - int oldX = Integer.parseInt(newNodeTemplate.getX()); + int oldX = nodeTemplate.getX() == null ? 0 : Integer.parseInt(nodeTemplate.getX()); int newX = setPointDetectorAvg + (oldX - dAvg) / 2; - newNodeTemplate.setX(String.valueOf(newX)); - prmModellingTopologyTemplate.addNodeTemplate(newNodeTemplate); + nodeTemplate.setX(String.valueOf(newX)); + prmModellingTopologyTemplate.addNodeTemplate(nodeTemplate); } for (TNodeTemplate nodeTemplate : refinementModel.getRefinementTopology().getNodeTemplates()) { - TNodeTemplate newNodeTemplate = nodeTemplate; - int oldX = Integer.parseInt(newNodeTemplate.getX()); + int oldX = nodeTemplate.getX() == null ? 0 : Integer.parseInt(nodeTemplate.getX()); int newX = setPointRefinementAvg + (oldX - rAvg) / 2; - newNodeTemplate.setX(String.valueOf(newX)); - prmModellingTopologyTemplate.addNodeTemplate(newNodeTemplate); + nodeTemplate.setX(String.valueOf(newX)); + prmModellingTopologyTemplate.addNodeTemplate(nodeTemplate); } for (TRelationshipTemplate relationshipTemplate : refinementModel.getDetector().getRelationshipTemplates()) { prmModellingTopologyTemplate.addRelationshipTemplate(relationshipTemplate); @@ -84,7 +83,7 @@ private void createPrmTopologyTemplate(OTRefinementModel refinementModel) { private int nodesPositionAverage(List nodeTemplates) { int sum = 0; for (TNodeTemplate nodeTemplate : nodeTemplates) { - sum += Integer.parseInt(nodeTemplate.getX()); + sum += nodeTemplate.getX() == null ? 0 : Integer.parseInt(nodeTemplate.getX()); } if (nodeTemplates.size() > 0) { return sum / nodeTemplates.size(); @@ -98,11 +97,13 @@ private int nodesPositionAverage(List nodeTemplates) { */ private void createRelationshipsForMappings(OTRefinementModel refinementModel) { for (OTPrmMapping mapping : getAllMappings(refinementModel)) { - TRelationshipTemplate.SourceOrTargetElement sourceElement = new TRelationshipTemplate.SourceOrTargetElement(); - sourceElement.setRef(new TNodeTemplate(mapping.getDetectorElement().getId())); - TRelationshipTemplate.SourceOrTargetElement targetElement = new TRelationshipTemplate.SourceOrTargetElement(); - targetElement.setRef(new TNodeTemplate(mapping.getRefinementElement().getId())); - TRelationshipTemplate.Builder builder = new TRelationshipTemplate.Builder("con_" + mapping.getId(), QName.valueOf("{http://opentosca.org/prmMappingTypes}" + mapping.getId().substring(0, mapping.getId().indexOf("_"))), sourceElement, targetElement); + TRelationshipTemplate.Builder builder = new TRelationshipTemplate.Builder( + "con_" + mapping.getId(), + QName.valueOf("{http://opentosca.org/prmMappingTypes}" + mapping.getId().substring(0, mapping.getId().indexOf("_"))), + new TNodeTemplate(mapping.getDetectorElement().getId()), + new TNodeTemplate(mapping.getRefinementElement().getId()) + ); + if (mapping instanceof OTPermutationMapping) { builder.setName("PermutationMapping"); } @@ -153,14 +154,21 @@ private void createRelationshipsForMappings(OTRefinementModel refinementModel) { } private List getAllMappings(OTRefinementModel refinementModel) { - List allPrmMappings = new ArrayList<>(); - allPrmMappings.addAll(refinementModel.getRelationMappings()); + List allPrmMappings = new ArrayList<>(refinementModel.getRelationMappings()); if (refinementModel instanceof OTTopologyFragmentRefinementModel) { OTTopologyFragmentRefinementModel model = (OTTopologyFragmentRefinementModel) refinementModel; - allPrmMappings.addAll(model.getAttributeMappings()); - allPrmMappings.addAll(model.getStayMappings()); - allPrmMappings.addAll(model.getDeploymentArtifactMappings()); - allPrmMappings.addAll(model.getPermutationMappings()); + if (model.getAttributeMappings() != null) { + allPrmMappings.addAll(model.getAttributeMappings()); + } + if (model.getStayMappings() != null) { + allPrmMappings.addAll(model.getStayMappings()); + } + if (model.getDeploymentArtifactMappings() != null) { + allPrmMappings.addAll(model.getDeploymentArtifactMappings()); + } + if (model.getPermutationMappings() != null) { + allPrmMappings.addAll(model.getPermutationMappings()); + } if (model instanceof OTPatternRefinementModel) { allPrmMappings.addAll(((OTPatternRefinementModel) model).getBehaviorPatternMappings()); } diff --git a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResource.java b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResource.java index c44412c6c7..743564196b 100644 --- a/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResource.java +++ b/org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResource.java @@ -474,7 +474,7 @@ public ArrayList getAvailableFeatures() { String deploymentTechnology = null; if (this.parent.getElement() instanceof HasTags && ((HasTags) this.parent.getElement()).getTags() != null) { - for (TTag tag : ((HasTags) this.parent.getElement()).getTags().getTag()) { + for (TTag tag : ((HasTags) this.parent.getElement()).getTags()) { // To enable the usage of "technology" and "technologies", we only check for "technolog" if (tag.getName().toLowerCase().contains("deploymentTechnolog".toLowerCase())) { deploymentTechnology = tag.getValue(); diff --git a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/AbstractResourceTest.java b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/AbstractResourceTest.java index 9c27f4b5b8..c54a7c5171 100644 --- a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/AbstractResourceTest.java +++ b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/AbstractResourceTest.java @@ -136,7 +136,7 @@ public void assertGet(String restURL, String fileName) { .get(callURL(restURL)) .then() .log() - .ifValidationFails() + .all() .statusCode(200) .extract() .response() diff --git a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytemplates/artifacttemplates/ArtifactTemplateResourceTest.java b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytemplates/artifacttemplates/ArtifactTemplateResourceTest.java index 0d81b6b362..5fc104ecf4 100644 --- a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytemplates/artifacttemplates/ArtifactTemplateResourceTest.java +++ b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytemplates/artifacttemplates/ArtifactTemplateResourceTest.java @@ -91,6 +91,7 @@ public void artifactTemplateContainsUpdatedFileReferenceInJson() throws Exceptio final Path path = MavenTestingUtils.getProjectFilePath("src/test/resources/entitytemplates/artifacttemplates/empty_text_file.txt"); this.assertPost("artifacttemplates/http%253A%252F%252Fopentosca.org%252Fartifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson/files", path); - this.assertGet("artifacttemplates/http%253A%252F%252Fopentosca.org%252Fartifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson", "entitytemplates/artifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson-withFile.json"); + this.assertGet("artifacttemplates/http%253A%252F%252Fopentosca.org%252Fartifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson", + "entitytemplates/artifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson-withFile.json"); } } diff --git a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/nodetypeimplementations/NodeTypeImplementationResourceTest.java b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/nodetypeimplementations/NodeTypeImplementationResourceTest.java index b2c0f37c55..a5bff7966d 100644 --- a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/nodetypeimplementations/NodeTypeImplementationResourceTest.java +++ b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytypeimplementations/nodetypeimplementations/NodeTypeImplementationResourceTest.java @@ -43,7 +43,10 @@ public void nodeTypeImplementationResourceImplementationArtifactsCreation() thro this.setRevisionTo("8d4abf7f7d79b99e27ec59e2421802c7e021f2a3"); this.assertPost("nodetypeimplementations/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypeimplementations%252Ffruits/baobab_impl/implementationartifacts/", "entityimplementations/nodetypeimplementations/baobab_create_artifact.json"); - this.assertGet("artifacttemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fartifacttemplates%252Ffruits/baobab_bananaInterface_IA/", "entityimplementations/nodetypeimplementations/initial_artifact_template.json"); + this.assertGet("nodetypeimplementations/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypeimplementations%252Ffruits/baobab_impl", + "entityimplementations/nodetypeimplementations/baobab_with_ia.json"); + this.assertGet("artifacttemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fartifacttemplates%252Ffruits/baobab_bananaInterface_IA/", + "entityimplementations/nodetypeimplementations/initial_artifact_template.json"); } @Test diff --git a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResourceTest.java b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResourceTest.java index bd3971a9ef..983439a0bc 100644 --- a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResourceTest.java +++ b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/entitytypes/nodetypes/NodeTypeResourceTest.java @@ -60,27 +60,33 @@ public void baobabAdd50x50Image() throws Exception { @Test public void baobabCapabilitiesJSON() throws Exception { this.setRevisionTo("8b125a426721f8a0eb17340dc08e9b571b0cd7f7"); - this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/", "entitytypes/nodetypes/baobab_capabilites.json"); + this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/", + "entitytypes/nodetypes/baobab_capabilites.json"); } @Test public void baobabGetCapabilityDefinitions() throws Exception { this.setRevisionTo("8b125a426721f8a0eb17340dc08e9b571b0cd7f7"); - this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/capabilitydefinitions/", "entitytypes/nodetypes/baobab_capability_definitions_get.json"); + this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/capabilitydefinitions/", + "entitytypes/nodetypes/baobab_capability_definitions_get.json"); } @Test public void baobabAddCapabilityDefinition() throws Exception { this.setRevisionTo("8b125a426721f8a0eb17340dc08e9b571b0cd7f7"); - this.assertNoContentPost("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/capabilitydefinitions/", "entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition.json"); - this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/capabilitydefinitions/", "entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition_contents.json"); + this.assertNoContentPost("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/capabilitydefinitions/", + "entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition.json"); + this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/capabilitydefinitions/", + "entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition_contents.json"); } @Test public void addCapabilityDefinitionWithNoValidSourceTypes() throws Exception { this.setRevisionTo("8b125a426721f8a0eb17340dc08e9b571b0cd7f7"); - this.assertNoContentPost("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/capabilitydefinitions/", "entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition_without_validSourceTypes.json"); - this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/capabilitydefinitions/", "entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition_contents.json"); + this.assertNoContentPost("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/capabilitydefinitions/", + "entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition_without_validSourceTypes.json"); + this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/capabilitydefinitions/", + "entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition_contents.json"); } @Test @@ -93,14 +99,17 @@ public void baobabDeleteCapabilityDefiniton() throws Exception { @Test public void baobabGetRequirementDefinition() throws Exception { this.setRevisionTo("494da65d11c8191b8254cba23a82a1abbface09c"); - this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/requirementdefinitions/", "entitytypes/nodetypes/baobab_requirement_definitions_get.json"); + this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/requirementdefinitions/", + "entitytypes/nodetypes/baobab_requirement_definitions_get.json"); } @Test public void baobabCreateRequirementDefinition() throws Exception { this.setRevisionTo("494da65d11c8191b8254cba23a82a1abbface09c"); - this.assertNoContentPost("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/requirementdefinitions/", "entitytypes/nodetypes/baobab_requirement_definitions_add_requirementdefinition.json"); - this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/requirementdefinitions/", "entitytypes/nodetypes/baobab_requirement_definitions_add_requirementdefinition_contents.json"); + this.assertNoContentPost("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/requirementdefinitions/", + "entitytypes/nodetypes/baobab_requirement_definitions_add_requirementdefinition.json"); + this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/requirementdefinitions/", + "entitytypes/nodetypes/baobab_requirement_definitions_add_requirementdefinition_contents.json"); } @Test @@ -153,8 +162,10 @@ public void baobabHasNoImage() throws Exception { @Test public void baobabAddInterface() throws Exception { this.setRevisionTo("5b5ad1106a3a428020b6bc5d2f154841acb5f779"); - this.assertNoContentPost("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/interfaces/", "entitytypes/nodetypes/baobab_create_interface_and_operations.json"); - this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/interfaces/", "entitytypes/nodetypes/baobab_initial_interface.json"); + this.assertNoContentPost("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/interfaces/", + "entitytypes/nodetypes/baobab_create_interface_and_operations.json"); + this.assertGet("nodetypes/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fnodetypes%252Ffruits/baobab/interfaces/", + "entitytypes/nodetypes/baobab_initial_interface.json"); } @Test diff --git a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResourceTest.java b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResourceTest.java index cac151845f..c10e8cb6ff 100644 --- a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResourceTest.java +++ b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/ServiceTemplateResourceTest.java @@ -89,7 +89,8 @@ public void getInjectorOptions() throws Exception { public void getInjectorOptionsWithoutOpenRequirementsBadRequest() throws Exception { this.setRevisionTo("origin/black"); //this.assertGetExpectBadRequestResponse("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/injector/options", "servicetemplates/pony.json"); - this.assertGetExpectBadRequestResponse("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/injector/options", "servicetemplates/ServiceTemplateResource-getInjectorOptionsWithoutOpenRequirements-badrequest.txt"); + this.assertGetExpectBadRequestResponse("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/injector/options", + "servicetemplates/ServiceTemplateResource-getInjectorOptionsWithoutOpenRequirements-badrequest.txt"); } @Test @@ -102,13 +103,15 @@ public void getInjectOptionsForDriverInjection() throws Exception { @Test public void injectNodeTemplates() throws Exception { this.setRevisionTo("d535f69bf50b2c4eda437be46b7ba1f85c4ff3bc"); - this.assertPost("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Fponyuniverse%252Finjector/FoodandHouseInjectionTest/injector/replace", "servicetemplates/ServiceTemplateResource-injectNodeTemplates-input2.json"); + this.assertPost("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Fponyuniverse%252Finjector/FoodandHouseInjectionTest/injector/replace", + "servicetemplates/ServiceTemplateResource-injectNodeTemplates-input2.json"); } @Test public void injectNodeTemplatesWithDriverInjection() throws Exception { this.setRevisionTo("c25aa724201824fce6eddcc7c35a666c6e015880"); - this.assertPost("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Fponyuniverse%252Fdriverinjection/DriverInjectionTest/injector/replace", "servicetemplates/ServiceTemplateResource-injectNodeTemplates-input-DriverInjectionTest.json"); + this.assertPost("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Fponyuniverse%252Fdriverinjection/DriverInjectionTest/injector/replace", + "servicetemplates/ServiceTemplateResource-injectNodeTemplates-input-DriverInjectionTest.json"); } @Test diff --git a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/policies/PoliciesResourceTest.java b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/policies/PoliciesResourceTest.java index 986691081a..4a458f5d18 100644 --- a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/policies/PoliciesResourceTest.java +++ b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/boundarydefinitions/policies/PoliciesResourceTest.java @@ -30,7 +30,8 @@ public void addPolicyTest() throws Exception { @Test public void getPoliciesTest() throws Exception { this.setRevisionTo("3cad4e459a8af6082097eab8f978c80b4f5a512e"); - this.assertGet("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/boundarydefinitions/policies/", "entitytypes/servicetemplates/boundarydefinitions/policies/initialPolicy.json"); + this.assertGet("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/boundarydefinitions/policies/", + "entitytypes/servicetemplates/boundarydefinitions/policies/initialPolicy.json"); } @Test diff --git a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/plans/PlansResourceTest.java b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/plans/PlansResourceTest.java index c09d7fa30e..d98dea8865 100644 --- a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/plans/PlansResourceTest.java +++ b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/plans/PlansResourceTest.java @@ -22,13 +22,15 @@ public class PlansResourceTest extends AbstractResourceTest { @Test public void getFirstPlan() throws Exception { this.setRevisionTo("ae8dfe4e192cc9942df055f9aa075f1cd7445584"); - this.assertGet("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/", "entitytypes/servicetemplates/plans/boabab_initial_plans.json"); + this.assertGet("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/", + "entitytypes/servicetemplates/plans/boabab_initial_plans.json"); } @Test public void addPlanWithBpmn4ToscaLanguage() throws Exception { this.setRevisionTo("a5fd2da6845e9599138b7c20c1fd9d727c1df66f"); - this.assertPost("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/", "entitytypes/servicetemplates/plans/baobab_add_initial_plan.json"); + this.assertPost("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/", + "entitytypes/servicetemplates/plans/baobab_add_initial_plan.json"); this.assertGetSize("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/", 1); } @@ -42,9 +44,10 @@ public void deletePlan() throws Exception { @Test public void updatePlan() throws Exception { this.setRevisionTo("ae8dfe4e192cc9942df055f9aa075f1cd7445584"); - this.assertPut("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/harvest_Plan/", "entitytypes/servicetemplates/plans/baobab_update_plan.json"); - this.assertGet("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/", "entitytypes/servicetemplates/plans/baobab_updated_plans.json"); - } + this.assertPut("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/harvest_Plan/", + "entitytypes/servicetemplates/plans/baobab_update_plan.json"); + this.assertGet("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/", + "entitytypes/servicetemplates/plans/baobab_updated_plans.json"); } @Test public void addFile() throws Exception { diff --git a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/NodeTemplateResourceTest.java b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/NodeTemplateResourceTest.java index 0c8ace3a2c..269d1fc0a5 100644 --- a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/NodeTemplateResourceTest.java +++ b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/NodeTemplateResourceTest.java @@ -15,9 +15,10 @@ package org.eclipse.winery.repository.rest.resources.servicetemplates.topologytemplates; import java.nio.file.Path; +import java.util.List; +import java.util.Optional; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.constants.OpenToscaBaseTypes; import org.eclipse.winery.repository.rest.resources.AbstractResourceTest; @@ -25,8 +26,9 @@ import org.eclipse.jetty.toolchain.test.MavenTestingUtils; import org.junit.jupiter.api.Test; -import static org.eclipse.jdt.annotation.Checks.assertNonNull; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; public class NodeTemplateResourceTest extends AbstractResourceTest { @@ -45,11 +47,13 @@ public void addStateArtifactToNodeTemplate() throws Exception { TNodeTemplate.class ); - TDeploymentArtifacts deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); - assertNonNull(deploymentArtifacts); - TDeploymentArtifact deploymentArtifact = deploymentArtifacts.getDeploymentArtifact("state"); - assertNonNull(deploymentArtifact); - assertEquals(OpenToscaBaseTypes.stateArtifactType, deploymentArtifact.getArtifactType()); + List deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); + assertNotNull(deploymentArtifacts); + Optional state = deploymentArtifacts.stream() + .filter(artifact -> artifact.getName().equals("state")) + .findFirst(); + assertTrue(state.isPresent()); + assertEquals(OpenToscaBaseTypes.stateArtifactType, state.get().getArtifactType()); } @Test @@ -67,14 +71,21 @@ public void addStateArtifactToNodeTemplateThatAlreadyHasADeploymentArtifact() th TNodeTemplate.class ); - TDeploymentArtifacts deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); - assertNonNull(deploymentArtifacts); - assertEquals(2, deploymentArtifacts.getDeploymentArtifact().size()); - - assertNonNull(deploymentArtifacts.getDeploymentArtifact("test-artifact")); - - TDeploymentArtifact deploymentArtifact = deploymentArtifacts.getDeploymentArtifact("state"); - assertNonNull(deploymentArtifact); - assertEquals(OpenToscaBaseTypes.stateArtifactType, deploymentArtifact.getArtifactType()); + List deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); + assertNotNull(deploymentArtifacts); + assertEquals(2, deploymentArtifacts.size()); + + Optional testArtifact = deploymentArtifacts.stream() + .filter(artifact -> artifact.getName().equals("test-artifact")) + .findFirst(); + assertTrue(testArtifact.isPresent()); + assertNotNull(testArtifact.get()); + + assertNotNull(deploymentArtifacts); + Optional state = deploymentArtifacts.stream() + .filter(artifact -> artifact.getName().equals("state")) + .findFirst(); + assertTrue(state.isPresent()); + assertEquals(OpenToscaBaseTypes.stateArtifactType, state.get().getArtifactType()); } } diff --git a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResourceTest.java b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResourceTest.java index 7a520d3473..66b3447829 100644 --- a/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResourceTest.java +++ b/org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResourceTest.java @@ -67,22 +67,28 @@ public void topologyTemplateUpdate() throws Exception { public void emptyElementTagsInXML() throws Exception { this.setRevisionTo("origin/plain"); // for testing an arbitrary existing service template is used - this.assertPut("servicetemplates/http%253A%252F%252Fplain.winery.opentosca.org%252Fservicetemplates/ServiceTemplateMinimalExampleWithAllPropertyVariants_w1-wip1/topologytemplate/", "servicetemplates/topologytemplates/plain-TopologyTemplateMinimalExampleWithAllPropertyVariants_w1-wip1.json"); - this.assertGet("servicetemplates/http%253A%252F%252Fplain.winery.opentosca.org%252Fservicetemplates/ServiceTemplateMinimalExampleWithAllPropertyVariants_w1-wip1/topologytemplate/", "servicetemplates/topologytemplates/plain-TopologyTemplateMinimalExampleWithAllPropertyVariants_w1-wip1.xml"); + this.assertPut("servicetemplates/http%253A%252F%252Fplain.winery.opentosca.org%252Fservicetemplates/ServiceTemplateMinimalExampleWithAllPropertyVariants_w1-wip1/topologytemplate/", + "servicetemplates/topologytemplates/plain-TopologyTemplateMinimalExampleWithAllPropertyVariants_w1-wip1.json"); + this.assertGet("servicetemplates/http%253A%252F%252Fplain.winery.opentosca.org%252Fservicetemplates/ServiceTemplateMinimalExampleWithAllPropertyVariants_w1-wip1/topologytemplate/", + "servicetemplates/topologytemplates/plain-TopologyTemplateMinimalExampleWithAllPropertyVariants_w1-wip1.xml"); } @Test public void topologyTemplateUpdateWithEmptyListsGetTheListsRemoved() throws Exception { this.setRevisionTo("3fe0df76e98d46ead68295920e5d1cf1354bdea1"); - this.assertPut("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/topologytemplate/", "servicetemplates/baobab_topologytemplate_v2-with-empty-objects.json"); - this.assertGet("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/topologytemplate/", "servicetemplates/baobab_topologytemplate_v2.json"); + this.assertPut("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/topologytemplate/", + "servicetemplates/baobab_topologytemplate_v2-with-empty-objects.json"); + this.assertGet("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/topologytemplate/", + "servicetemplates/baobab_topologytemplate_v2.json"); } @Test public void apacheSparkAppOnVspheretopologyTemplateUpdateWithEmptyListsGetTheListsRemoved() throws Exception { this.setRevisionTo("3fe0df76e98d46ead68295920e5d1cf1354bdea1"); - this.assertPut("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/topologytemplate/", "servicetemplates/apache-spark-on-vsphere-input.json"); - this.assertGet("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/topologytemplate/", "servicetemplates/apache-spark-on-vsphere-result.json"); + this.assertPut("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/topologytemplate/", + "servicetemplates/apache-spark-on-vsphere-input.json"); + this.assertGet("servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/topologytemplate/", + "servicetemplates/apache-spark-on-vsphere-result.json"); } @Test @@ -146,8 +152,10 @@ public void jsonWithEmptyPoliciesElementProducesValidJson() throws Exception { public void jsonWithEmptyPoliciesElementProducesValidXml() throws Exception { this.setRevisionTo("origin/plain"); // for testing an arbitrary existing service template is used - this.assertPut("servicetemplates/http%253A%252F%252Fplain.winery.opentosca.org%252Fservicetemplates/ServiceTemplateMinimalExampleWithAllPropertyVariants/topologytemplate/", "entitytypes/servicetemplates/topologytemplates/empty-xml-test--topology-with-empty-policy.json"); - this.assertGet("servicetemplates/http%253A%252F%252Fplain.winery.opentosca.org%252Fservicetemplates/ServiceTemplateMinimalExampleWithAllPropertyVariants/topologytemplate/", "entitytypes/servicetemplates/topologytemplates/empty-xml-test--topology-without-empty-elements.xml"); + this.assertPut("servicetemplates/http%253A%252F%252Fplain.winery.opentosca.org%252Fservicetemplates/ServiceTemplateMinimalExampleWithAllPropertyVariants/topologytemplate/", + "entitytypes/servicetemplates/topologytemplates/empty-xml-test--topology-with-empty-policy.json"); + this.assertGet("servicetemplates/http%253A%252F%252Fplain.winery.opentosca.org%252Fservicetemplates/ServiceTemplateMinimalExampleWithAllPropertyVariants/topologytemplate/", + "entitytypes/servicetemplates/topologytemplates/empty-xml-test--topology-without-empty-elements.xml"); } @Test diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entityimplementations/nodetypeimplementations/baobab_with_ia.json b/org.eclipse.winery.repository.rest/src/test/resources/entityimplementations/nodetypeimplementations/baobab_with_ia.json new file mode 100644 index 0000000000..1d4b6e7d0f --- /dev/null +++ b/org.eclipse.winery.repository.rest/src/test/resources/entityimplementations/nodetypeimplementations/baobab_with_ia.json @@ -0,0 +1,75 @@ +{ + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "id": "winery-defs-for_wfni-baobab_impl", + "serviceTemplateOrNodeTypeOrNodeTypeImplementation": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "implementationArtifacts": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "baobab_bananaInterface_IA", + "artifactType": "{http://winery.opentosca.org/test/artifacttypes/fruits}WAR", + "artifactRef": "{http://winery.opentosca.org/test/artifacttemplates/fruits}baobab_bananaInterface_IA", + "interfaceName": "bananaInterface" + }, + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "baobab_bananaInterface_IA", + "artifactType": "{http://winery.opentosca.org/test/artifacttypes/fruits}WAR", + "artifactRef": "{http://winery.opentosca.org/test/artifacttemplates/fruits}baobab_bananaInterface_IA", + "interfaceName": "bananaInterface" + } + ], + "targetNamespace": "http://winery.opentosca.org/test/nodetypeimplementations/fruits", + "name": "baobab_impl", + "nodeType": "{http://winery.opentosca.org/test/nodetypes/fruits}baobab", + "abstract": "NO", + "final": "NO" + } + ], + "targetNamespace": "http://winery.opentosca.org/test/nodetypeimplementations/fruits", + "import": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "namespace": "http://winery.opentosca.org/test/artifacttemplates/fruits", + "location": "fruitsats__baobab_bananaInterface_IA.tosca", + "importType": "http://docs.oasis-open.org/tosca/ns/2011/12" + }, + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "namespace": "http://winery.opentosca.org/test/artifacttypes/fruits", + "location": "fruitsatys__WAR.tosca", + "importType": "http://docs.oasis-open.org/tosca/ns/2011/12" + } + ] +} \ No newline at end of file diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytemplates/artifacttemplates/MyTinyTest.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytemplates/artifacttemplates/MyTinyTest.json index dd7e5b83aa..fc9fd856cd 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytemplates/artifacttemplates/MyTinyTest.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytemplates/artifacttemplates/MyTinyTest.json @@ -16,15 +16,13 @@ }, "id": "MyTinyTest", "type": "{http://opentosca.org/artifacttypes}MiniArtifactType", - "artifactReferences": { - "artifactReference": [ - { - "includeOrExclude": [ - ], - "reference": "artifacttemplates/http%253A%252F%252Fopentosca.org%252Fartifacttemplates/MyTinyTest/files/blub.zip" - } - ] - }, + "artifactReferences": [ + { + "includeOrExclude": [ + ], + "reference": "artifacttemplates/http%253A%252F%252Fopentosca.org%252Fartifacttemplates/MyTinyTest/files/blub.zip" + } + ], "name": "MyTinyTest" } ], diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytemplates/artifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson-withFile.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytemplates/artifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson-withFile.json index 1c854b8abc..65d17bc017 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytemplates/artifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson-withFile.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytemplates/artifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson-withFile.json @@ -16,15 +16,13 @@ }, "id": "artifactTemplateContainsUpdatedFileReferenceInJson", "type": "{http://winery.opentosca.org/test/artifacttypes}MiniArtifactType", - "artifactReferences": { - "artifactReference": [ - { - "includeOrExclude": [ - ], - "reference": "artifacttemplates/http%253A%252F%252Fopentosca.org%252Fartifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson/files/empty_text_file.txt" - } - ] - }, + "artifactReferences": [ + { + "includeOrExclude": [ + ], + "reference": "artifacttemplates/http%253A%252F%252Fopentosca.org%252Fartifacttemplates/artifactTemplateContainsUpdatedFileReferenceInJson/files/empty_text_file.txt" + } + ], "name": "artifactTemplateContainsUpdatedFileReferenceInJson" } ], diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/add_input_params.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/add_input_params.json index c85e7b3bd2..7965bd9111 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/add_input_params.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/add_input_params.json @@ -1,26 +1,24 @@ [ { - "operation": [ + "operations": [ { - "inputParameters": { - "inputParameter": [ - { - "name": "Param1", - "type": "xsd:string", - "required": "YES" - }, - { - "name": "Param2", - "type": "xsd:string", - "required": "YES" - }, - { - "name": "Param3", - "type": "xsd:string", - "required": "NO" - } - ] - }, + "inputParameters": [ + { + "name": "Param1", + "type": "xsd:string", + "required": "YES" + }, + { + "name": "Param2", + "type": "xsd:string", + "required": "YES" + }, + { + "name": "Param3", + "type": "xsd:string", + "required": "NO" + } + ], "name": "configure" } ], diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/add_input_params_result.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/add_input_params_result.json index a5891505d2..25d1691df3 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/add_input_params_result.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/add_input_params_result.json @@ -1,29 +1,27 @@ [ { - "operation": [ + "operations": [ { "documentation": [], "any": [], "otherAttributes": {}, - "inputParameters": { - "inputParameter": [ - { - "name": "Param1", - "type": "xsd:string", - "required": "YES" - }, - { - "name": "Param2", - "type": "xsd:string", - "required": "YES" - }, - { - "name": "Param3", - "type": "xsd:string", - "required": "NO" - } - ] - }, + "inputParameters": [ + { + "name": "Param1", + "type": "xsd:string", + "required": "YES" + }, + { + "name": "Param2", + "type": "xsd:string", + "required": "YES" + }, + { + "name": "Param3", + "type": "xsd:string", + "required": "NO" + } + ], "name": "configure" } ], diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface.json index a00156bc50..74c4085a2f 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface.json @@ -1,6 +1,6 @@ [ { - "operation": [ + "operations": [ { "name": "pre_configure_source" }, diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface_result.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface_result.json index 3c12efec24..9b696dd9f4 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface_result.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/interfaces/create_configure_interface_result.json @@ -1,6 +1,6 @@ [ { - "operation": [ + "operations": [ { "documentation": [ ], diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capabilites.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capabilites.json index bda5a3310e..01e8446574 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capabilites.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capabilites.json @@ -42,29 +42,25 @@ }, "name": "baobab", "targetNamespace": "http://winery.opentosca.org/test/nodetypes/fruits", - "capabilityDefinitions": { - "capabilityDefinition": [ - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "constraints": { - "constraint": [ - { - "constraintType": "http://winery.opentosca.org/test/constrainttypes/fruits/healthy" - } - ] - }, - "name": "ImportConstraintsHealthy", - "capabilityType": "{http://winery.opentosca.org/test/capabilitytypes/fruits}Healthy", - "lowerBound": 1, - "upperBound": "1" - } - ] - }, + "capabilityDefinitions": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "constraints": [ + { + "constraintType": "http://winery.opentosca.org/test/constrainttypes/fruits/healthy" + } + ], + "name": "ImportConstraintsHealthy", + "capabilityType": "{http://winery.opentosca.org/test/capabilitytypes/fruits}Healthy", + "lowerBound": 1, + "upperBound": "1" + } + ], "final": "NO", "abstract": "NO" } diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition_contents.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition_contents.json index 094a456b70..d32acdbbc9 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition_contents.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capability_definitions_add_capabilitydefinition_contents.json @@ -6,13 +6,11 @@ ], "otherAttributes": { }, - "constraints": { - "constraint": [ - { - "constraintType": "http://winery.opentosca.org/test/constrainttypes/fruits/healthy" - } - ] - }, + "constraints": [ + { + "constraintType": "http://winery.opentosca.org/test/constrainttypes/fruits/healthy" + } + ], "name": "ImportConstraintsHealthy", "capabilityType": "{http://winery.opentosca.org/test/capabilitytypes/fruits}Healthy", "lowerBound": 1, @@ -26,10 +24,8 @@ ], "otherAttributes": { }, - "constraints": { - "constraint": [ - ] - }, + "constraints": [ + ], "name": "ImportConstraintsSaturating", "capabilityType": "{http://winery.opentosca.org/test/capabilitytypes/fruits}Saturating", "lowerBound": 1, diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capability_definitions_get.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capability_definitions_get.json index bbdeef8fde..72ac760d39 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capability_definitions_get.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_capability_definitions_get.json @@ -6,13 +6,11 @@ ], "otherAttributes": { }, - "constraints": { - "constraint": [ - { - "constraintType": "http://winery.opentosca.org/test/constrainttypes/fruits/healthy" - } - ] - }, + "constraints": [ + { + "constraintType": "http://winery.opentosca.org/test/constrainttypes/fruits/healthy" + } + ], "name": "ImportConstraintsHealthy", "capabilityType": "{http://winery.opentosca.org/test/capabilitytypes/fruits}Healthy", "lowerBound": 1, diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_create_interface_and_operations.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_create_interface_and_operations.json index 500e6e3ff0..0bfadda208 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_create_interface_and_operations.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_create_interface_and_operations.json @@ -1,42 +1,36 @@ [ { - "operation": [ + "operations": [ { - "inputParameters": { - "inputParameter": [ - { - "name": "bananaInShell", - "type": "xsd:string", - "required": "YES" - }, - { - "name": "peeler", - "type": "xsd:string", - "required": "YES" - } - ] - }, - "outputParameters": { - "outputParameter": [ - { - "name": "peeledBanana", - "type": "xsd:string", - "required": "NO" - } - ] - }, + "inputParameters": [ + { + "name": "bananaInShell", + "type": "xsd:string", + "required": "YES" + }, + { + "name": "peeler", + "type": "xsd:string", + "required": "YES" + } + ], + "outputParameters": [ + { + "name": "peeledBanana", + "type": "xsd:string", + "required": "NO" + } + ], "name": "peel" }, { - "inputParameters": { - "inputParameter": [ - { - "name": "mouth", - "type": "xsd:string", - "required": "YES" - } - ] - }, + "inputParameters": [ + { + "name": "mouth", + "type": "xsd:string", + "required": "YES" + } + ], "name": "eat" } ], diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_initial_interface.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_initial_interface.json index d313305d24..c048a31151 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_initial_interface.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_initial_interface.json @@ -1,6 +1,6 @@ [ { - "operation": [ + "operations": [ { "documentation": [ ], @@ -8,29 +8,25 @@ ], "otherAttributes": { }, - "inputParameters": { - "inputParameter": [ - { - "name": "bananaInShell", - "type": "xsd:string", - "required": "YES" - }, - { - "name": "peeler", - "type": "xsd:string", - "required": "YES" - } - ] - }, - "outputParameters": { - "outputParameter": [ - { - "name": "peeledBanana", - "type": "xsd:string", - "required": "NO" - } - ] - }, + "inputParameters": [ + { + "name": "bananaInShell", + "type": "xsd:string", + "required": "YES" + }, + { + "name": "peeler", + "type": "xsd:string", + "required": "YES" + } + ], + "outputParameters": [ + { + "name": "peeledBanana", + "type": "xsd:string", + "required": "NO" + } + ], "name": "peel" }, { @@ -40,15 +36,13 @@ ], "otherAttributes": { }, - "inputParameters": { - "inputParameter": [ - { - "name": "mouth", - "type": "xsd:string", - "required": "YES" - } - ] - }, + "inputParameters": [ + { + "name": "mouth", + "type": "xsd:string", + "required": "YES" + } + ], "name": "eat" } ], diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_requirement_definitions_add_requirementdefinition_contents.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_requirement_definitions_add_requirementdefinition_contents.json index 3ef81e7b0f..8e078b674b 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_requirement_definitions_add_requirementdefinition_contents.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_requirement_definitions_add_requirementdefinition_contents.json @@ -6,13 +6,11 @@ ], "otherAttributes": { }, - "constraints": { - "constraint": [ - { - "constraintType": "http://winery.opentosca.org/test/constrainttypes/fruits/healthy" - } - ] - }, + "constraints": [ + { + "constraintType": "http://winery.opentosca.org/test/constrainttypes/fruits/healthy" + } + ], "name": "ImportConstraintsHealthy", "requirementType": "{http://winery.opentosca.org/test/requirementtypes/fruits}MinimumWeight", "lowerBound": 1, @@ -26,10 +24,8 @@ ], "otherAttributes": { }, - "constraints": { - "constraint": [ - ] - }, + "constraints": [ + ], "name": "ImportConstraintsMaximumWeight", "requirementType": "{http://winery.opentosca.org/test/requirementtypes/fruits}MaximumWeight", "lowerBound": 1, diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_requirement_definitions_get.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_requirement_definitions_get.json index f2bd299dc9..79cfdd3315 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_requirement_definitions_get.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/nodetypes/baobab_requirement_definitions_get.json @@ -6,13 +6,11 @@ ], "otherAttributes": { }, - "constraints": { - "constraint": [ - { - "constraintType": "http://winery.opentosca.org/test/constrainttypes/fruits/healthy" - } - ] - }, + "constraints": [ + { + "constraintType": "http://winery.opentosca.org/test/constrainttypes/fruits/healthy" + } + ], "name": "ImportConstraintsHealthy", "requirementType": "{http://winery.opentosca.org/test/requirementtypes/fruits}MinimumWeight", "lowerBound": 1, diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/DriverInjection.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/DriverInjection.json index a6c8ca6473..2492796776 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/DriverInjection.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/DriverInjection.json @@ -22,21 +22,19 @@ "any": "\n" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}shetland_pony", - "deploymentArtifacts": { - "deploymentArtifact": [ - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "name": "PonyEquipment_abstract", - "artifactType": "{http://winery.opentosca.org/test/ponyuniverse}PonyEquipment", - "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}PonyEquipment_abstract" - } - ] - }, + "deploymentArtifacts": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "PonyEquipment_abstract", + "artifactType": "{http://winery.opentosca.org/test/ponyuniverse}PonyEquipment", + "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}PonyEquipment_abstract" + } + ], "name": "shetland_pony", "minInstances": 1, "maxInstances": "1", @@ -73,36 +71,32 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "137" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}ponycompetition", - "requirements": { - "requirement": [ - { - "id": "ReqEquipment", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqEquipment", - "name": "ReqEquipment" - } - ] - }, - "capabilities": { - "capability": [ - { - "id": "CapCompetition", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapCompetition", - "name": "CapCompetition" - } - ] - }, + "requirements": [ + { + "id": "ReqEquipment", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqEquipment", + "name": "ReqEquipment" + } + ], + "capabilities": [ + { + "id": "CapCompetition", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapCompetition", + "name": "CapCompetition" + } + ], "name": "ponycompetition", "minInstances": 1, "maxInstances": "1", @@ -139,7 +133,7 @@ "properties": { "propertyType": "KV", "namespace": "http://winery.opentosca.org/test/ponyuniverse/propertiesdefinition/winery", - "elementName" : "Properties", + "elementName": "Properties", "kvproperties": { "Driver": "" } diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/boundarydefinitions/propertyMappings/initial_property_mappings_get.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/boundarydefinitions/propertyMappings/initial_property_mappings_get.json index 18c611efb6..cf4f1b9358 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/boundarydefinitions/propertyMappings/initial_property_mappings_get.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/boundarydefinitions/propertyMappings/initial_property_mappings_get.json @@ -1,11 +1,9 @@ { - "propertyMappings": { - "propertyMapping": [ - { - "serviceTemplatePropertyRef": "/*[local-name()='harvest']", - "targetObjectRef": "baobab", - "targetPropertyRef": "/*[local-name()='BaobabProperties']/*[local-name()='HarvestedAt']" - } - ] - } + "propertyMappings": [ + { + "serviceTemplatePropertyRef": "/*[local-name()='harvest']", + "targetObjectRef": "baobab", + "targetPropertyRef": "/*[local-name()='BaobabProperties']/*[local-name()='HarvestedAt']" + } + ] } \ No newline at end of file diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_add_initial_plan.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_add_initial_plan.json index acc04b0afc..9942c2ecd3 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_add_initial_plan.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_add_initial_plan.json @@ -2,12 +2,8 @@ "documentation": null, "any": null, "otherAttributes": null, - "inputParameters": { - "inputParameter": [] - }, - "outputParameters": { - "outputParameter": [] - }, + "inputParameters": [], + "outputParameters": [], "name": "harvest Plan", "precondition": null, "planModel": null, diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_update_plan.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_update_plan.json index 7c2fd358e4..2805353764 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_update_plan.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_update_plan.json @@ -3,29 +3,25 @@ "any": [], "otherAttributes": {}, "precondition": null, - "inputParameters": { - "inputParameter": [ - { - "name": "available_workers", - "type": "list", - "required": "YES" - }, - { - "name": "available_machines", - "type": "list", - "required": "YES" - } - ] - }, - "outputParameters": { - "outputParameter": [ - { - "name": "harvested_fruits", - "type": "number", - "required": "YES" - } - ] - }, + "inputParameters": [ + { + "name": "available_workers", + "type": "list", + "required": "YES" + }, + { + "name": "available_machines", + "type": "list", + "required": "YES" + } + ], + "outputParameters": [ + { + "name": "harvested_fruits", + "type": "number", + "required": "YES" + } + ], "planModel": null, "planModelReference": { "reference": "../servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/harvest_Plan/harvest_Plan.bpmn4tosca" diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_updated_plans.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_updated_plans.json index e69e1c2bfd..ab6ccf16c4 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_updated_plans.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/baobab_updated_plans.json @@ -3,29 +3,25 @@ "documentation": [], "any": [], "otherAttributes": {}, - "inputParameters": { - "inputParameter": [ - { - "name": "available_workers", - "type": "list", - "required": "YES" - }, - { - "name": "available_machines", - "type": "list", - "required": "YES" - } - ] - }, - "outputParameters": { - "outputParameter": [ - { - "name": "harvested_fruits", - "type": "number", - "required": "YES" - } - ] - }, + "inputParameters": [ + { + "name": "available_workers", + "type": "list", + "required": "YES" + }, + { + "name": "available_machines", + "type": "list", + "required": "YES" + } + ], + "outputParameters": [ + { + "name": "harvested_fruits", + "type": "number", + "required": "YES" + } + ], "planModelReference": { "reference": "../servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/harvest_Plan/harvest_Plan.bpmn4tosca" }, diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/boabab_initial_plans.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/boabab_initial_plans.json index 02fef70fa1..d3ad2449b4 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/boabab_initial_plans.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/plans/boabab_initial_plans.json @@ -3,12 +3,8 @@ "documentation": [], "any": [], "otherAttributes": {}, - "inputParameters": { - "inputParameter": [] - }, - "outputParameters": { - "outputParameter": [] - }, + "inputParameters": [], + "outputParameters": [], "planModelReference": { "reference": "../servicetemplates/http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/plans/harvest_Plan/harvest_Plan.bpmn4tosca" }, @@ -17,4 +13,4 @@ "planType": "http://docs.oasis-open.org/tosca/ns/2011/12/PlanTypes/BuildPlan", "planLanguage": "http://www.opentosca.org/bpmn4tosca" } -] +] \ No newline at end of file diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/straw-stall.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/straw-stall.json index 88fad96654..ebd751503f 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/straw-stall.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/straw-stall.json @@ -25,36 +25,32 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "62" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}straw", - "requirements": { - "requirement": [ - { - "id": "hosting", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqCanHostStraw", - "name": "ReqCanHostStraw" - } - ] - }, - "capabilities": { - "capability": [ - { - "id": "providesAWarmGround", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapWarmFloor", - "name": "CapWarmFloor" - } - ] - }, + "requirements": [ + { + "id": "hosting", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqCanHostStraw", + "name": "ReqCanHostStraw" + } + ], + "capabilities": [ + { + "id": "providesAWarmGround", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapWarmFloor", + "name": "CapWarmFloor" + } + ], "name": "straw", "minInstances": 1, "maxInstances": "1", @@ -75,21 +71,19 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "485" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}stall", - "capabilities": { - "capability": [ - { - "id": "providesAhost", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapCanHostStraw", - "name": "CapCanHostStraw" - } - ] - }, + "capabilities": [ + { + "id": "providesAhost", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapCanHostStraw", + "name": "CapCanHostStraw" + } + ], "name": "stall", "minInstances": 1, "maxInstances": "1", diff --git a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/topologytemplates/empty-xml-test--topology-with-empty-policy.json b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/topologytemplates/empty-xml-test--topology-with-empty-policy.json index c0e28f6ecc..f10c6a1836 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/topologytemplates/empty-xml-test--topology-with-empty-policy.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/entitytypes/servicetemplates/topologytemplates/empty-xml-test--topology-with-empty-policy.json @@ -24,7 +24,7 @@ "maxInstances": "1", "x": "677", "y": "161", - "policies": {} + "policies": [] } ] } diff --git a/org.eclipse.winery.repository.rest/src/test/resources/patternrefinementmodels/createPrmMappingsFromTopologymodeler.json b/org.eclipse.winery.repository.rest/src/test/resources/patternrefinementmodels/createPrmMappingsFromTopologymodeler.json index 96480bf8a0..006705e49d 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/patternrefinementmodels/createPrmMappingsFromTopologymodeler.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/patternrefinementmodels/createPrmMappingsFromTopologymodeler.json @@ -164,24 +164,13 @@ "maxInstances": "1", "x": 771, "y": 400, - "capabilities": { - "capability": [ - ] - }, - "requirements": { - "requirement": [ - ] - }, - "deploymentArtifacts": { - }, - "policies": { - "policy": [ - ] - }, - "artifacts": { - "artifact": [ - ] - } + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [], + "policies": [ + ], + "artifacts": [ + ] }, { "documentation": [ @@ -203,24 +192,12 @@ "maxInstances": "1", "x": 1451, "y": 382, - "capabilities": { - "capability": [ - ] - }, - "requirements": { - "requirement": [ - ] - }, - "deploymentArtifacts": { - }, - "policies": { - "policy": [ - ] - }, - "artifacts": { - "artifact": [ - ] - } + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [], + "policies": [ + ], + "artifacts": [] }, { "documentation": [ @@ -242,26 +219,13 @@ "maxInstances": "1", "x": 1448, "y": 203, - "capabilities": { - "capability": [ - ] - }, - "requirements": { - "requirement": [ - ] - }, - "deploymentArtifacts": { - }, - "policies": { - "policy": [ - ] - }, - "artifacts": { - "artifact": [ - ] - } + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [], + "policies": [ + ], + "artifacts": [] } ], - "policies": { - } + "policies": [] } \ No newline at end of file diff --git a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-getInjectionOptions-DriverInjectionTest.json b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-getInjectionOptions-DriverInjectionTest.json index 9830b09b9f..ecd5df3397 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-getInjectionOptions-DriverInjectionTest.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-getInjectionOptions-DriverInjectionTest.json @@ -23,21 +23,19 @@ "any": "\n" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}shetland_pony", - "deploymentArtifacts": { - "deploymentArtifact": [ - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "name": "PonyEquipment_abstract", - "artifactType": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}PonyEquipment", - "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}PonyEquipment_abstract" - } - ] - }, + "deploymentArtifacts": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "PonyEquipment_abstract", + "artifactType": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}PonyEquipment", + "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}PonyEquipment_abstract" + } + ], "name": "shetland_pony", "minInstances": 1, "maxInstances": "1", @@ -56,36 +54,32 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "137" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}ponycompetition", - "requirements": { - "requirement": [ - { - "id": "ReqEquipment", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqEquipment", - "name": "ReqEquipment" - } - ] - }, - "capabilities": { - "capability": [ - { - "id": "CapCompetition", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapCompetition", - "name": "CapCompetition" - } - ] - }, + "requirements": [ + { + "id": "ReqEquipment", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqEquipment", + "name": "ReqEquipment" + } + ], + "capabilities": [ + { + "id": "CapCompetition", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapCompetition", + "name": "CapCompetition" + } + ], "name": "ponycompetition", "minInstances": 1, "maxInstances": "1", @@ -104,8 +98,8 @@ }, "properties": { "propertyType": "KV", - "namespace" : "http://winery.opentosca.org/test/ponyuniverse/propertiesdefinition/winery", - "elementName" : "Properties", + "namespace": "http://winery.opentosca.org/test/ponyuniverse/propertiesdefinition/winery", + "elementName": "Properties", "kvproperties": { "Driver": "" } @@ -148,47 +142,43 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "270" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}dressageequipment", - "capabilities": { - "capability": [ - { - "id": "CapEquipment", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapEquipment", - "name": "CapEquipment" - } - ] - }, - "deploymentArtifacts": { - "deploymentArtifact": [ - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "name": "DressageEquipment_Pony", - "artifactType": "{http://winery.opentosca.org/test/ponyuniverse}DressageEquipment_Pony", - "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}DressageEquipment_Pony" + "capabilities": [ + { + "id": "CapEquipment", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { }, - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "name": "DressageEquipment_Unicorn", - "artifactType": "{http://winery.opentosca.org/test/ponyuniverse}DressageEquipment_Unicorn", - "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}DressageEquipment_Unicorn" - } - ] - }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapEquipment", + "name": "CapEquipment" + } + ], + "deploymentArtifacts": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "DressageEquipment_Pony", + "artifactType": "{http://winery.opentosca.org/test/ponyuniverse}DressageEquipment_Pony", + "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}DressageEquipment_Pony" + }, + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "DressageEquipment_Unicorn", + "artifactType": "{http://winery.opentosca.org/test/ponyuniverse}DressageEquipment_Unicorn", + "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}DressageEquipment_Unicorn" + } + ], "name": "dressageequipment", "minInstances": 1, "maxInstances": "1", diff --git a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-getInjectionOptions.json b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-getInjectionOptions.json index 28a10d9641..802a2e6cff 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-getInjectionOptions.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-getInjectionOptions.json @@ -21,32 +21,30 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "166" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}shetland_pony", - "requirements": { - "requirement": [ - { - "id": "requiresWarmFloor", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqWarmFloor", - "name": "ReqWarmFloor" + "requirements": [ + { + "id": "requiresWarmFloor", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { }, - { - "id": "requiresDryFood", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqDryFood", - "name": "ReqDryFood" - } - ] - }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqWarmFloor", + "name": "ReqWarmFloor" + }, + { + "id": "requiresDryFood", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqDryFood", + "name": "ReqDryFood" + } + ], "name": "shetland_pony", "minInstances": 1, "maxInstances": "1", @@ -84,21 +82,19 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "245" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}pasture", - "capabilities": { - "capability": [ - { - "id": "placeforaPony", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapWarmFloor", - "name": "CapWarmFloor" - } - ] - }, + "capabilities": [ + { + "id": "placeforaPony", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapWarmFloor", + "name": "CapWarmFloor" + } + ], "name": "pasture", "minInstances": 1, "maxInstances": "1", @@ -151,36 +147,32 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "62" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}straw", - "requirements": { - "requirement": [ - { - "id": "hosting", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqCanHostStraw", - "name": "ReqCanHostStraw" - } - ] - }, - "capabilities": { - "capability": [ - { - "id": "providesAWarmGround", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapWarmFloor", - "name": "CapWarmFloor" - } - ] - }, + "requirements": [ + { + "id": "hosting", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqCanHostStraw", + "name": "ReqCanHostStraw" + } + ], + "capabilities": [ + { + "id": "providesAWarmGround", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapWarmFloor", + "name": "CapWarmFloor" + } + ], "name": "straw", "minInstances": 1, "maxInstances": "1", @@ -199,21 +191,19 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "485" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}stall", - "capabilities": { - "capability": [ - { - "id": "providesAhost", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapCanHostStraw", - "name": "CapCanHostStraw" - } - ] - }, + "capabilities": [ + { + "id": "providesAhost", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapCanHostStraw", + "name": "CapCanHostStraw" + } + ], "name": "stall", "minInstances": 1, "maxInstances": "1", @@ -253,21 +243,19 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "180" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}oat", - "capabilities": { - "capability": [ - { - "id": "provideDryFood", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapDryFood", - "name": "CapDryFood" - } - ] - }, + "capabilities": [ + { + "id": "provideDryFood", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapDryFood", + "name": "CapDryFood" + } + ], "name": "oat", "minInstances": 1, "maxInstances": "1", diff --git a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-injectNodeTemplates-input-DriverInjectionTest.json b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-injectNodeTemplates-input-DriverInjectionTest.json index d3205c4ee8..0290d1c348 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-injectNodeTemplates-input-DriverInjectionTest.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-injectNodeTemplates-input-DriverInjectionTest.json @@ -29,47 +29,43 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "270" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}dressageequipment", - "capabilities": { - "capability": [ - { - "id": "CapEquipment", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapEquipment", - "name": "CapEquipment" - } - ] - }, - "deploymentArtifacts": { - "deploymentArtifact": [ - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "name": "DressageEquipment_Pony", - "artifactType": "{http://winery.opentosca.org/test/ponyuniverse}DressageEquipment_Pony", - "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}DressageEquipment_Pony" + "capabilities": [ + { + "id": "CapEquipment", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { }, - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "name": "DressageEquipment_Unicorn", - "artifactType": "{http://winery.opentosca.org/test/ponyuniverse}DressageEquipment_Unicorn", - "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}DressageEquipment_Unicorn" - } - ] - }, + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapEquipment", + "name": "CapEquipment" + } + ], + "deploymentArtifact": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "DressageEquipment_Pony", + "artifactType": "{http://winery.opentosca.org/test/ponyuniverse}DressageEquipment_Pony", + "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}DressageEquipment_Pony" + }, + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "DressageEquipment_Unicorn", + "artifactType": "{http://winery.opentosca.org/test/ponyuniverse}DressageEquipment_Unicorn", + "artifactRef": "{http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier}DressageEquipment_Unicorn" + } + ], "name": "dressageequipment", "minInstances": 1, "maxInstances": "1" diff --git a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-injectNodeTemplates-input2.json b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-injectNodeTemplates-input2.json index 723019ec0d..402fc12d25 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-injectNodeTemplates-input2.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/ServiceTemplateResource-injectNodeTemplates-input2.json @@ -27,36 +27,32 @@ }, "id": "straw", "type": "{http://winery.opentosca.org/test/ponyuniverse}straw", - "requirements": { - "requirement": [ - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "id": "hosting", - "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqCanHostStraw", - "name": "ReqCanHostStraw" - } - ] - }, - "capabilities": { - "capability": [ - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "id": "providesAWarmGround", - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapWarmFloor", - "name": "CapWarmFloor" - } - ] - }, + "requirements": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "id": "hosting", + "type": "{http://winery.opentosca.org/test/ponyuniverse}ReqCanHostStraw", + "name": "ReqCanHostStraw" + } + ], + "capabilities": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "id": "providesAWarmGround", + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapWarmFloor", + "name": "CapWarmFloor" + } + ], "name": "straw", "minInstances": 1, "maxInstances": "1" @@ -73,21 +69,19 @@ }, "id": "stall", "type": "{http://winery.opentosca.org/test/ponyuniverse}stall", - "capabilities": { - "capability": [ - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "id": "providesAhost", - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapCanHostStraw", - "name": "CapCanHostStraw" - } - ] - }, + "capabilities": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "id": "providesAhost", + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapCanHostStraw", + "name": "CapCanHostStraw" + } + ], "name": "stall", "minInstances": 1, "maxInstances": "1" @@ -142,21 +136,19 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "180" }, "type": "{http://winery.opentosca.org/test/ponyuniverse}oat", - "capabilities": { - "capability": [ - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "id": "provideDryFood", - "type": "{http://winery.opentosca.org/test/ponyuniverse}CapDryFood", - "name": "CapDryFood" - } - ] - }, + "capabilities": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "id": "provideDryFood", + "type": "{http://winery.opentosca.org/test/ponyuniverse}CapDryFood", + "name": "CapDryFood" + } + ], "name": "oat", "minInstances": 1, "maxInstances": "1" diff --git a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/apache-spark-on-vsphere-input.json b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/apache-spark-on-vsphere-input.json index 8254e63539..239b424060 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/apache-spark-on-vsphere-input.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/apache-spark-on-vsphere-input.json @@ -98,18 +98,10 @@ "maxInstances": "1", "x": 678, "y": 631, - "capabilities": { - "capability": [] - }, - "requirements": { - "requirement": [] - }, - "deploymentArtifacts": { - "deploymentArtifact": [] - }, - "policies": { - "policy": [] - } + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [], + "policies": [] }, { "documentation": [], @@ -138,18 +130,10 @@ "maxInstances": "1", "x": 844, "y": 514, - "capabilities": { - "capability": [] - }, - "requirements": { - "requirement": [] - }, - "deploymentArtifacts": { - "deploymentArtifact": [] - }, - "policies": { - "policy": [] - } + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [], + "policies": [] }, { "documentation": [], @@ -166,18 +150,10 @@ "maxInstances": "1", "x": 744, "y": 268, - "capabilities": { - "capability": [] - }, - "requirements": { - "requirement": [] - }, - "deploymentArtifacts": { - "deploymentArtifact": [] - }, - "policies": { - "policy": [] - } + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [], + "policies": [] }, { "documentation": [], @@ -194,27 +170,19 @@ "maxInstances": "1", "x": 740, "y": 46, - "capabilities": { - "capability": [] - }, - "requirements": { - "requirement": [] - }, - "deploymentArtifacts": { - "deploymentArtifact": [ - { - "documentation": [], - "any": [], - "otherAttributes": {}, - "name": "Pi_Estimation_DA", - "artifactType": "{http://docs.oasis-open.org/tosca/ns/2011/12/ToscaBaseTypes}ScriptArtifact", - "artifactRef": "{http://opentosca.org/artifacttemplates}Pi_Estimation_DA" - } - ] - }, - "policies": { - "policy": [] - } + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [ + { + "documentation": [], + "any": [], + "otherAttributes": {}, + "name": "Pi_Estimation_DA", + "artifactType": "{http://docs.oasis-open.org/tosca/ns/2011/12/ToscaBaseTypes}ScriptArtifact", + "artifactRef": "{http://opentosca.org/artifacttemplates}Pi_Estimation_DA" + } + ], + "policies": [] }, { "documentation": [], @@ -231,18 +199,10 @@ "maxInstances": "1", "x": 501, "y": 419, - "capabilities": { - "capability": [] - }, - "requirements": { - "requirement": [] - }, - "deploymentArtifacts": { - "deploymentArtifact": [] - }, - "policies": { - "policy": [] - } + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [], + "policies": [] } ] } \ No newline at end of file diff --git a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/apache-spark-on-vsphere-result.json b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/apache-spark-on-vsphere-result.json index 64af84514e..78fad5e6c9 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/apache-spark-on-vsphere-result.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/apache-spark-on-vsphere-result.json @@ -84,8 +84,8 @@ }, "properties": { "propertyType": "KV", - "namespace" : "http://www.example.org", - "elementName" : "Properties", + "namespace": "http://www.example.org", + "elementName": "Properties", "kvproperties": { "HypervisorEndpoint": "https://iaasvc.informatik.uni-stuttgart.de/sdk", "HypervisorTenantID": "smartservices", @@ -110,8 +110,8 @@ }, "properties": { "propertyType": "KV", - "namespace" : "http://www.example.org", - "elementName" : "Properties", + "namespace": "http://www.example.org", + "elementName": "Properties", "kvproperties": { "VMIP": "", "VMInstanceID": "", @@ -160,18 +160,16 @@ "maxInstances": "1", "x": "740", "y": "46", - "deploymentArtifacts": { - "deploymentArtifact": [ - { - "documentation": [], - "any": [], - "otherAttributes": {}, - "name": "Pi_Estimation_DA", - "artifactType": "{http://docs.oasis-open.org/tosca/ns/2011/12/ToscaBaseTypes}ScriptArtifact", - "artifactRef": "{http://opentosca.org/artifacttemplates}Pi_Estimation_DA" - } - ] - } + "deploymentArtifacts": [ + { + "documentation": [], + "any": [], + "otherAttributes": {}, + "name": "Pi_Estimation_DA", + "artifactType": "{http://docs.oasis-open.org/tosca/ns/2011/12/ToscaBaseTypes}ScriptArtifact", + "artifactRef": "{http://opentosca.org/artifacttemplates}Pi_Estimation_DA" + } + ] }, { "documentation": [], diff --git a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/baobab_topologytemplate_v2-with-empty-objects.json b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/baobab_topologytemplate_v2-with-empty-objects.json index bf0cb68588..7699782fd4 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/baobab_topologytemplate_v2-with-empty-objects.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/baobab_topologytemplate_v2-with-empty-objects.json @@ -37,9 +37,9 @@ "maxInstances": "1", "y": "287", "x": "678", - "policies": {}, - "requirements": {}, - "capabilities": {} + "policies": [], + "requirements": [], + "capabilities": [] } ] } \ No newline at end of file diff --git a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/newVersion.json b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/newVersion.json index f94aaa95f5..a76919fdb8 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/newVersion.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/newVersion.json @@ -35,102 +35,98 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "451" }, "type": "{http://plain.winery.opentosca.org/nodetypes}NodeTypeWithThreeReqCapPairsCoveringAllReqCapVariants", - "requirements": { - "requirement": [ - { - "id": "req1", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://plain.winery.opentosca.org/requirementtypes}RequirementTypeWithoutProperties", - "name": "RequirementDefinition-RequirementTypeWithoutProperties" + "requirements": [ + { + "id": "req1", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { }, - { - "id": "req2", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "properties": { - "propertyType": "KV", - "namespace": "http://plain.winery.opentosca.org/requirementtypes/propertiesdefinition/winery", - "elementName": "properties", - "kvproperties": { - "key1": "val1", - "key2": "val2" - } - }, - "type": "{http://plain.winery.opentosca.org/requirementtypes}RequirementWithTwoKvProperties", - "name": "RequirementDefinition-RequirementTypeWithTwoKvProperties" + "type": "{http://plain.winery.opentosca.org/requirementtypes}RequirementTypeWithoutProperties", + "name": "RequirementDefinition-RequirementTypeWithoutProperties" + }, + { + "id": "req2", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { }, - { - "id": "req3", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "properties": { - "propertyType": "XML", - "any": "\n\n NameAddressCityCountry\n Title55.5\n \n " - }, - "type": "{http://plain.winery.opentosca.org/requirementtypes}RequirementTypeWithXmlElementProperty", - "name": "RequirementDefinition-RequirementTypeWithXmlElementProperty" - } - ] - }, - "capabilities": { - "capability": [ - { - "id": "cap1", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://plain.winery.opentosca.org/capabilitytypes}CapabilityTypeWithoutProperties", - "name": "CapabilityDefinition-CapabilityTypeWithoutProperties" + "properties": { + "propertyType": "KV", + "namespace": "http://plain.winery.opentosca.org/requirementtypes/propertiesdefinition/winery", + "elementName": "properties", + "kvproperties": { + "key1": "val1", + "key2": "val2" + } }, - { - "id": "cap2", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "properties": { - "propertyType": "KV", - "namespace": "http://plain.winery.opentosca.org/capabilitytypes/propertiesdefinition/winery", - "elementName": "properties", - "kvproperties": { - "key1": "", - "key2": "" - } - }, - "type": "{http://plain.winery.opentosca.org/capabilitytypes}CapabilitiyTypeWithTwoKvProperties", - "name": "CapabilityDefinition-CapabilityTypeWithTwoKvProperties" + "type": "{http://plain.winery.opentosca.org/requirementtypes}RequirementWithTwoKvProperties", + "name": "RequirementDefinition-RequirementTypeWithTwoKvProperties" + }, + { + "id": "req3", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { }, - { - "id": "cap3", - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "type": "{http://plain.winery.opentosca.org/capabilitytypes}CapabilityTypeWithXmlElementProperty", - "name": "CapabilityDefinition-CapabilityTypeWithXmlElementProperty" - } - ] - }, + "properties": { + "propertyType": "XML", + "any": "\n\n NameAddressCityCountry\n Title55.5\n \n " + }, + "type": "{http://plain.winery.opentosca.org/requirementtypes}RequirementTypeWithXmlElementProperty", + "name": "RequirementDefinition-RequirementTypeWithXmlElementProperty" + } + ], + "capabilities": [ + { + "id": "cap1", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://plain.winery.opentosca.org/capabilitytypes}CapabilityTypeWithoutProperties", + "name": "CapabilityDefinition-CapabilityTypeWithoutProperties" + }, + { + "id": "cap2", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "properties": { + "propertyType": "KV", + "namespace": "http://plain.winery.opentosca.org/capabilitytypes/propertiesdefinition/winery", + "elementName": "properties", + "kvproperties": { + "key1": "", + "key2": "" + } + }, + "type": "{http://plain.winery.opentosca.org/capabilitytypes}CapabilitiyTypeWithTwoKvProperties", + "name": "CapabilityDefinition-CapabilityTypeWithTwoKvProperties" + }, + { + "id": "cap3", + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "type": "{http://plain.winery.opentosca.org/capabilitytypes}CapabilityTypeWithXmlElementProperty", + "name": "CapabilityDefinition-CapabilityTypeWithXmlElementProperty" + } + ], "name": "NodeTypeWithThreeReqCapPairsCoveringAllReqCapVariants", "minInstances": 1, "maxInstances": "1", @@ -149,21 +145,19 @@ "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "147" }, "type": "{http://plain.winery.opentosca.org/nodetypes}NodeTypeWithOneReqCapPairWithoutProperties", - "policies": { - "policy": [ - { - "documentation": [ - ], - "any": [ - ], - "otherAttributes": { - }, - "name": "sdf", - "policyType": "{http://plain.winery.opentosca.org/policytypes}PolicyTypeWithXmlElementProperty", - "policyRef": "{http://plain.winery.opentosca.org/policytemplates}PolicyTemplateWithXmlElementProperty-PolicyTypeWithXmlElementProperty" - } - ] - }, + "policies": [ + { + "documentation": [ + ], + "any": [ + ], + "otherAttributes": { + }, + "name": "sdf", + "policyType": "{http://plain.winery.opentosca.org/policytypes}PolicyTypeWithXmlElementProperty", + "policyRef": "{http://plain.winery.opentosca.org/policytemplates}PolicyTemplateWithXmlElementProperty-PolicyTypeWithXmlElementProperty" + } + ], "name": "NodeTypeWithOneReqCapPairWithoutProperties", "minInstances": 1, "maxInstances": "1", diff --git a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/topologytemplates/plain-TopologyTemplateMinimalExampleWithAllPropertyVariants_w1-wip1.json b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/topologytemplates/plain-TopologyTemplateMinimalExampleWithAllPropertyVariants_w1-wip1.json index 64dc0c227b..8491fbad95 100644 --- a/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/topologytemplates/plain-TopologyTemplateMinimalExampleWithAllPropertyVariants_w1-wip1.json +++ b/org.eclipse.winery.repository.rest/src/test/resources/servicetemplates/topologytemplates/plain-TopologyTemplateMinimalExampleWithAllPropertyVariants_w1-wip1.json @@ -1,223 +1,149 @@ { - "documentation":[ - + "documentation": [ ], - "any":[ - + "any": [ ], - "otherAttributes":{ - + "otherAttributes": { }, - "relationshipTemplates":[ + "relationshipTemplates": [ { - "documentation":[ - + "documentation": [ ], - "any":[ - + "any": [ ], - "otherAttributes":{ - + "otherAttributes": { }, - "sourceElement":{ - "ref":"NodeTypeWithoutProperties" + "sourceElement": { + "ref": "NodeTypeWithoutProperties" }, - "targetElement":{ - "ref":"NodeTypeWithTwoKVProperties" + "targetElement": { + "ref": "NodeTypeWithTwoKVProperties" }, - "name":"con_16", - "id":"NodeTypeWithoutProperties_RelationshipTypeWithoutProperties_NodeTypeWithTwoKVProperties", - "type":"{http://plain.winery.opentosca.org/relationshiptypes}RelationshipTypeWithoutProperties" + "name": "con_16", + "id": "NodeTypeWithoutProperties_RelationshipTypeWithoutProperties_NodeTypeWithTwoKVProperties", + "type": "{http://plain.winery.opentosca.org/relationshiptypes}RelationshipTypeWithoutProperties" }, { - "documentation":[ - + "documentation": [ ], - "any":[ - + "any": [ ], - "otherAttributes":{ - + "otherAttributes": { }, - "sourceElement":{ - "ref":"NodeTypeWithoutProperties" + "sourceElement": { + "ref": "NodeTypeWithoutProperties" }, - "targetElement":{ - "ref":"NodeTypeWithXmlElementProperty" + "targetElement": { + "ref": "NodeTypeWithXmlElementProperty" }, - "name":"con_28", - "id":"NodeTypeWithoutProperties_RelationshipTypeWithTwoKvPropertie_NodeTypeWithXmlElementProperty", - "type":"{http://plain.winery.opentosca.org/relationshiptypes}RelationshipTypeWithTwoKvPropertie" + "name": "con_28", + "id": "NodeTypeWithoutProperties_RelationshipTypeWithTwoKvPropertie_NodeTypeWithXmlElementProperty", + "type": "{http://plain.winery.opentosca.org/relationshiptypes}RelationshipTypeWithTwoKvPropertie" }, { - "documentation":[ - + "documentation": [ ], - "any":[ - + "any": [ ], - "otherAttributes":{ - + "otherAttributes": { }, - "sourceElement":{ - "ref":"NodeTypeWithTwoKVProperties" + "sourceElement": { + "ref": "NodeTypeWithTwoKVProperties" }, - "targetElement":{ - "ref":"NodeTypeWithXmlElementProperty" + "targetElement": { + "ref": "NodeTypeWithXmlElementProperty" }, - "name":"con_40", - "id":"NodeTypeWithTwoKVProperties_RelationshipTypeWithXmlElementProperty_NodeTypeWithXmlElementProperty", - "type":"{http://plain.winery.opentosca.org/relationshiptypes}RelationshipTypeWithXmlElementProperty" + "name": "con_40", + "id": "NodeTypeWithTwoKVProperties_RelationshipTypeWithXmlElementProperty_NodeTypeWithXmlElementProperty", + "type": "{http://plain.winery.opentosca.org/relationshiptypes}RelationshipTypeWithXmlElementProperty" } ], - "nodeTemplates":[ + "nodeTemplates": [ { - "documentation":[ - + "documentation": [ ], - "any":[ - + "any": [ ], - "otherAttributes":{ - "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}location":"", - "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}x":"617", - "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y":"44" - }, - "properties":{ - - }, - "id":"NodeTypeWithoutProperties", - "type":"{http://plain.winery.opentosca.org/nodetypes}NodeTypeWithoutProperties", - "name":"NodeTypeWithoutProperties", - "minInstances":1, - "maxInstances":"1", - "x":617, - "y":44, - "capabilities":{ - "capability":[ - - ] - }, - "requirements":{ - "requirement":[ - - ] - }, - "deploymentArtifacts":{ - - }, - "policies":{ - "policy":[ - - ] - }, - "artifacts":{ - "artifact":[ - - ] - } + "otherAttributes": { + "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}location": "", + "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}x": "617", + "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "44" + }, + "properties": { + }, + "id": "NodeTypeWithoutProperties", + "type": "{http://plain.winery.opentosca.org/nodetypes}NodeTypeWithoutProperties", + "name": "NodeTypeWithoutProperties", + "minInstances": 1, + "maxInstances": "1", + "x": 617, + "y": 44, + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [], + "policies": [], + "artifacts": [] }, { - "documentation":[ - + "documentation": [ ], - "any":[ - + "any": [ ], - "otherAttributes":{ - "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}location":"", - "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}x":"874", - "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y":"462" + "otherAttributes": { + "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}location": "", + "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}x": "874", + "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "462" }, - "properties":{ + "properties": { "propertyType": "XML", - "any":"\n\n NameAddressCityCountry\n Title55.5\n \n " - }, - "id":"NodeTypeWithXmlElementProperty", - "type":"{http://plain.winery.opentosca.org/nodetypes}NodeTypeWithXmlElementProperty", - "name":"NodeTypeWithXmlElementProperty", - "minInstances":1, - "maxInstances":"1", - "x":874, - "y":462, - "capabilities":{ - "capability":[ - - ] - }, - "requirements":{ - "requirement":[ - - ] - }, - "deploymentArtifacts":{ - - }, - "policies":{ - "policy":[ - - ] - }, - "artifacts":{ - "artifact":[ - - ] - } + "any": "\n\n NameAddressCityCountry\n Title55.5\n \n " + }, + "id": "NodeTypeWithXmlElementProperty", + "type": "{http://plain.winery.opentosca.org/nodetypes}NodeTypeWithXmlElementProperty", + "name": "NodeTypeWithXmlElementProperty", + "minInstances": 1, + "maxInstances": "1", + "x": 874, + "y": 462, + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [], + "policies": [ + ], + "artifacts": [] }, { - "documentation":[ - + "documentation": [ ], - "any":[ - + "any": [ ], - "otherAttributes":{ - "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}location":"", - "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}x":"387", - "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y":"461" + "otherAttributes": { + "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}location": "", + "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}x": "387", + "{http://www.opentosca.org/winery/extensions/tosca/2013/02/12}y": "461" }, - "properties":{ + "properties": { "propertyType": "KV", - "kvproperties":{ - "key1":"testValue", - "key2":"" + "kvproperties": { + "key1": "testValue", + "key2": "" } }, - "id":"NodeTypeWithTwoKVProperties", - "type":"{http://plain.winery.opentosca.org/nodetypes}NodeTypeWithTwoKVProperties", - "name":"NodeTypeWithTwoKVProperties", - "minInstances":1, - "maxInstances":"1", - "x":387, - "y":461, - "capabilities":{ - "capability":[ - - ] - }, - "requirements":{ - "requirement":[ - - ] - }, - "deploymentArtifacts":{ - - }, - "policies":{ - "policy":[ - - ] - }, - "artifacts":{ - "artifact":[ - - ] - } + "id": "NodeTypeWithTwoKVProperties", + "type": "{http://plain.winery.opentosca.org/nodetypes}NodeTypeWithTwoKVProperties", + "name": "NodeTypeWithTwoKVProperties", + "minInstances": 1, + "maxInstances": "1", + "x": 387, + "y": 461, + "capabilities": [], + "requirements": [], + "deploymentArtifacts": [], + "policies": [ + ], + "artifacts": [] } ], - "policies":{ - "policy":[ - - ] - } + "policies": [ + ] } \ No newline at end of file diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/TestWithGitBackedRepository.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/TestWithGitBackedRepository.java index 89f78f02eb..9717d05236 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/TestWithGitBackedRepository.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/TestWithGitBackedRepository.java @@ -16,13 +16,15 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; import org.eclipse.winery.common.configuration.FileBasedRepositoryConfiguration; import org.eclipse.winery.common.configuration.GitBasedRepositoryConfiguration; import org.eclipse.winery.common.configuration.RepositoryConfigurationObject; import org.eclipse.winery.model.ids.definitions.NodeTypeId; +import org.eclipse.winery.model.tosca.TInstanceState; import org.eclipse.winery.model.tosca.TNodeType; -import org.eclipse.winery.model.tosca.TTopologyElementInstanceStates; import org.eclipse.winery.repository.backend.BackendUtils; import org.eclipse.winery.repository.backend.IRepository; import org.eclipse.winery.repository.backend.RepositoryFactory; @@ -117,11 +119,9 @@ protected void setRevisionTo(String ref) throws GitAPIException { protected void makeSomeChanges(NodeTypeId id) throws Exception { IRepository repo = RepositoryFactory.getRepository(); TNodeType element = repo.getElement(id); - TTopologyElementInstanceStates states = new TTopologyElementInstanceStates(); - TTopologyElementInstanceStates.InstanceState instanceState = new TTopologyElementInstanceStates.InstanceState(); - instanceState.setState("mySuperExtraStateWhichNobodyWouldHaveGuessed"); - states.getInstanceState().add(instanceState); - element.setInstanceStates(states); + List instanceState = new ArrayList<>(); + instanceState.add(new TInstanceState("mySuperExtraStateWhichNobodyWouldHaveGuessed")); + element.setInstanceStates(instanceState); BackendUtils.persist(repo, id, element); } } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/AbstractNamespaceManager.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/AbstractNamespaceManager.java index 80f7e03a07..b9d0c4180b 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/AbstractNamespaceManager.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/AbstractNamespaceManager.java @@ -76,7 +76,7 @@ public String generatePrefixProposal(String namespace, int round) { // Fallback if no slashes are in the namespace - just count from ns0 onwards return String.format("ns%d", round); } else { - boolean isWineryPropertiesDefinitionNamespace = namespace.endsWith(TEntityType.NS_SUFFIX_PROPERTIESDEFINITION_WINERY); + boolean isWineryPropertiesDefinitionNamespace = namespace.endsWith(TEntityType.NS_SUFFIX_PROPERTIES_DEFINITION_WINERY); String suffix; if (isWineryPropertiesDefinitionNamespace) { suffix = "pd"; diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/BackendUtils.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/BackendUtils.java index 345f8f43c5..a7e3c128c2 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/BackendUtils.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/BackendUtils.java @@ -21,11 +21,11 @@ import java.io.InputStreamReader; import java.io.Reader; import java.io.StringWriter; -import java.io.UnsupportedEncodingException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.net.URI; import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.nio.file.FileVisitResult; import java.nio.file.Files; @@ -102,20 +102,16 @@ 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.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TEntityType; import org.eclipse.winery.model.tosca.TExtensibleElements; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; -import org.eclipse.winery.model.tosca.TImplementationArtifacts.ImplementationArtifact; +import org.eclipse.winery.model.tosca.TImplementationArtifact; import org.eclipse.winery.model.tosca.TImport; 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.TPlan; -import org.eclipse.winery.model.tosca.TPlans; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicyTemplate; import org.eclipse.winery.model.tosca.TPolicyType; import org.eclipse.winery.model.tosca.TRelationshipTemplate; @@ -174,7 +170,6 @@ import org.w3c.dom.Element; import org.w3c.dom.ls.LSInput; import org.xml.sax.ErrorHandler; -import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import static java.nio.file.FileVisitResult.CONTINUE; @@ -210,9 +205,7 @@ public static boolean isFileNewerThanModifiedDate(long millis, String modified) if (modifiedDate != null) { // modifiedDate does not carry milliseconds, but fileDate does // therefore we have to do a range-based comparison - if ((millis - modifiedDate.getTime()) < DateUtils.MILLIS_PER_SECOND) { - return false; - } + return (millis - modifiedDate.getTime()) >= DateUtils.MILLIS_PER_SECOND; } return true; @@ -232,7 +225,7 @@ public static T getDefinitionsChildId(Class id return BackendUtils.getDefinitionsChildId(idClass, qname.getNamespaceURI(), qname.getLocalPart(), false); } - public static T getDefinitionsChildId(Class idClass, String namespace, String id, boolean URLencoded) { + public static T getDefinitionsChildId(Class idClass, String namespace, String id, boolean urlEncoded) { Constructor constructor; try { constructor = idClass.getConstructor(String.class, String.class, boolean.class); @@ -242,7 +235,7 @@ public static T getDefinitionsChildId(Class id } T tcId; try { - tcId = constructor.newInstance(namespace, id, URLencoded); + tcId = constructor.newInstance(namespace, id, urlEncoded); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { BackendUtils.LOGGER.error("Could not create id instance", e); @@ -290,9 +283,9 @@ public static String getName(DefinitionsChildId instanceId, IRepository repo) th /** * Do not use this for creating URLs. Use {@link Util#getUrlPath(java.lang.String)} or - * RestUtils#getAbsoluteURL(org.eclipse.winery.common.ids.GenericId instead. + * RestUtils#getAbsoluteURL(org.eclipse.winery.common.ids.GenericId) instead. * - * @return the path starting from the root element to the current element. Separated by "/", URLencoded, but + * @return the path starting from the root element to the current element. Separated by "/", URL-encoded, but * not double encoded. With trailing slash if sub-resources can exist * @throws IllegalStateException if id is of an unknown subclass of id */ @@ -304,7 +297,7 @@ public static String getPathInsideRepo(GenericId id) { * Do not use this for creating URLs. Use {@link Util#getUrlPath(java.lang.String)} or * RestUtils#getAbsoluteURL(org.eclipse.winery.common.ids.GenericId) instead. * - * @return the path starting from the root element to the current element. Separated by "/", parent URLencoded. + * @return the path starting from the root element to the current element. Separated by "/", parent URL-encoded. * Without trailing slash. */ public static String getPathInsideRepo(RepositoryFileReference ref) { @@ -312,8 +305,8 @@ public static String getPathInsideRepo(RepositoryFileReference ref) { } /** - * Returns the filename with its containing subdirectory. If the file doesn't lie in a sub directory, it only - * returns the filename. + * Returns the filename with its containing subdirectory. If the file doesn't lie in a subdirectory, it only returns + * the filename. * * @return the filename and the file's potential subdirectory. */ @@ -421,11 +414,7 @@ public static List getAllNestedNodeTemplates(TServiceTemplate ser } @NonNull - private static Collection getAllReferencedArtifactTemplates(TDeploymentArtifacts tDeploymentArtifacts) { - if (tDeploymentArtifacts == null) { - return Collections.emptyList(); - } - List deploymentArtifacts = tDeploymentArtifacts.getDeploymentArtifact(); + private static Collection getAllReferencedArtifactTemplatesInDAs(List deploymentArtifacts) { if (deploymentArtifacts == null) { return Collections.emptyList(); } @@ -439,16 +428,13 @@ private static Collection getAllReferencedArtifactTemplates(TDeploymentAr return res; } - private static Collection getAllReferencedArtifactTemplates(TImplementationArtifacts tImplementationArtifacts) { - if (tImplementationArtifacts == null) { - return Collections.emptyList(); - } - List implementationArtifacts = tImplementationArtifacts.getImplementationArtifact(); + private static Collection getAllReferencedArtifactTemplatesInIAs(List implementationArtifacts) { if (implementationArtifacts == null) { return Collections.emptyList(); } + Collection res = new ArrayList<>(); - for (ImplementationArtifact ia : implementationArtifacts) { + for (TImplementationArtifact ia : implementationArtifacts) { QName artifactRef = ia.getArtifactRef(); if (artifactRef != null) { res.add(artifactRef); @@ -458,22 +444,21 @@ private static Collection getAllReferencedArtifactTemplates(TImplementati } public static Collection getArtifactTemplatesOfReferencedDeploymentArtifacts(TNodeTemplate nodeTemplate, IRepository repo) { - List l = new ArrayList<>(); // DAs may be assigned directly to a node template - Collection allReferencedArtifactTemplates = BackendUtils.getAllReferencedArtifactTemplates(nodeTemplate.getDeploymentArtifacts()); - l.addAll(allReferencedArtifactTemplates); + Collection allReferencedArtifactTemplates = getAllReferencedArtifactTemplatesInDAs(nodeTemplate.getDeploymentArtifacts()); + List list = new ArrayList<>(allReferencedArtifactTemplates); // DAs may be assigned via node type implementations QName nodeTypeQName = nodeTemplate.getType(); Collection allNodeTypeImplementations = repo.getAllElementsReferencingGivenType(NodeTypeImplementationId.class, nodeTypeQName); for (NodeTypeImplementationId nodeTypeImplementationId : allNodeTypeImplementations) { - TDeploymentArtifacts deploymentArtifacts = repo.getElement(nodeTypeImplementationId).getDeploymentArtifacts(); - allReferencedArtifactTemplates = BackendUtils.getAllReferencedArtifactTemplates(deploymentArtifacts); - l.addAll(allReferencedArtifactTemplates); + List deploymentArtifacts = repo.getElement(nodeTypeImplementationId).getDeploymentArtifacts(); + allReferencedArtifactTemplates = getAllReferencedArtifactTemplatesInDAs(deploymentArtifacts); + list.addAll(allReferencedArtifactTemplates); } - return l; + return list; } public static Collection getArtifactTemplatesOfReferencedImplementationArtifacts(TNodeTemplate nodeTemplate, IRepository repo) { @@ -483,8 +468,8 @@ public static Collection getArtifactTemplatesOfReferencedImplementationAr QName nodeTypeQName = nodeTemplate.getType(); Collection allNodeTypeImplementations = repo.getAllElementsReferencingGivenType(NodeTypeImplementationId.class, nodeTypeQName); for (NodeTypeImplementationId nodeTypeImplementationId : allNodeTypeImplementations) { - TImplementationArtifacts implementationArtifacts = repo.getElement(nodeTypeImplementationId).getImplementationArtifacts(); - Collection allReferencedArtifactTemplates = BackendUtils.getAllReferencedArtifactTemplates(implementationArtifacts); + List implementationArtifacts = repo.getElement(nodeTypeImplementationId).getImplementationArtifacts(); + Collection allReferencedArtifactTemplates = getAllReferencedArtifactTemplatesInIAs(implementationArtifacts); l.addAll(allReferencedArtifactTemplates); } @@ -492,23 +477,23 @@ public static Collection getArtifactTemplatesOfReferencedImplementationAr } /** - * Creates a new TDefintions element wrapping a definition child. The namespace of the tosca component is used as + * Creates a new TDefinitions element wrapping a definition child. The namespace of the tosca component is used as * namespace and {@code winery-defs-for-} concatenated with the (unique) ns prefix and idOfContainedElement is used * as id * * @param tcId the id of the element the wrapper is used for * @param defs the definitions to update - * @return a definitions element prepared for wrapping a definition child + * @return a definitions' element prepared for wrapping a definition child */ public static TDefinitions updateWrapperDefinitions(DefinitionsChildId tcId, TDefinitions defs, IRepository repo) { // set target namespace // an internal namespace is not possible - // a) tPolicyTemplate and tArtfactTemplate do NOT support the "targetNamespace" attribute - // b) the imports statement would look bad as it always imported the artificial namespace + // a) tPolicyTemplate and tArtifactTemplate do NOT support the "targetNamespace" attribute + // b) the imports' statement would look bad as it always imported the artificial namespace defs.setTargetNamespace(tcId.getNamespace().getDecoded()); - // set a unique id to create a valid definitions element - // we do not use UUID to be more human readable and deterministic (for debugging) + // set a unique id to create a valid definitions' element + // we do not use UUID to be more human-readable and deterministic (for debugging) String prefix = repo.getNamespaceManager().getPrefix(tcId.getNamespace()); String elId = tcId.getXmlId().getDecoded(); defs.setId(prefix + "-" + elId); @@ -543,7 +528,7 @@ public static TNodeTemplate clone(TNodeTemplate nodeTemplate) { nodeTemplateClone.setMinInstances(nodeTemplate.getMinInstances()); nodeTemplateClone.setName(nodeTemplate.getName()); if (nodeTemplate.getPolicies() != null) { - nodeTemplateClone.setPolicies(new TPolicies(new ArrayList<>(nodeTemplate.getPolicies().getPolicy()))); + nodeTemplateClone.setPolicies(new ArrayList<>(nodeTemplate.getPolicies())); } nodeTemplateClone.setRequirements(nodeTemplate.getRequirements()); nodeTemplateClone.setCapabilities(nodeTemplate.getCapabilities()); @@ -588,7 +573,7 @@ public static TRelationshipTemplate clone(TRelationshipTemplate relationshipTemp relationshipTemplateClone.setName(relationshipTemplate.getName()); relationshipTemplateClone.setRelationshipConstraints(relationshipTemplate.getRelationshipConstraints()); if (relationshipTemplateClone.getPolicies() != null) { - relationshipTemplateClone.setPolicies(new TPolicies(new ArrayList<>(relationshipTemplate.getPolicies().getPolicy()))); + relationshipTemplateClone.setPolicies(new ArrayList<>(relationshipTemplate.getPolicies())); } String transferType = @@ -601,13 +586,13 @@ public static TRelationshipTemplate clone(TRelationshipTemplate relationshipTemp } /* - * Creates a new TDefintions element wrapping a definition child. + * Creates a new TDefinitions element wrapping a definition child. * The namespace of the definition child is used as namespace and * {@code winery-defs-for-} concatenated with the (unique) ns prefix and * idOfContainedElement is used as id * * @param tcId the id of the element the wrapper is used for - * @return a definitions element prepared for wrapping a definition child instance + * @return a definitions' element prepared for wrapping a definition child instance */ public static TDefinitions createWrapperDefinitions(DefinitionsChildId tcId, IRepository repo) { TDefinitions defs = new TDefinitions(); @@ -811,12 +796,7 @@ public String getEncoding() { @Override public Reader getCharacterStream() { - try { - return new InputStreamReader(is, "UTF-8"); - } catch (UnsupportedEncodingException e) { - System.out.println("exeption"); - throw new IllegalStateException("UTF-8 is unkown", e); - } + return new InputStreamReader(is, StandardCharsets.UTF_8); } @Override @@ -971,13 +951,13 @@ public static void deriveWPD(TEntityType ci, List errors, IRepository re public SortedSet getAllTOSCAElementIds(Class idClass) { throw new IllegalStateException("Not yet implemented"); - /* - Implementation idea: - * switch of instance of idClass - * nodetemplate / relationshiptemplate -> fetch all service templates -> crawl through topology -> add all to res - * req/cap do as above, but inspect nodetemplate - * (other special handlings; check spec where each type can be linked from) - */ + /* + Implementation idea: + * switch of instance of idClass + * nodetemplate / relationshiptemplate -> fetch all service templates -> crawl through topology -> add all to res + * req/cap do as above, but inspect nodetemplate + * (other special handling; check spec where each type can be linked from) + */ } /** @@ -1005,8 +985,7 @@ public static MediaType getMimeType(BufferedInputStream bis, String fn) throws I Detector detector = parser.getDetector(); Metadata md = new Metadata(); md.add(Metadata.RESOURCE_NAME_KEY, fn); - final MediaType mediaType = detector.detect(bis, md); - return mediaType; + return detector.detect(bis, md); } /** @@ -1062,9 +1041,9 @@ public static GitInfo getGitInformation(DirectoryId directoryId, IRepository rep RepositoryFileReference ref = BackendUtils.getRefOfDefinitions((ArtifactTemplateId) directoryId.getParent()); try { TDefinitions defs = repo.definitionsFromRef(ref); - Map atts = defs.getOtherAttributes(); - String src = atts.get(new QName(Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE, "gitsrc")); - String branch = atts.get(new QName(Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE, "gitbranch")); + Map attributes = defs.getOtherAttributes(); + String src = attributes.get(new QName(Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE, "gitsrc")); + String branch = attributes.get(new QName(Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE, "gitbranch")); if (src == null && branch == null) { return null; } @@ -1125,11 +1104,24 @@ public static boolean isGlobMatch(String glob, Path path) { return matcher.matches(path); } - public static boolean injectArtifactTemplateIntoDeploymentArtifact(ServiceTemplateId serviceTemplate, String nodeTemplateId, String deploymentArtifactId, ArtifactTemplateId artifactTemplate, IRepository repo) throws IOException { + public static void injectArtifactTemplateIntoDeploymentArtifact(ServiceTemplateId serviceTemplate, String nodeTemplateId, String deploymentArtifactId, ArtifactTemplateId artifactTemplate, IRepository repo) throws IOException { TServiceTemplate element = repo.getElement(serviceTemplate); - element.getTopologyTemplate().getNodeTemplate(nodeTemplateId).getDeploymentArtifacts().getDeploymentArtifact(deploymentArtifactId).setArtifactRef(artifactTemplate.getQName()); - repo.setElement(serviceTemplate, element); - return true; + TTopologyTemplate topologyTemplate = element.getTopologyTemplate(); + if (topologyTemplate != null) { + TNodeTemplate nodeTemplate = topologyTemplate.getNodeTemplate(nodeTemplateId); + if (nodeTemplate != null) { + List deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); + if (deploymentArtifacts != null) { + deploymentArtifacts.stream() + .filter(x -> deploymentArtifactId.equals(x.getName())) + .findAny() + .ifPresent(artifact -> + artifact.setArtifactRef(artifactTemplate.getQName()) + ); + repo.setElement(serviceTemplate, element); + } + } + } } /** @@ -1138,17 +1130,17 @@ public static boolean injectArtifactTemplateIntoDeploymentArtifact(ServiceTempla * @param wrapperElementLocalName the local name of the wrapper element */ public static String getImportLocationForWinerysPropertiesDefinitionXSD(EntityTypeId tcId, URI uri, String wrapperElementLocalName) { - String loc = Util.getPathInsideRepo(tcId); - loc = loc + "propertiesdefinition/"; - loc = Util.getUrlPath(loc); + StringBuilder loc = new StringBuilder(Util.getPathInsideRepo(tcId)); + loc.append("propertiesdefinition/"); + loc.append(Util.getUrlPath(loc.toString())); if (uri == null) { - loc = loc + wrapperElementLocalName + ".xsd"; + loc.append(wrapperElementLocalName) + .append(".xsd"); // for the import later, we need "../" in front - loc = "../" + loc; + return "../" + loc; } else { - loc = uri + loc + "xsd"; + return uri + loc.append("xsd").toString(); } - return loc; } /** @@ -1167,32 +1159,29 @@ public static TArtifactTemplate synchronizeReferences(IRepository repository, Ar TArtifactTemplate template = repository.getElement(id); List toRemove = new ArrayList<>(); List toAdd = new ArrayList<>(); - TArtifactTemplate.ArtifactReferences artifactReferences = template.getArtifactReferences(); + List artifactReferences = template.getArtifactReferences(); DirectoryId fileDir = new ArtifactTemplateFilesDirectoryId(id); SortedSet files = repository.getContainedFiles(fileDir); if (artifactReferences == null) { - artifactReferences = new TArtifactTemplate.ArtifactReferences(); + artifactReferences = new ArrayList<>(); template.setArtifactReferences(artifactReferences); } - List artRefList = artifactReferences.getArtifactReference(); - determineChanges(artRefList, files, toRemove, toAdd); + determineChanges(artifactReferences, files, toRemove, toAdd); if (toAdd.size() > 0 || toRemove.size() > 0) { // apply removal list - toRemove.forEach(artRefList::remove); + toRemove.forEach(artifactReferences::remove); // apply addition list - artRefList.addAll(toAdd.stream().map(fileRef -> { + artifactReferences.addAll(toAdd.stream().map(fileRef -> { String path = Util.getUrlPath(fileRef); // put path into data structure // we do not use Include/Exclude as we directly reference a concrete file - TArtifactReference artRef = new TArtifactReference(); - artRef.setReference(path); - return artRef; + return new TArtifactReference.Builder(path).build(); }).collect(Collectors.toList())); // finally, persist only if something changed @@ -1245,31 +1234,25 @@ private static void determineChanges(List artRefList, Sorted public static void synchronizeReferences(ServiceTemplateId id, IRepository repository) throws IOException { final TServiceTemplate serviceTemplate = repository.getElement(id); // locally stored plans - TPlans plans = serviceTemplate.getPlans(); + List plans = serviceTemplate.getPlans(); // plans stored in the repository PlansId plansContainerId = new PlansId(id); SortedSet nestedPlans = repository.getNestedIds(plansContainerId, PlanId.class); - Set plansToAdd = new HashSet<>(); - plansToAdd.addAll(nestedPlans); + Set plansToAdd = new HashSet<>(nestedPlans); - if (nestedPlans.isEmpty()) { - if (plans == null) { - // data on the file system equals the data -> no plans - return; - } else { - //noinspection StatementWithEmptyBody - // we have to check for equality later - } + if (nestedPlans.isEmpty() && plans == null) { + // data on the file system equals the data -> no plans + return; } if (plans == null) { - plans = new TPlans(); + plans = new ArrayList<>(); serviceTemplate.setPlans(plans); } - for (Iterator iterator = plans.getPlan().iterator(); iterator.hasNext(); ) { + for (Iterator iterator = plans.iterator(); iterator.hasNext(); ) { TPlan plan = iterator.next(); if (plan.getPlanModel() != null) { // in case, a plan is directly contained in a Model element, we do not need to do anything @@ -1281,7 +1264,7 @@ public static void synchronizeReferences(ServiceTemplateId id, IRepository repos if ((ref == null) || ref.startsWith("../")) { // references to local plans start with "../" // special case (due to errors in the importer): empty PlanModelReference field - if (plan.getId() == null) { + if (plan.getId() == null || plan.getId().isEmpty()) { // invalid plan entry: no id. // we remove the entry iterator.remove(); @@ -1289,7 +1272,7 @@ public static void synchronizeReferences(ServiceTemplateId id, IRepository repos } PlanId planId = new PlanId(plansContainerId, new XmlId(plan.getId(), false)); if (nestedPlans.contains(planId)) { - // everything allright + // everything alright // we do NOT need to add the plan on the HDD to the XML plansToAdd.remove(planId); } else { @@ -1301,7 +1284,6 @@ public static void synchronizeReferences(ServiceTemplateId id, IRepository repos } // add all plans locally stored, but not contained in the XML, as plan element to the plans of the service template. - List thePlans = plans.getPlan(); for (PlanId planId : plansToAdd) { SortedSet files = repository.getContainedFiles(planId); if (files.size() != 1) { @@ -1309,11 +1291,13 @@ public static void synchronizeReferences(ServiceTemplateId id, IRepository repos } RepositoryFileReference ref = files.iterator().next(); - TPlan plan = new TPlan(); - plan.setId(planId.getXmlId().getDecoded()); - plan.setName(planId.getXmlId().getDecoded()); - plan.setPlanType(Constants.TOSCA_PLANTYPE_BUILD_PLAN); - plan.setPlanLanguage(Namespaces.URI_BPEL20_EXECUTABLE); + TPlan plan = new TPlan.Builder( + planId.getXmlId().getDecoded(), + Constants.TOSCA_PLANTYPE_BUILD_PLAN, + Namespaces.URI_BPEL20_EXECUTABLE + ) + .setName(planId.getXmlId().getDecoded()) + .build(); // create a PlanModelReferenceElement pointing to that file String path = Util.getUrlPath(ref); @@ -1323,10 +1307,10 @@ public static void synchronizeReferences(ServiceTemplateId id, IRepository repos pref.setReference(path); plan.setPlanModelReference(pref); - thePlans.add(plan); + plans.add(plan); } - if (serviceTemplate.getPlans().getPlan().isEmpty()) { + if (serviceTemplate.getPlans() != null && serviceTemplate.getPlans().isEmpty()) { serviceTemplate.setPlans(null); } @@ -1368,19 +1352,19 @@ public static ErrorHandler getErrorHandler(StringBuilder sb) { return new ErrorHandler() { @Override - public void warning(SAXParseException exception) throws SAXException { + public void warning(SAXParseException exception) { // we don't care } @Override - public void fatalError(SAXParseException exception) throws SAXException { + public void fatalError(SAXParseException exception) { sb.append("Fatal Error: "); sb.append(exception.getMessage()); sb.append("\n"); } @Override - public void error(SAXParseException exception) throws SAXException { + public void error(SAXParseException exception) { sb.append("Fatal Error: "); sb.append(exception.getMessage()); sb.append("\n"); @@ -1479,8 +1463,7 @@ public static Map mergeTopologyTemplateAinTopologyTemplateB(TTop Objects.requireNonNull(topologyTemplateA); Objects.requireNonNull(topologyTemplateB); - @SuppressWarnings("deprecated") - TTopologyTemplate topologyTemplateToBeMerged = new TTopologyTemplate(); + TTopologyTemplate topologyTemplateToBeMerged = new TTopologyTemplate.Builder().build(); Map idMapping = new HashMap<>(); Optional shiftLeft = topologyTemplateB.getNodeTemplateOrRelationshipTemplate().stream() @@ -1511,7 +1494,7 @@ public static Map mergeTopologyTemplateAinTopologyTemplateB(TTop // patch ids of reqs change them if required topologyTemplateToBeMerged.getNodeTemplates().stream() .filter(nt -> nt.getRequirements() != null) - .forEach(nt -> nt.getRequirements().getRequirement().forEach(oldReq -> { + .forEach(nt -> nt.getRequirements().forEach(oldReq -> { TRequirement req = SerializationUtils.clone(oldReq); ModelUtilities.generateNewIdOfTemplate(req, idMapping); @@ -1528,7 +1511,7 @@ public static Map mergeTopologyTemplateAinTopologyTemplateB(TTop // patch ids of caps change them if required topologyTemplateToBeMerged.getNodeTemplates().stream() .filter(nt -> nt.getCapabilities() != null) - .forEach(nt -> nt.getCapabilities().getCapability().forEach(oldCap -> { + .forEach(nt -> nt.getCapabilities().forEach(oldCap -> { TCapability cap = SerializationUtils.clone(oldCap); ModelUtilities.generateNewIdOfTemplate(cap, idMapping); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/IRepository.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/IRepository.java index 8ae6dca4c1..90d5e77194 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/IRepository.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/IRepository.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2012-2020 Contributors to the Eclipse Foundation + * Copyright (c) 2012-2021 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -67,27 +67,23 @@ import org.eclipse.winery.model.ids.extensions.TopologyFragmentRefinementModelId; import org.eclipse.winery.model.tosca.HasInheritance; import org.eclipse.winery.model.tosca.HasType; -import org.eclipse.winery.model.tosca.TAppliesTo; +import org.eclipse.winery.model.tosca.TArtifact; import org.eclipse.winery.model.tosca.TArtifactTemplate; -import org.eclipse.winery.model.tosca.TArtifacts; import org.eclipse.winery.model.tosca.TBoundaryDefinitions; import org.eclipse.winery.model.tosca.TCapability; import org.eclipse.winery.model.tosca.TCapabilityDefinition; 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.TDeploymentArtifacts; 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.TExtensibleElements; import org.eclipse.winery.model.tosca.TImplementationArtifact; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; import org.eclipse.winery.model.tosca.TInterfaceDefinition; 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.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TPolicyTemplate; import org.eclipse.winery.model.tosca.TPolicyType; @@ -293,7 +289,7 @@ default void putDefinition(DefinitionsChildId id, TDefinitions content) throws I *

* The returned configuration ensures that autoSave is activated * - * @param id may be a reference to a TOSCAcomponent or to a nested TOSCAelement + * @param id may be a reference to a TOSCA component or to a nested TOSCA element * @return a Configuration, where isAutoSave == true */ default Configuration getConfiguration(GenericId id) { @@ -423,7 +419,7 @@ default Map Map getAllQNameToElementMapping() { + default Map getAllQNameToElementMapping() { Map elements = new HashMap<>(); DefinitionsChildId.ALL_TOSCA_COMPONENT_ID_CLASSES.forEach((idClass) -> getAllDefinitionsChildIds(idClass) @@ -566,9 +562,9 @@ default Collection getAllElementsReferencingGi } if (!referencesGivenQName && element instanceof TEntityTypeImplementation) { - TImplementationArtifacts implementationArtifacts = ((TEntityTypeImplementation) element).getImplementationArtifacts(); + List implementationArtifacts = ((TEntityTypeImplementation) element).getImplementationArtifacts(); referencesGivenQName = Objects.nonNull(implementationArtifacts) && - implementationArtifacts.getImplementationArtifact() + implementationArtifacts .stream() .anyMatch(implementationArtifact -> qNameOfTheType.equals(implementationArtifact.getArtifactType()) || @@ -576,9 +572,9 @@ default Collection getAllElementsReferencingGi ); if (!referencesGivenQName && element instanceof TNodeTypeImplementation) { - TDeploymentArtifacts deploymentArtifacts = ((TNodeTypeImplementation) element).getDeploymentArtifacts(); + List deploymentArtifacts = ((TNodeTypeImplementation) element).getDeploymentArtifacts(); referencesGivenQName = Objects.nonNull(deploymentArtifacts) && - deploymentArtifacts.getDeploymentArtifact() + deploymentArtifacts .stream() .anyMatch(tDeploymentArtifact -> qNameOfTheType.equals(tDeploymentArtifact.getArtifactType()) || @@ -588,25 +584,21 @@ default Collection getAllElementsReferencingGi } if (!referencesGivenQName && element instanceof TPolicyType) { - TAppliesTo appliesTo = ((TPolicyType) element).getAppliesTo(); - referencesGivenQName = Objects.nonNull(appliesTo) && appliesTo.getNodeTypeReference() + referencesGivenQName = ((TPolicyType) element).getAppliesTo() .stream() .anyMatch(nodeTypeReference -> qNameOfTheType.equals(nodeTypeReference.getTypeRef())); } if (!referencesGivenQName && element instanceof TNodeType) { - TNodeType.RequirementDefinitions requirementDefinitions = ((TNodeType) element).getRequirementDefinitions(); + List requirementDefinitions = ((TNodeType) element).getRequirementDefinitions(); referencesGivenQName = Objects.nonNull(requirementDefinitions) && - requirementDefinitions.getRequirementDefinition() - .stream() + requirementDefinitions.stream() .anyMatch(tRequirementDefinition -> qNameOfTheType.equals(tRequirementDefinition.getRequirementType())); if (!referencesGivenQName) { - TNodeType.CapabilityDefinitions capabilityDefinitions = ((TNodeType) element).getCapabilityDefinitions(); + List capabilityDefinitions = ((TNodeType) element).getCapabilityDefinitions(); referencesGivenQName = Objects.nonNull(capabilityDefinitions) && - capabilityDefinitions - .getCapabilityDefinition() - .stream() + capabilityDefinitions.stream() .anyMatch(tCapabilityDefinition -> qNameOfTheType.equals(tCapabilityDefinition.getCapabilityType())); } } @@ -674,9 +666,8 @@ default Collection getReferencedDefinitionsChildIds(NodeType // Add all referenced requirement types, but only in XML mode. // For YAML mode add referenced RelationshipType and CapabilityType, if present - TNodeType.RequirementDefinitions reqDefsContainer = nodeType.getRequirementDefinitions(); - if (reqDefsContainer != null) { - List reqDefs = reqDefsContainer.getRequirementDefinition(); + List reqDefs = nodeType.getRequirementDefinitions(); + if (reqDefs != null) { for (TRequirementDefinition reqDef : reqDefs) { // if either of these is set, we're dealing with a type defined in YAML if (Objects.nonNull(reqDef.getRelationship()) || Objects.nonNull(reqDef.getCapability()) || Objects.nonNull(reqDef.getNode())) { @@ -697,10 +688,9 @@ default Collection getReferencedDefinitionsChildIds(NodeType } // add all referenced capability types - TNodeType.CapabilityDefinitions capDefsContainer = nodeType.getCapabilityDefinitions(); - if (capDefsContainer != null) { - List capDefs = capDefsContainer.getCapabilityDefinition(); - for (TCapabilityDefinition capDef : capDefs) { + List capabilityDefinitions = nodeType.getCapabilityDefinitions(); + if (capabilityDefinitions != null) { + for (TCapabilityDefinition capDef : capabilityDefinitions) { CapabilityTypeId capTypeId = new CapabilityTypeId(capDef.getCapabilityType()); ids.add(capTypeId); @@ -721,9 +711,9 @@ default Collection getReferencedDefinitionsChildIds(NodeType } // Store all referenced artifact types - TArtifacts artifacts = nodeType.getArtifacts(); + List artifacts = nodeType.getArtifacts(); if (Objects.nonNull(artifacts)) { - artifacts.getArtifact().forEach(a -> ids.add(new ArtifactTypeId(a.getType()))); + artifacts.forEach(a -> ids.add(new ArtifactTypeId(a.getType()))); } getReferencedDefinitionsOfProperties(ids, nodeType.getProperties()); @@ -767,9 +757,9 @@ default Collection getReferencedDefinitionsChildIds(NodeType final TNodeTypeImplementation element = this.getElement(id); // DAs - TDeploymentArtifacts deploymentArtifacts = element.getDeploymentArtifacts(); + List deploymentArtifacts = element.getDeploymentArtifacts(); if (deploymentArtifacts != null) { - for (TDeploymentArtifact da : deploymentArtifacts.getDeploymentArtifact()) { + for (TDeploymentArtifact da : deploymentArtifacts) { QName qname; if ((qname = da.getArtifactRef()) != null) { ids.add(new ArtifactTemplateId(qname)); @@ -800,10 +790,11 @@ default Collection getReferencedDefinitionsChildIds(Relation * @param implementationArtifacts the implementation artifacts belonging to the given id * @param id the id to handle */ - default Collection getReferencedTOSCAComponentImplementationArtifactIds - (Collection ids, TImplementationArtifacts implementationArtifacts, DefinitionsChildId id) { + default Collection getReferencedTOSCAComponentImplementationArtifactIds(Collection ids, + List implementationArtifacts, + DefinitionsChildId id) { if (implementationArtifacts != null) { - for (TImplementationArtifact ia : implementationArtifacts.getImplementationArtifact()) { + for (TImplementationArtifact ia : implementationArtifacts) { QName qname; if ((qname = ia.getArtifactRef()) != null) { ids.add(new ArtifactTemplateId(qname)); @@ -924,9 +915,9 @@ default Collection getReferencedDefinitionsChildIds(ServiceT TBoundaryDefinitions boundaryDefs; if ((boundaryDefs = serviceTemplate.getBoundaryDefinitions()) != null) { - TPolicies policies = boundaryDefs.getPolicies(); + List policies = boundaryDefs.getPolicies(); if (policies != null) { - for (TPolicy policy : policies.getPolicy()) { + for (TPolicy policy : policies) { PolicyTypeId policyTypeId = new PolicyTypeId(policy.getPolicyType()); ids.add(policyTypeId); PolicyTemplateId policyTemplateId = new PolicyTemplateId(policy.getPolicyRef()); @@ -941,10 +932,8 @@ default Collection getReferencedDefinitionsChildIds(ServiceT if (topology != null) { if (Objects.nonNull(topology.getPolicies())) { - topology - .getPolicies() - .getPolicy() - .stream().filter(Objects::nonNull) + topology.getPolicies().stream() + .filter(Objects::nonNull) .forEach(p -> { QName type = p.getPolicyType(); PolicyTypeId policyTypeIdId = new PolicyTypeId(type); @@ -959,9 +948,9 @@ default Collection getReferencedDefinitionsChildIds(ServiceT TNodeTemplate n = (TNodeTemplate) entityTemplate; // crawl through policies - TPolicies policies = n.getPolicies(); + List policies = n.getPolicies(); if (policies != null) { - for (TPolicy pol : policies.getPolicy()) { + for (TPolicy pol : policies) { QName type = pol.getPolicyType(); PolicyTypeId ctId = new PolicyTypeId(type); ids.add(ctId); @@ -980,13 +969,12 @@ default Collection getReferencedDefinitionsChildIds(ServiceT // TODO: this information is collected differently for YAML and XML modes // crawl through deployment artifacts - TDeploymentArtifacts deploymentArtifacts = n.getDeploymentArtifacts(); + List deploymentArtifacts = n.getDeploymentArtifacts(); if (deploymentArtifacts != null) { - List das = deploymentArtifacts.getDeploymentArtifact(); - for (TDeploymentArtifact da : das) { + for (TDeploymentArtifact da : deploymentArtifacts) { if (da.getArtifactType() != null) { - // TODO This is considered Nullable, because the test case ConsistencyCheckerTest#hasError - // for revision 20f6d0afd4395ab83f059cb5fabbb08218c9fcbd assumes that that can be nullable + // This is considered Nullable, because the test case ConsistencyCheckerTest#hasError + // expects an empty artifactType and thus it may be null. ids.add(new ArtifactTypeId(da.getArtifactType())); } if (da.getArtifactRef() != null) { @@ -995,9 +983,9 @@ default Collection getReferencedDefinitionsChildIds(ServiceT } } // Store all referenced artifact types - TArtifacts artifacts = n.getArtifacts(); + List artifacts = n.getArtifacts(); if (Objects.nonNull(artifacts)) { - artifacts.getArtifact().forEach(a -> ids.add(new ArtifactTypeId(a.getType()))); + artifacts.forEach(a -> ids.add(new ArtifactTypeId(a.getType()))); } TNodeType nodeType = this.getElement(new NodeTypeId(qname)); @@ -1024,9 +1012,9 @@ default Collection getReferencedDefinitionsChildIds(ServiceT default void getReferencedRequirementTypeIds(Collection ids, TNodeTemplate n) { // crawl through reqs/caps - TNodeTemplate.Requirements requirements = n.getRequirements(); + List requirements = n.getRequirements(); if (requirements != null) { - for (TRequirement req : requirements.getRequirement()) { + for (TRequirement req : requirements) { QName type = req.getType(); if (type != null) { // ... in case of YAML, the type is always empty @@ -1079,10 +1067,9 @@ default Collection getReferencedDefinitionsChildIds(Complian TNodeTemplate n = (TNodeTemplate) entityTemplate; // crawl through deployment artifacts - TDeploymentArtifacts deploymentArtifacts = n.getDeploymentArtifacts(); + List deploymentArtifacts = n.getDeploymentArtifacts(); if (deploymentArtifacts != null) { - List das = deploymentArtifacts.getDeploymentArtifact(); - for (TDeploymentArtifact da : das) { + for (TDeploymentArtifact da : deploymentArtifacts) { ids.add(new ArtifactTypeId(da.getArtifactType())); if ((qname = da.getArtifactRef()) != null) { ids.add(new ArtifactTemplateId(qname)); @@ -1094,9 +1081,9 @@ default Collection getReferencedDefinitionsChildIds(Complian getCapabilitiesReferences(ids, n); // crawl through policies - TPolicies policies = n.getPolicies(); + List policies = n.getPolicies(); if (policies != null) { - for (TPolicy pol : policies.getPolicy()) { + for (TPolicy pol : policies) { QName type = pol.getPolicyType(); PolicyTypeId ctId = new PolicyTypeId(type); ids.add(ctId); @@ -1113,9 +1100,9 @@ default Collection getReferencedDefinitionsChildIds(Complian } default void getCapabilitiesReferences(Collection ids, TNodeTemplate n) { - TNodeTemplate.Capabilities capabilities = n.getCapabilities(); + List capabilities = n.getCapabilities(); if (capabilities != null) { - for (TCapability cap : capabilities.getCapability()) { + for (TCapability cap : capabilities) { QName type = cap.getType(); CapabilityTypeId ctId = new CapabilityTypeId(type); ids.add(ctId); @@ -1401,22 +1388,22 @@ default int getReferenceCount(ArtifactTemplateId id) { SortedSet nodeTypeImplementations = this.getAllDefinitionsChildIds(NodeTypeImplementationId.class); for (NodeTypeImplementationId ntiId : nodeTypeImplementations) { final TNodeTypeImplementation nodeTypeImplementation = this.getElement(ntiId); - TDeploymentArtifacts deploymentArtifacts = nodeTypeImplementation.getDeploymentArtifacts(); + List deploymentArtifacts = nodeTypeImplementation.getDeploymentArtifacts(); if (deploymentArtifacts != null) { - allDAs.addAll(deploymentArtifacts.getDeploymentArtifact()); + allDAs.addAll(deploymentArtifacts); } - TImplementationArtifacts implementationArtifacts = nodeTypeImplementation.getImplementationArtifacts(); + List implementationArtifacts = nodeTypeImplementation.getImplementationArtifacts(); if (implementationArtifacts != null) { - allIAs.addAll(implementationArtifacts.getImplementationArtifact()); + allIAs.addAll(implementationArtifacts); } } - // check all Relationshiptype Implementations for IAs + // check all RelationshipTypeImplementations for IAs SortedSet relationshipTypeImplementations = this.getAllDefinitionsChildIds(RelationshipTypeImplementationId.class); for (RelationshipTypeImplementationId rtiId : relationshipTypeImplementations) { - TImplementationArtifacts implementationArtifacts = this.getElement(rtiId).getImplementationArtifacts(); + List implementationArtifacts = this.getElement(rtiId).getImplementationArtifacts(); if (implementationArtifacts != null) { - allIAs.addAll(implementationArtifacts.getImplementationArtifact()); + allIAs.addAll(implementationArtifacts); } } @@ -1429,9 +1416,9 @@ default int getReferenceCount(ArtifactTemplateId id) { for (TEntityTemplate template : nodeTemplateOrRelationshipTemplate) { if (template instanceof TNodeTemplate) { TNodeTemplate nodeTemplate = (TNodeTemplate) template; - TDeploymentArtifacts deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); + List deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); if (deploymentArtifacts != null) { - allDAs.addAll(deploymentArtifacts.getDeploymentArtifact()); + allDAs.addAll(deploymentArtifacts); } } } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/YamlArtifactsSynchronizer.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/YamlArtifactsSynchronizer.java index e0c00cfcff..a49bcab288 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/YamlArtifactsSynchronizer.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/YamlArtifactsSynchronizer.java @@ -48,8 +48,8 @@ public void synchronizeNodeTemplates() throws IOException { this.deleteNodeTemplate(originalNT); } else { if (originalNT.getArtifacts() != null) { - List toDelete = this.getDeleteList(originalNT.getArtifacts().getArtifact(), - newNT.getArtifacts() != null ? newNT.getArtifacts().getArtifact() : null); + List toDelete = this.getDeleteList(originalNT.getArtifacts(), + newNT.getArtifacts() != null ? newNT.getArtifacts() : null); for (TArtifact artifact : toDelete) { this.deleteYamlArtifact(originalNT, artifact); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/filebased/GitBasedRepository.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/filebased/GitBasedRepository.java index d45cbbf74c..f0a1505e28 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/filebased/GitBasedRepository.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/filebased/GitBasedRepository.java @@ -37,55 +37,55 @@ import org.eclipse.winery.common.Constants; import org.eclipse.winery.common.configuration.Environments; -import org.eclipse.winery.model.tosca.TDefinitions; -import org.eclipse.winery.repository.backend.IWrappingRepository; -import org.eclipse.winery.repository.common.RepositoryFileReference; import org.eclipse.winery.common.configuration.GitBasedRepositoryConfiguration; import org.eclipse.winery.model.ids.GenericId; import org.eclipse.winery.model.ids.Namespace; 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.extensions.ComplianceRuleId; import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; import org.eclipse.winery.model.ids.definitions.HasInheritanceId; import org.eclipse.winery.model.ids.definitions.NodeTypeId; import org.eclipse.winery.model.ids.definitions.NodeTypeImplementationId; -import org.eclipse.winery.model.ids.extensions.PatternRefinementModelId; import org.eclipse.winery.model.ids.definitions.PolicyTemplateId; import org.eclipse.winery.model.ids.definitions.PolicyTypeId; -import org.eclipse.winery.model.ids.extensions.RefinementId; import org.eclipse.winery.model.ids.definitions.RelationshipTypeId; import org.eclipse.winery.model.ids.definitions.RelationshipTypeImplementationId; import org.eclipse.winery.model.ids.definitions.RequirementTypeId; import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; -import org.eclipse.winery.model.ids.extensions.TestRefinementModelId; -import org.eclipse.winery.model.ids.extensions.TopologyFragmentRefinementModelId; import org.eclipse.winery.model.ids.definitions.imports.GenericImportId; import org.eclipse.winery.model.ids.elements.ToscaElementId; -import org.eclipse.winery.model.tosca.extensions.OTTopologyFragmentRefinementModel; +import org.eclipse.winery.model.ids.extensions.ComplianceRuleId; +import org.eclipse.winery.model.ids.extensions.PatternRefinementModelId; +import org.eclipse.winery.model.ids.extensions.RefinementId; +import org.eclipse.winery.model.ids.extensions.TestRefinementModelId; +import org.eclipse.winery.model.ids.extensions.TopologyFragmentRefinementModelId; import org.eclipse.winery.model.tosca.TArtifactTemplate; import org.eclipse.winery.model.tosca.TArtifactType; import org.eclipse.winery.model.tosca.TCapabilityType; -import org.eclipse.winery.model.tosca.extensions.OTComplianceRule; +import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TEntityType; import org.eclipse.winery.model.tosca.TExtensibleElements; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; +import org.eclipse.winery.model.tosca.TImplementationArtifact; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; -import org.eclipse.winery.model.tosca.extensions.OTPatternRefinementModel; import org.eclipse.winery.model.tosca.TPolicyTemplate; import org.eclipse.winery.model.tosca.TPolicyType; -import org.eclipse.winery.model.tosca.extensions.OTRefinementModel; import org.eclipse.winery.model.tosca.TRelationshipType; import org.eclipse.winery.model.tosca.TRelationshipTypeImplementation; import org.eclipse.winery.model.tosca.TRequirementType; import org.eclipse.winery.model.tosca.TServiceTemplate; +import org.eclipse.winery.model.tosca.extensions.OTComplianceRule; +import org.eclipse.winery.model.tosca.extensions.OTPatternRefinementModel; +import org.eclipse.winery.model.tosca.extensions.OTRefinementModel; import org.eclipse.winery.model.tosca.extensions.OTTestRefinementModel; +import org.eclipse.winery.model.tosca.extensions.OTTopologyFragmentRefinementModel; import org.eclipse.winery.repository.backend.BackendUtils; +import org.eclipse.winery.repository.backend.IWrappingRepository; import org.eclipse.winery.repository.backend.NamespaceManager; import org.eclipse.winery.repository.backend.xsd.XsdImportManager; +import org.eclipse.winery.repository.common.RepositoryFileReference; import org.eclipse.winery.repository.exceptions.RepositoryCorruptException; import org.eclipse.winery.repository.exceptions.WineryRepositoryException; @@ -159,7 +159,7 @@ public GitBasedRepository(GitBasedRepositoryConfiguration repositoryConfiguratio this.eventBus = new EventBus(); - // explicitly enable longpaths to ensure proper handling of long pathss + // explicitly enable long paths to ensure proper handling of long paths gitRepo.getConfig().setBoolean("core", null, "longpaths", true); gitRepo.getConfig().save(); if (configuration.isAutoCommit() && !git.status().call().isClean()) { @@ -616,7 +616,9 @@ public Collection getReferencedDefinitionsChildIds(Relations } @Override - public Collection getReferencedTOSCAComponentImplementationArtifactIds(Collection ids, TImplementationArtifacts implementationArtifacts, DefinitionsChildId id) { + public Collection getReferencedTOSCAComponentImplementationArtifactIds(Collection ids, + List implementationArtifacts, + DefinitionsChildId id) { return repository.getReferencedTOSCAComponentImplementationArtifactIds(ids, implementationArtifacts, id); } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/DockerPlugin.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/DockerPlugin.java index 3edf8a5dcd..a417651efb 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/DockerPlugin.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/DockerPlugin.java @@ -108,7 +108,8 @@ public GeneratedArtifacts downloadDependenciesBasedOnArtifact(QName artifactTemp @Override public void downloadDependenciesBasedOnNodeType(TNodeTypeImplementation nodeTypeImplementation, IRepository repository) { if (nodeTypeImplementation.getDeploymentArtifacts() != null) { - nodeTypeImplementation.getDeploymentArtifacts().getDeploymentArtifact().stream() + nodeTypeImplementation.getDeploymentArtifacts().stream() + .filter(da -> da.getArtifactType() != null) .filter(da -> da.getArtifactType().equals(OpenToscaBaseTypes.dockerContainerArtifactType)) .filter(da -> da.getArtifactRef() != null) .forEach(da -> { diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/SelfContainmentPackager.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/SelfContainmentPackager.java index 7a286f6dac..51a7e0e198 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/SelfContainmentPackager.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/SelfContainmentPackager.java @@ -15,6 +15,7 @@ package org.eclipse.winery.repository.backend.selfcontainmentpackager; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -31,7 +32,7 @@ import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; import org.eclipse.winery.model.tosca.TArtifactTemplate; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; +import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.version.VersionSupport; @@ -115,11 +116,13 @@ public DefinitionsChildId createSelfContainedVersion(DefinitionsChildId entryId) if (generatedArtifacts != null && generatedArtifacts.selfContainedArtifactQName != null) { // first, we need to identify the element that is referencing the artifact serviceTemplate.getTopologyTemplate().getNodeTemplates().stream() - .filter(node -> node.getDeploymentArtifacts() != null) - .map(node -> node.getDeploymentArtifacts().getDeploymentArtifact()) - .filter(daList -> daList.stream().anyMatch(da -> da.getArtifactRef() != null - && da.getArtifactRef().equals(elementId.getQName()))) - .flatMap(Collection::stream) + .map(TNodeTemplate::getDeploymentArtifacts) + .filter(Objects::nonNull) + .filter(daList -> daList.stream() + .anyMatch(da -> da.getArtifactRef() != null + && da.getArtifactRef().equals(elementId.getQName()) + ) + ).flatMap(Collection::stream) .forEach(da -> da.setArtifactRef(generatedArtifacts.selfContainedArtifactQName)); } } @@ -135,7 +138,7 @@ public DefinitionsChildId createSelfContainedVersion(DefinitionsChildId entryId) private void createSelfContainedNodeTypeImplementation(TNodeTypeImplementation impl) { if (impl.getImplementationArtifacts() != null) { - List generatedArtifacts = impl.getImplementationArtifacts().getImplementationArtifact().stream() + List generatedArtifacts = impl.getImplementationArtifacts().stream() .filter(ia -> Objects.nonNull(ia.getArtifactRef())) .filter(ia -> !new ArtifactTemplateId(ia.getArtifactRef()).isSelfContained()) .map(ia -> this.downloadArtifacts(ia.getArtifactRef(), ia.getArtifactType())) @@ -151,7 +154,7 @@ private void createSelfContainedNodeTypeImplementation(TNodeTypeImplementation i generatedArtifacts.forEach(generatedArtifact -> { if (implementation.getImplementationArtifacts() != null) { - implementation.getImplementationArtifacts().getImplementationArtifact() + implementation.getImplementationArtifacts() .forEach(ia -> { if (generatedArtifact.artifactToReplaceQName.equals(ia.getArtifactRef())) { ia.setArtifactRef(generatedArtifact.selfContainedArtifactQName); @@ -168,23 +171,24 @@ private void createSelfContainedNodeTypeImplementation(TNodeTypeImplementation i ia.setArtifactType(artifactTemplate.getType()); } }); - TDeploymentArtifacts deploymentArtifacts = implementation.getDeploymentArtifacts(); + List deploymentArtifacts = implementation.getDeploymentArtifacts(); if (deploymentArtifacts == null) { - deploymentArtifacts = new TDeploymentArtifacts.Builder().build(); + deploymentArtifacts = new ArrayList<>(); implementation.setDeploymentArtifacts(deploymentArtifacts); } else { - deploymentArtifacts.getDeploymentArtifact() - .removeIf(da -> da.getArtifactRef() != null - && generatedArtifact.deploymentArtifactsToRemove.contains(da.getArtifactRef())); + deploymentArtifacts.removeIf(da -> + da.getArtifactRef() != null + && generatedArtifact.deploymentArtifactsToRemove.contains(da.getArtifactRef()) + ); } for (QName artifactTemplate : generatedArtifact.deploymentArtifactsToAdd) { TArtifactTemplate generatedAT = repository.getElement(new ArtifactTemplateId(artifactTemplate)); - TDeploymentArtifact da = new TDeploymentArtifact.Builder(artifactTemplate.getLocalPart(), generatedAT.getType()) - .setArtifactRef(artifactTemplate) - .build(); - - deploymentArtifacts.getDeploymentArtifact().add(da); + deploymentArtifacts.add( + new TDeploymentArtifact.Builder(artifactTemplate.getLocalPart(), generatedAT.getType()) + .setArtifactRef(artifactTemplate) + .build() + ); } } }); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/UbuntuVMPlugin.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/UbuntuVMPlugin.java index 6caa0481c2..e0ba5e598f 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/UbuntuVMPlugin.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/selfcontainmentpackager/UbuntuVMPlugin.java @@ -17,6 +17,7 @@ import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -29,12 +30,10 @@ import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; import org.eclipse.winery.model.tosca.TArtifactTemplate; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; import org.eclipse.winery.model.tosca.constants.OpenToscaBaseTypes; import org.eclipse.winery.repository.backend.BackendUtils; import org.eclipse.winery.repository.backend.IRepository; -import org.eclipse.winery.repository.backend.RepositoryFactory; import org.eclipse.winery.repository.common.RepositoryFileReference; import org.eclipse.winery.repository.datatypes.ids.elements.ArtifactTemplateFilesDirectoryId; @@ -48,13 +47,9 @@ public class UbuntuVMPlugin implements SelfContainmentPlugin { private final static String imageFileType = ".img"; private final static String imageDiskType = "-disk1" + imageFileType; - private final Map artifactTemplates; - private final Map> codeNamesToVersion = initCodeNames(); public UbuntuVMPlugin() { - IRepository repository = RepositoryFactory.getRepository(); - this.artifactTemplates = repository.getQNameToElementMapping(ArtifactTemplateId.class); } @Override @@ -85,14 +80,14 @@ public void downloadDependenciesBasedOnNodeType(TNodeTypeImplementation nodeType WineryVersion artifactVersion = new WineryVersion(nodeTypeVersion.getComponentVersion() + "-CloudImage", 1, 1); ArtifactTemplateId artifactTemplateId = new ArtifactTemplateId( OpenToscaBaseTypes.artifactTemplateNamespace, - nameWithoutVersion + "-DA" + WineryVersion.WINERY_NAME_FROM_VERSION_SEPARATOR + artifactVersion.toString(), + nameWithoutVersion + "-DA" + WineryVersion.WINERY_NAME_FROM_VERSION_SEPARATOR + artifactVersion, false); TArtifactTemplate element = repository.getElement(artifactTemplateId); element.setType(OpenToscaBaseTypes.cloudImageArtifactType); logger.info("Generated ArtifactTemplate {}", artifactTemplateId.getQName()); if (!repository.exists(artifactTemplateId)) { - logger.info("Trying to donwload iamge file..."); + logger.info("Trying to download image file..."); String baseUrl = "https://cloud-images.ubuntu.com/" + codeName + "/current/" + @@ -129,17 +124,16 @@ public void downloadDependenciesBasedOnNodeType(TNodeTypeImplementation nodeType BackendUtils.synchronizeReferences(repository, artifactTemplateId); - TDeploymentArtifact imageDa = new TDeploymentArtifact(); - imageDa.setArtifactType(OpenToscaBaseTypes.cloudImageArtifactType); - imageDa.setArtifactRef(artifactTemplateId.getQName()); - imageDa.setName("CloudImage"); + TDeploymentArtifact imageDa = new TDeploymentArtifact.Builder("CloudImage", OpenToscaBaseTypes.cloudImageArtifactType) + .setArtifactRef(artifactTemplateId.getQName()) + .build(); - TDeploymentArtifacts deploymentArtifacts = nodeTypeImplementation.getDeploymentArtifacts(); + List deploymentArtifacts = nodeTypeImplementation.getDeploymentArtifacts(); if (deploymentArtifacts == null) { - deploymentArtifacts = new TDeploymentArtifacts(); + deploymentArtifacts = new ArrayList<>(); nodeTypeImplementation.setDeploymentArtifacts(deploymentArtifacts); } - deploymentArtifacts.getDeploymentArtifact().add(imageDa); + deploymentArtifacts.add(imageDa); } else { logger.info("Could not download image -- the URLs do not exist: \n\t{}\n\t{}", baseUrl + imageFileType, baseUrl + imageDiskType); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/support/TopologyTemplateUtils.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/support/TopologyTemplateUtils.java deleted file mode 100644 index db3239e752..0000000000 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/support/TopologyTemplateUtils.java +++ /dev/null @@ -1,106 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - *******************************************************************************/ -package org.eclipse.winery.repository.converter.support; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.namespace.QName; - -import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; -import org.eclipse.winery.model.tosca.TArtifactTemplate; -import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; -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.TServiceTemplate; -import org.eclipse.winery.model.tosca.TTopologyTemplate; -import org.eclipse.winery.repository.backend.IRepository; - -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; - -public class TopologyTemplateUtils { - - public static void updateServiceTemplateWithResolvedDa(DefinitionsChildId entryId, IRepository repository, DefinitionsChildId oldArtifactTemplateId, DefinitionsChildId newArtifactTemplateId) throws IOException { - TServiceTemplate serviceTemplate = repository.getElement(entryId); - TArtifactTemplate newArtifactTemplate = repository.getElement(newArtifactTemplateId); - TArtifactTemplate oldArtifactTemplate = repository.getElement(oldArtifactTemplateId); - - @NonNull List nodeTemplates = serviceTemplate.getTopologyTemplate().getNodeTemplates(); - - for (TNodeTemplate nodeTemplate : nodeTemplates) { - @Nullable TDeploymentArtifacts deploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); - if (deploymentArtifacts != null) { - @NonNull List deplyArtifact = deploymentArtifacts.getDeploymentArtifact(); - for (TDeploymentArtifact deploymentArtifact : deplyArtifact) { - if (deploymentArtifact.getArtifactRef().getLocalPart().equals(oldArtifactTemplate.getName())) { - QName newSelfDeploymentArtifact = new QName(deploymentArtifact.getArtifactRef().getNamespaceURI(), deploymentArtifact.getArtifactRef().getLocalPart() + "-self", deploymentArtifact.getArtifactRef().getPrefix()); - deploymentArtifact.setArtifactRef(newSelfDeploymentArtifact); - deploymentArtifact.setName(newArtifactTemplate.getName()); - TDeploymentArtifacts newDeployMentArtifacts = new TDeploymentArtifacts(); - newDeployMentArtifacts.getDeploymentArtifact().add(deploymentArtifact); - serviceTemplate.getTopologyTemplate().getNodeTemplate(nodeTemplate.getId()).setDeploymentArtifacts(newDeployMentArtifacts); - repository.setElement(entryId, serviceTemplate); - } - } - } - } - } - - public static void updateTopologyTemplate(DefinitionsChildId entryId, IRepository repository, DefinitionsChildId nodeTypeId, DefinitionsChildId newNodeTypeId) throws IOException { - TServiceTemplate serviceTemplate = repository.getElement(entryId); - TNodeType oldNodeType = repository.getElement(nodeTypeId); - - @Nullable TNodeTemplate tNodeTemplate = serviceTemplate.getTopologyTemplate().getNodeTemplate(oldNodeType.getIdFromIdOrNameField()); - - TTopologyTemplate topologyTemplateCopy = serviceTemplate.getTopologyTemplate(); - - @NonNull List relationshipTemplates = topologyTemplateCopy.getRelationshipTemplates(); - List toRemove = new ArrayList<>(); - - List newIncomingRel = new ArrayList<>(); - - for (TRelationshipTemplate relation : relationshipTemplates) { - if (relation.getTargetElement().getRef().equals(tNodeTemplate)) { - toRemove.add(relation); - TRelationshipTemplate.SourceOrTargetElement targetElementNew = new TRelationshipTemplate.SourceOrTargetElement(); - targetElementNew.setRef(tNodeTemplate); - relation.setTargetElement(targetElementNew); - newIncomingRel.add(relation); - } else if (relation.getSourceElement().getRef().equals(tNodeTemplate)) { - toRemove.add(relation); - TRelationshipTemplate.SourceOrTargetElement targetElementNew = new TRelationshipTemplate.SourceOrTargetElement(); - targetElementNew.setRef(tNodeTemplate); - relation.setSourceElement(targetElementNew); - newIncomingRel.add(relation); - } - } - - if (!newIncomingRel.isEmpty()) { - relationshipTemplates.removeAll(toRemove); - relationshipTemplates.addAll(newIncomingRel); - topologyTemplateCopy.setRelationshipTemplates(relationshipTemplates); - } - - topologyTemplateCopy.getNodeTemplateOrRelationshipTemplate().remove(tNodeTemplate); - topologyTemplateCopy.getNodeTemplateOrRelationshipTemplate().add(tNodeTemplate); - topologyTemplateCopy.setNodeTemplates(topologyTemplateCopy.getNodeTemplates()); - - serviceTemplate.setTopologyTemplate(topologyTemplateCopy); - repository.setElement(entryId, serviceTemplate); - } -} diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/support/Utils.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/support/Utils.java index 330d453201..b298ca9d1e 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/support/Utils.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/support/Utils.java @@ -128,7 +128,7 @@ static public List getFileListFromZip(final ZipInputStream zipFile, fina } /** - * recursively delete files, folders and all subfolders + * recursively delete files, folders and all sub-folders */ static public void delete(final File f) throws IOException { if (!f.exists()) { @@ -144,23 +144,6 @@ static public void delete(final File f) throws IOException { } } - /** - * recursively delete files, folders and all subfolders with exception of files with the specified file ending in - * the specified folder - */ - static public void deleteFilesInFolder(final File f, final String ending) throws IOException { - if (!f.exists()) { - return; - } - if (f.isDirectory()) { - for (final File c : f.listFiles()) { - if (!getFileExtension(c).equals(ending)) { - delete(c); - } - } - } - } - public static String getFileExtension(final File file) { final String fileName = file.getName(); if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) { @@ -214,7 +197,7 @@ public static void execute(final String directoryPath, final String... command) } public static String findFileLocation(TArtifactTemplate artifactTemplate, IRepository repository) throws UnsupportedEncodingException { - String fileName = artifactTemplate.getArtifactReferences().getArtifactReference().get(0).getReference(); + String fileName = artifactTemplate.getArtifactReferences().get(0).getReference(); String repositoryPath = repository.getRepositoryRoot().toString(); return repositoryPath + "/" + URLDecoder.decode(fileName, "utf-8"); } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/writer/WriterUtils.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/writer/WriterUtils.java index 1e78758ba8..03aec7f694 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/writer/WriterUtils.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/converter/writer/WriterUtils.java @@ -28,7 +28,6 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -import java.util.stream.Stream; import javax.xml.bind.JAXBException; import javax.xml.transform.OutputKeys; @@ -39,21 +38,22 @@ import javax.xml.transform.stream.StreamResult; import org.eclipse.winery.model.converter.support.Namespaces; -import org.eclipse.winery.repository.backend.IRepository; -import org.eclipse.winery.repository.converter.reader.XmlReader; -import org.eclipse.winery.repository.common.RepositoryFileReference; -import org.eclipse.winery.repository.common.Util; import org.eclipse.winery.model.ids.EncodingUtil; import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; import org.eclipse.winery.model.ids.definitions.DefinitionsChildId; import org.eclipse.winery.model.ids.definitions.imports.GenericImportId; import org.eclipse.winery.model.ids.definitions.imports.XSDImportId; -import org.eclipse.winery.model.tosca.TDefinitions; +import org.eclipse.winery.model.tosca.TArtifactReference; import org.eclipse.winery.model.tosca.TArtifactTemplate; +import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TImport; import org.eclipse.winery.model.tosca.utils.ModelUtilities; import org.eclipse.winery.repository.backend.BackendUtils; +import org.eclipse.winery.repository.backend.IRepository; import org.eclipse.winery.repository.backend.constants.MediaTypes; +import org.eclipse.winery.repository.common.RepositoryFileReference; +import org.eclipse.winery.repository.common.Util; +import org.eclipse.winery.repository.converter.reader.XmlReader; import org.eclipse.winery.repository.datatypes.ids.elements.ArtifactTemplateFilesDirectoryId; import org.eclipse.winery.repository.importing.CsarImporter; @@ -103,10 +103,8 @@ public static void storeDefinitions(IRepository repository, TDefinitions definit } if (entry instanceof TArtifactTemplate) { - TArtifactTemplate.ArtifactReferences artifactReferences = ((TArtifactTemplate) entry).getArtifactReferences(); - Stream.of(artifactReferences) - .filter(Objects::nonNull) - .flatMap(ref -> ref.getArtifactReference().stream()) + List artifactReferences = ((TArtifactTemplate) entry).getArtifactReferences(); + artifactReferences.stream() .filter(Objects::nonNull) .forEach(ref -> { String reference = ref.getReference(); @@ -127,10 +125,10 @@ public static void storeDefinitions(IRepository repository, TDefinitions definit } ArtifactTemplateFilesDirectoryId aDir = new ArtifactTemplateFilesDirectoryId((ArtifactTemplateId) wid); RepositoryFileReference aFile = new RepositoryFileReference(aDir, artifactPath.getFileName().toString()); - MediaType mediaType = null; + try (InputStream is = Files.newInputStream(artifactPath); BufferedInputStream bis = new BufferedInputStream(is)) { - mediaType = BackendUtils.getMimeType(bis, artifactPath.getFileName().toString()); + MediaType mediaType = BackendUtils.getMimeType(bis, artifactPath.getFileName().toString()); repository.putContentToFile(aFile, bis, mediaType); } catch (IOException e) { LOGGER.error("Could not read artifact template file: {}", artifactPath); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/driverspecificationandinjection/DASpecification.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/driverspecificationandinjection/DASpecification.java index d60e88821d..752bd64453 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/driverspecificationandinjection/DASpecification.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/driverspecificationandinjection/DASpecification.java @@ -42,20 +42,19 @@ public class DASpecification { public static List getNodeTemplatesWithAbstractDAs(TTopologyTemplate topologyTemplate) { List nodeTemplates = topologyTemplate.getNodeTemplates(); - List nodeTemplatesWithAbstractDA = nodeTemplates.stream() + + return nodeTemplates.stream() .filter(nt -> nt.getDeploymentArtifacts() != null) - .filter(nt -> nt.getDeploymentArtifacts().getDeploymentArtifact().stream() + .filter(nt -> nt.getDeploymentArtifacts().stream() .anyMatch(da -> getArtifactTypeOfDA(da).getAbstract())) .collect(Collectors.toList()); - - return nodeTemplatesWithAbstractDA; } public static TArtifactType getArtifactTypeOfDA(TDeploymentArtifact deploymentArtifact) { QName DAArtifactTypeQName = deploymentArtifact.getArtifactType(); ArtifactTypeId artifactTypeId = new ArtifactTypeId(DAArtifactTypeQName); - TArtifactType artifactType = RepositoryFactory.getRepository().getElement(artifactTypeId); - return artifactType; + return RepositoryFactory.getRepository() + .getElement(artifactTypeId); } public static List getArtifactTypeHierarchy(TArtifactType artifactType) { @@ -80,16 +79,13 @@ public static List getArtifactTypeHierarchy(TArtifactType artifac } /** - * @param nodeTemplate - * @param deploymentArtifact - * @param topologyTemplate - * @return + * */ public static Set> getNodesWithSuitableConcreteDAAndTheDirectlyConnectedNode (TNodeTemplate nodeTemplate, TDeploymentArtifact deploymentArtifact, TTopologyTemplate topologyTemplate) { // key is the node template the nodeTemplate is directly connected to this is the indicator from which connection the concrete DA is coming from - // value is the node template which has a concrete DA attached to substiute the abstract DA of the nodeTemplate + // value is the node template which has a concrete DA attached to substitute the abstract DA of the nodeTemplate Set> nodeTemplateWithConcreteDAAndDirectlyConnectedNode = new HashSet<>(); List outgoingRelationshipTemplates = ModelUtilities.getOutgoingRelationshipTemplates(topologyTemplate, nodeTemplate); @@ -106,17 +102,19 @@ public static List getArtifactTypeHierarchy(TArtifactType artifac } /** - * @param nodeTemplate - * @param deploymentArtifact - * @param topologyTemplate - * @return + * */ public static TNodeTemplate getNodesWithSuitableConcreteDAs(TNodeTemplate nodeTemplate, TDeploymentArtifact deploymentArtifact, TTopologyTemplate topologyTemplate) { // Checks the attached DAs to the node template and compare them with the abstract Type of the D if (getSuitableConcreteDA(deploymentArtifact, nodeTemplate) == null) { //A concrete DA can only be found in the hostedOn stack List outgoingRelationshipTemplates = ModelUtilities.getOutgoingRelationshipTemplates(topologyTemplate, nodeTemplate) - .stream().filter(outrel -> getBasisRelationshipType(outrel.getType()).getValidTarget().getTypeRef().getLocalPart().equalsIgnoreCase("Container")) + .stream() + .filter(outgoingRelation -> { + TRelationshipType.ValidTarget validTarget = getBasisRelationshipType(outgoingRelation.getType()).getValidTarget(); + return validTarget != null + && validTarget.getTypeRef().getLocalPart().equalsIgnoreCase("Container"); + }) .collect(Collectors.toList()); for (TRelationshipTemplate relationshipTemplate : outgoingRelationshipTemplates) { @@ -132,14 +130,14 @@ public static TNodeTemplate getNodesWithSuitableConcreteDAs(TNodeTemplate nodeTe public static TDeploymentArtifact getSuitableConcreteDA(TDeploymentArtifact abstractDeploymentArtifact, TNodeTemplate nodeTemplate) { TDeploymentArtifact concreteDA = null; if (nodeTemplate.getDeploymentArtifacts() != null) { - List concreteDeploymentArtifacts = nodeTemplate.getDeploymentArtifacts().getDeploymentArtifact(); + List concreteDeploymentArtifacts = nodeTemplate.getDeploymentArtifacts(); concreteDA = getConcreteDA(abstractDeploymentArtifact, concreteDeploymentArtifacts); } if (concreteDA == null) { - List nodeTypeImplementations = getmatchingNodeTypeImplementations(nodeTemplate.getType()); + List nodeTypeImplementations = getMatchingNodeTypeImplementations(nodeTemplate.getType()); for (TNodeTypeImplementation nodeTypeImplementation : nodeTypeImplementations) { if (nodeTypeImplementation.getDeploymentArtifacts() != null) { - List deploymentArtifacts = nodeTypeImplementation.getDeploymentArtifacts().getDeploymentArtifact(); + List deploymentArtifacts = nodeTypeImplementation.getDeploymentArtifacts(); concreteDA = getConcreteDA(abstractDeploymentArtifact, deploymentArtifacts); if (concreteDA != null) { @@ -153,10 +151,10 @@ public static TDeploymentArtifact getSuitableConcreteDA(TDeploymentArtifact abst return null; } - private static List getmatchingNodeTypeImplementations(QName nodeTypeQName) { + private static List getMatchingNodeTypeImplementations(QName nodeTypeQName) { final IRepository repository = RepositoryFactory.getRepository(); return repository.getAllDefinitionsChildIds(NodeTypeImplementationId.class).stream() - .map(id -> repository.getElement(id)) + .map(repository::getElement) .filter(nti -> nti.getNodeType().equals(nodeTypeQName)) .collect(Collectors.toList()); } @@ -166,8 +164,9 @@ private static TDeploymentArtifact getConcreteDA(TDeploymentArtifact abstractDep List artifactTypeHierarchy = getArtifactTypeHierarchy(getArtifactTypeOfDA(candidate)); TArtifactType abstractArtifactType = getArtifactTypeOfDA(abstractDeploymentArtifact); for (TArtifactType containedArtifacts : artifactTypeHierarchy) { - //Can not be realized with streams because a check if the abstract Type is contained in the hierarchy doesn't work + // Can not be realized with streams because a check if the abstract Type is contained in the hierarchy doesn't work if (containedArtifacts.getTargetNamespace().equals(abstractArtifactType.getTargetNamespace()) + && containedArtifacts.getName() != null && containedArtifacts.getName().equals(abstractArtifactType.getName())) { return candidate; } @@ -178,9 +177,6 @@ private static TDeploymentArtifact getConcreteDA(TDeploymentArtifact abstractDep /** * method already exists in Splitting. Put into ModelUtilities - * - * @param relationshipTypeQName - * @return */ private static TRelationshipType getBasisRelationshipType(QName relationshipTypeQName) { RelationshipTypeId parentRelationshipTypeId = new RelationshipTypeId(relationshipTypeQName); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/driverspecificationandinjection/DriverInjection.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/driverspecificationandinjection/DriverInjection.java index f00ec85b67..a7f4ac4964 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/driverspecificationandinjection/DriverInjection.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/driverspecificationandinjection/DriverInjection.java @@ -41,21 +41,26 @@ public static TTopologyTemplate injectDriver(TTopologyTemplate topologyTemplate) List nodeTemplatesWithAbstractDA = DASpecification.getNodeTemplatesWithAbstractDAs(topologyTemplate); for (TNodeTemplate nodeTemplateWithAbstractDA : nodeTemplatesWithAbstractDA) { - List abstractDAsAttachedToNodeTemplate = nodeTemplateWithAbstractDA.getDeploymentArtifacts().getDeploymentArtifact().stream() - .filter(da -> DASpecification.getArtifactTypeOfDA(da).getAbstract()) - .collect(Collectors.toList()); - for (TDeploymentArtifact abstractDA : abstractDAsAttachedToNodeTemplate) { - Set> nodeTemplatesWithConcreteDA - = DASpecification.getNodesWithSuitableConcreteDAAndTheDirectlyConnectedNode(nodeTemplateWithAbstractDA, abstractDA, topologyTemplate); - for (Pair pair : nodeTemplatesWithConcreteDA) { - TRelationshipTemplate relationshipTemplate = pair.getLeft(); - TNodeTemplate nodeTemplate = pair.getRight(); - TDeploymentArtifact concreteDeploymentArtifact = DASpecification.getSuitableConcreteDA(abstractDA, nodeTemplate); - nodeTemplateWithAbstractDA.getDeploymentArtifacts().getDeploymentArtifact().add(concreteDeploymentArtifact); - setDriverProperty(relationshipTemplate, concreteDeploymentArtifact); + if (nodeTemplateWithAbstractDA.getDeploymentArtifacts() != null) { + List abstractDAsAttachedToNodeTemplate = nodeTemplateWithAbstractDA.getDeploymentArtifacts().stream() + .filter(da -> DASpecification.getArtifactTypeOfDA(da).getAbstract()) + .collect(Collectors.toList()); + for (TDeploymentArtifact abstractDA : abstractDAsAttachedToNodeTemplate) { + Set> nodeTemplatesWithConcreteDA + = DASpecification.getNodesWithSuitableConcreteDAAndTheDirectlyConnectedNode(nodeTemplateWithAbstractDA, abstractDA, topologyTemplate); + for (Pair pair : nodeTemplatesWithConcreteDA) { + TRelationshipTemplate relationshipTemplate = pair.getLeft(); + TNodeTemplate nodeTemplate = pair.getRight(); + TDeploymentArtifact concreteDeploymentArtifact = DASpecification.getSuitableConcreteDA(abstractDA, nodeTemplate); + + if (concreteDeploymentArtifact != null) { + nodeTemplateWithAbstractDA.getDeploymentArtifacts().add(concreteDeploymentArtifact); + setDriverProperty(relationshipTemplate, concreteDeploymentArtifact); + } + } + // concrete DAs from the delivering Node Template must not be deleted. They are uploaded by the OpenTOSCA Container but not used. + nodeTemplateWithAbstractDA.getDeploymentArtifacts().remove(abstractDA); } - // concrete DAs from the delivering Node Template must not be deleted. They are uploaded by the OpenTOSCA Container but not used. - nodeTemplateWithAbstractDA.getDeploymentArtifacts().getDeploymentArtifact().remove(abstractDA); } } return topologyTemplate; diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/export/CsarExporter.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/export/CsarExporter.java index 223e2f3a25..9871ba1d4b 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/export/CsarExporter.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/export/CsarExporter.java @@ -41,9 +41,6 @@ import org.eclipse.winery.accountability.exceptions.AccountabilityException; import org.eclipse.winery.common.Constants; import org.eclipse.winery.common.HashingUtil; -import org.eclipse.winery.model.version.VersionSupport; -import org.eclipse.winery.repository.common.RepositoryFileReference; -import org.eclipse.winery.repository.common.Util; import org.eclipse.winery.common.configuration.Environments; import org.eclipse.winery.common.constants.MimeTypes; import org.eclipse.winery.model.ids.EncodingUtil; @@ -58,12 +55,15 @@ import org.eclipse.winery.model.selfservice.ApplicationOption; import org.eclipse.winery.model.tosca.TArtifactReference; import org.eclipse.winery.model.tosca.TArtifactTemplate; +import org.eclipse.winery.model.version.VersionSupport; import org.eclipse.winery.repository.GitInfo; import org.eclipse.winery.repository.backend.BackendUtils; import org.eclipse.winery.repository.backend.IRepository; import org.eclipse.winery.repository.backend.SelfServiceMetaDataUtils; import org.eclipse.winery.repository.backend.constants.MediaTypes; import org.eclipse.winery.repository.backend.selfcontainmentpackager.SelfContainmentPackager; +import org.eclipse.winery.repository.common.RepositoryFileReference; +import org.eclipse.winery.repository.common.Util; import org.eclipse.winery.repository.datatypes.ids.elements.DirectoryId; import org.eclipse.winery.repository.datatypes.ids.elements.SelfServiceMetaDataId; import org.eclipse.winery.repository.datatypes.ids.elements.ServiceTemplateSelfServiceFilesDirectoryId; @@ -105,7 +105,7 @@ public class CsarExporter { private static final String WINERY_TEMP_DIR_PREFIX = "winerytmp"; private final IRepository repository; - + public CsarExporter(IRepository repository) { this.repository = repository; } @@ -317,7 +317,7 @@ private void addCsarEntryToArchive(ZipOutputStream zos, CsarEntry csarEntry, IOUtils.copy(is, zos); zos.closeEntry(); } catch (Exception e) { - CsarExporter.LOGGER.error("Could not copy file content to ZIP outputstream", e); + CsarExporter.LOGGER.error("Could not copy file content to ZIP output stream", e); } } @@ -382,28 +382,20 @@ private void addWorkingTreeToArchive(File file, ZipOutputStream zos, TArtifactTe boolean included = false; boolean excluded = false; if (template.getArtifactReferences() != null) { - for (TArtifactReference artifactReference : template.getArtifactReferences().getArtifactReference()) { - for (Object includeOrExclude : artifactReference.getIncludeOrExclude()) { + for (TArtifactReference artifactReference : template.getArtifactReferences()) { + for (TArtifactReference.IncludeOrExclude includeOrExclude : artifactReference.getIncludeOrExclude()) { + String reference = artifactReference.getReference(); + if (reference.endsWith("/")) { + reference += includeOrExclude.getPattern(); + } else { + reference += "/" + includeOrExclude.getPattern(); + } + reference = reference.substring(1); + if (includeOrExclude instanceof TArtifactReference.Include) { foundInclude = true; - TArtifactReference.Include include = (TArtifactReference.Include) includeOrExclude; - String reference = artifactReference.getReference(); - if (reference.endsWith("/")) { - reference += include.getPattern(); - } else { - reference += "/" + include.getPattern(); - } - reference = reference.substring(1); included |= BackendUtils.isGlobMatch(reference, rootDir.relativize(file.toPath())); } else if (includeOrExclude instanceof TArtifactReference.Exclude) { - TArtifactReference.Exclude exclude = (TArtifactReference.Exclude) includeOrExclude; - String reference = artifactReference.getReference(); - if (reference.endsWith("/")) { - reference += exclude.getPattern(); - } else { - reference += "/" + exclude.getPattern(); - } - reference = reference.substring(1); excluded |= BackendUtils.isGlobMatch(reference, rootDir.relativize(file.toPath())); } } @@ -417,14 +409,14 @@ private void addWorkingTreeToArchive(File file, ZipOutputStream zos, TArtifactTe IOUtils.copy(is, zos); zos.closeEntry(); } catch (Exception e) { - CsarExporter.LOGGER.error("Could not copy file to ZIP outputstream", e); + CsarExporter.LOGGER.error("Could not copy file to ZIP output stream", e); } } } } /** - * Writes the configured mapping namespaceprefix -> namespace to the archive + * Writes the configured mapping namespace prefix -> namespace to the archive *

* This is kind of a quick hack. TODO: during the import, the prefixes should be extracted using JAXB and stored in * the NamespacesResource @@ -442,16 +434,16 @@ private void addNamespacePrefixes(Map refMap) } /** - * Adds all self service meta data to the targetDir + * Adds all self-service metadata to the targetDir * - * @param entryId the service template to export for - * @param targetDir the directory in the CSAR where to put the content to - * @param refMap is used later to create the CSAR + * @param entryId the service template to export for + * @param targetDir the directory in the CSAR where to put the content to + * @param refMap is used later to create the CSAR */ private void addSelfServiceMetaData(ServiceTemplateId entryId, String targetDir, Map refMap) throws IOException { final SelfServiceMetaDataId selfServiceMetaDataId = new SelfServiceMetaDataId(entryId); - // This method is also called if the directory SELFSERVICE-Metadata exists without content and even if the directory does not exist at all, + // This method is also called if the directory SELF-SERVICE-Metadata exists without content and even if the directory does not exist at all, // but the ServiceTemplate itself exists. // The current assumption is that this is enough for an existence. // Thus, we have to take care of the case of an empty directory and add a default data.xml @@ -544,9 +536,9 @@ protected void addLicenseAndReadmeFiles(DefinitionsChildId entryId, Map refMap) throws IOException { SelfServiceMetaDataId id = new SelfServiceMetaDataId(serviceTemplateId); - // We add the self-service information regardless of the existence. - i.e., no "if (repository.exists(id)) {" + // We add the self-service information regardless of the existence. - i.e., no "if (repository.exists(id))" // This ensures that the name of the application is - // add everything in the root of the CSAR + // Thus, add everything in the root of the CSAR String targetDir = Constants.DIRNAME_SELF_SERVICE_METADATA + "/"; addSelfServiceMetaData(serviceTemplateId, targetDir, refMap); } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/importing/CsarImporter.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/importing/CsarImporter.java index 8a5059128a..cf7b5d63ed 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/importing/CsarImporter.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/importing/CsarImporter.java @@ -54,10 +54,8 @@ import org.eclipse.winery.accountability.exceptions.AccountabilityException; import org.eclipse.winery.accountability.model.ProvenanceVerification; import org.eclipse.winery.common.Constants; -import org.eclipse.winery.model.version.VersionSupport; -import org.eclipse.winery.repository.backend.IRepository; -import org.eclipse.winery.repository.common.RepositoryFileReference; -import org.eclipse.winery.repository.common.Util; +import org.eclipse.winery.model.csar.toscametafile.TOSCAMetaFile; +import org.eclipse.winery.model.csar.toscametafile.TOSCAMetaFileParser; import org.eclipse.winery.model.ids.EncodingUtil; import org.eclipse.winery.model.ids.XmlId; import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; @@ -70,13 +68,10 @@ import org.eclipse.winery.model.ids.definitions.imports.XSDImportId; import org.eclipse.winery.model.ids.elements.PlanId; import org.eclipse.winery.model.ids.elements.PlansId; -import org.eclipse.winery.model.csar.toscametafile.TOSCAMetaFile; -import org.eclipse.winery.model.csar.toscametafile.TOSCAMetaFileParser; import org.eclipse.winery.model.tosca.TArtifactReference; import org.eclipse.winery.model.tosca.TArtifactReference.Exclude; import org.eclipse.winery.model.tosca.TArtifactReference.Include; import org.eclipse.winery.model.tosca.TArtifactTemplate; -import org.eclipse.winery.model.tosca.TArtifactTemplate.ArtifactReferences; import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TDefinitions.Types; import org.eclipse.winery.model.tosca.TEntityType; @@ -85,14 +80,15 @@ import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TPlan; import org.eclipse.winery.model.tosca.TPlan.PlanModelReference; -import org.eclipse.winery.model.tosca.TPlans; import org.eclipse.winery.model.tosca.TRelationshipType; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.constants.Namespaces; import org.eclipse.winery.model.tosca.extensions.kvproperties.WinerysPropertiesDefinition; import org.eclipse.winery.model.tosca.utils.ModelUtilities; +import org.eclipse.winery.model.version.VersionSupport; import org.eclipse.winery.repository.JAXBSupport; import org.eclipse.winery.repository.backend.BackendUtils; +import org.eclipse.winery.repository.backend.IRepository; import org.eclipse.winery.repository.backend.NamespaceManager; import org.eclipse.winery.repository.backend.constants.Filename; import org.eclipse.winery.repository.backend.constants.MediaTypes; @@ -101,6 +97,8 @@ import org.eclipse.winery.repository.backend.filebased.JsonBasedNamespaceManager; import org.eclipse.winery.repository.backend.filebased.NamespaceProperties; import org.eclipse.winery.repository.backend.xsd.XsdImportManager; +import org.eclipse.winery.repository.common.RepositoryFileReference; +import org.eclipse.winery.repository.common.Util; import org.eclipse.winery.repository.datatypes.ids.elements.ArtifactTemplateFilesDirectoryId; import org.eclipse.winery.repository.datatypes.ids.elements.DirectoryId; import org.eclipse.winery.repository.datatypes.ids.elements.SelfServiceMetaDataId; @@ -141,10 +139,10 @@ public class CsarImporter { // Threads set to 1 to avoid testing for parallel processing of the same XSD file private static final ExecutorService xsdParsingService = Executors.newFixedThreadPool(1); - private static final ExecutorService entityTypeAdjestmentService = Executors.newFixedThreadPool(10); + private static final ExecutorService entityTypeAdjustmentService = Executors.newFixedThreadPool(10); private static final Pattern GENERATED_PREFIX_PATTERN = Pattern.compile("^ns\\d+$"); - + private final IRepository targetRepository; public CsarImporter(IRepository targetRepository) { @@ -156,8 +154,8 @@ public CsarImporter(IRepository targetRepository) { * conforming properties definition is removed * * @param ci the entity type - * @param wid the Winery id of the entitytype - * @param newDefs the definitions, the entiy type is contained in. The imports might be adjusted here + * @param wid the Winery id of the entityType + * @param newDefs the definitions, the entity type is contained in. The imports might be adjusted here * @param errors Used to collect the errors */ private void adjustEntityType(TEntityType ci, EntityTypeId wid, TDefinitions newDefs, final List errors) { @@ -273,9 +271,9 @@ public static void storeDefinitions(IRepository repository, DefinitionsChildId i } /** - * Reads the CSAR from the given inputstream + * Reads the CSAR from the given inputStream * - * @param in the inputstream to read from + * @param in the inputStream to read from * @param options the set of options applicable for importing the csar */ public ImportMetaInformation readCSAR(InputStream in, CsarImportOptions options) @@ -665,7 +663,7 @@ protected Optional processDefinitionsImport(TDefinitions defs // Adjusting takes a long time // Therefore, we first save the type as is and convert to Winery-Property-Definitions in the background CsarImporter.storeDefinitions(targetRepository, wid, newDefs); - CsarImporter.entityTypeAdjestmentService.submit(() -> { + CsarImporter.entityTypeAdjustmentService.submit(() -> { adjustEntityType((TEntityType) ci, (EntityTypeId) wid, newDefs, errors); CsarImporter.storeDefinitions(targetRepository, wid, newDefs); }); @@ -779,9 +777,9 @@ private void importTypes(TDefinitions defs, final List errors) { * @param st the the service template to be imported {@inheritDoc} */ private void adjustServiceTemplate(Path rootPath, TOSCAMetaFile tmf, ServiceTemplateId wid, TServiceTemplate st, final List errors) { - TPlans plans = st.getPlans(); + List plans = st.getPlans(); if (plans != null) { - for (TPlan plan : plans.getPlan()) { + for (TPlan plan : plans) { PlanModelReference refContainer = plan.getPlanModelReference(); if (refContainer != null) { String ref = refContainer.getReference(); @@ -879,15 +877,13 @@ void importLicenseAndReadme(Path rootPath, DefinitionsChildId wid, TOSCAMetaFile * We import the files given at the artifact references */ private void adjustArtifactTemplate(Path rootPath, TOSCAMetaFile tmf, ArtifactTemplateId atid, TArtifactTemplate ci, final List errors) { - ArtifactReferences refs = ci.getArtifactReferences(); + List refs = ci.getArtifactReferences(); if (refs == null) { // no references stored - break return; } - List refList = refs.getArtifactReference(); - Iterator iterator = refList.iterator(); - while (iterator.hasNext()) { - TArtifactReference ref = iterator.next(); + + for (TArtifactReference ref : refs) { String reference = ref.getReference(); // URLs are stored encoded -> undo the encoding reference = EncodingUtil.URLdecode(reference); @@ -919,9 +915,9 @@ private void adjustArtifactTemplate(Path rootPath, TOSCAMetaFile tmf, ArtifactTe LOGGER.error("path {} is not a directory", path); } Path localRoot = rootPath.resolve(path); - List includeOrExclude = ref.getIncludeOrExclude(); + List includeOrExclude = ref.getIncludeOrExclude(); - if (includeOrExclude.get(0) instanceof TArtifactReference.Exclude) { + if (includeOrExclude.get(0) instanceof Exclude) { // Implicit semantics of an exclude listed first: // include all files and then exclude the files matched by the pattern allFiles = this.getAllFiles(localRoot); @@ -932,11 +928,11 @@ private void adjustArtifactTemplate(Path rootPath, TOSCAMetaFile tmf, ArtifactTe } for (Object object : includeOrExclude) { - if (object instanceof TArtifactReference.Include) { - this.handleInclude((TArtifactReference.Include) object, localRoot, allFiles); + if (object instanceof Include) { + this.handleInclude((Include) object, localRoot, allFiles); } else { - assert (object instanceof TArtifactReference.Exclude); - this.handleExclude((TArtifactReference.Exclude) object, localRoot, allFiles); + assert (object instanceof Exclude); + this.handleExclude((Exclude) object, localRoot, allFiles); } } } @@ -944,7 +940,7 @@ private void adjustArtifactTemplate(Path rootPath, TOSCAMetaFile tmf, ArtifactTe this.importAllFiles(rootPath, allFiles, fileDir, tmf, errors); } - if (refList.isEmpty()) { + if (refs.isEmpty()) { // everything is imported and is a file stored locally // we don't need the references stored locally: they are generated on the fly when exporting ci.setArtifactReferences(null); @@ -969,12 +965,12 @@ protected void importAllFiles(Path rootPath, Collection files, DirectoryId for (Path p : files) { if (!Files.exists(p)) { - errors.add(String.format("File %1$s does not exist", p.toString())); + errors.add(String.format("File %1$s does not exist", p)); return; } // directoryId already identifies the subdirectory - RepositoryFileReference fref = new RepositoryFileReference(directoryId, p.getFileName().toString()); - importFile(p, fref, tmf, rootPath, errors); + RepositoryFileReference fileReference = new RepositoryFileReference(directoryId, p.getFileName().toString()); + importFile(p, fileReference, tmf, rootPath, errors); } } @@ -999,7 +995,7 @@ private void handleInclude(final Include incl, final Path localRoot, final Set

() { @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { Path relFile = localRoot.relativize(file); if (pathMatcher.matches(relFile)) { allFiles.add(file); @@ -1008,7 +1004,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO } @Override - public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { if (pathMatcher.matches(dir)) { Set filesToAdd = CsarImporter.this.getAllFiles(dir); allFiles.addAll(filesToAdd); @@ -1032,7 +1028,7 @@ private Set getAllFiles(Path startPath) { Files.walkFileTree(startPath, new SimpleFileVisitor() { @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { res.add(file); return CONTINUE; } @@ -1227,7 +1223,7 @@ private void importOtherImport(Path rootPath, TImport imp, final List er if (rid instanceof XSDImportId) { // We do the initialization asynchronously // We do not check whether the XSD has already been checked - // We cannot just checck whether an XSD already has been handled since the XSD could change over time + // We cannot just check whether an XSD already has been handled since the XSD could change over time // Synchronization at org.eclipse.winery.repository.resources.imports.xsdimports.XSDImportResource.getAllDefinedLocalNames(short) also isn't feasible as the backend doesn't support locks CsarImporter.xsdParsingService.submit(() -> { CsarImporter.LOGGER.debug("Updating XSD import cache data"); 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 fc48e49632..4f43759877 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 @@ -43,6 +43,7 @@ import org.eclipse.winery.model.tosca.TImport; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TRelationshipType; +import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.utils.ModelUtilities; import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate; import org.eclipse.winery.repository.backend.BackendUtils; @@ -182,35 +183,34 @@ protected Optional processDefinitionsImport(TDefinitions defs } private void importArtifacts(Path rootPath, TExtensibleElements ci, DefinitionsChildId wid, TOSCAMetaFile tmf, final List errors) { - if (ci instanceof org.eclipse.winery.model.tosca.TServiceTemplate) { - org.eclipse.winery.model.tosca.TServiceTemplate st = (org.eclipse.winery.model.tosca.TServiceTemplate) ci; - st.getTopologyTemplate() - .getNodeTemplates() - .forEach(node -> { - if (Objects.nonNull(node.getArtifacts()) && !node.getArtifacts().getArtifact().isEmpty()) { - node.getArtifacts() - .getArtifact() - .stream() - .map(this::fixForwardSlash) - .filter(a -> this.isImportable(rootPath, a)) - .forEach(a -> { - DirectoryId stFilesDir = new GenericDirectoryId(wid, IdNames.FILES_DIRECTORY); - DirectoryId ntFilesDir = new GenericDirectoryId(stFilesDir, node.getId()); - DirectoryId artifactDir = new GenericDirectoryId(ntFilesDir, a.getName()); - importArtifact(rootPath, a, artifactDir, tmf, errors); - fixArtifactRefName(rootPath, a); - }); - } - }); + if (ci instanceof TServiceTemplate) { + TServiceTemplate st = (TServiceTemplate) ci; + if (st.getTopologyTemplate() != null) { + st.getTopologyTemplate() + .getNodeTemplates() + .forEach(node -> { + if (Objects.nonNull(node.getArtifacts()) && !node.getArtifacts().isEmpty()) { + node.getArtifacts() + .stream() + .map(this::fixForwardSlash) + .filter(a -> this.isImportable(rootPath, a)) + .forEach(a -> { + DirectoryId stFilesDir = new GenericDirectoryId(wid, IdNames.FILES_DIRECTORY); + DirectoryId ntFilesDir = new GenericDirectoryId(stFilesDir, node.getId()); + DirectoryId artifactDir = new GenericDirectoryId(ntFilesDir, a.getName()); + importArtifact(rootPath, a, artifactDir, tmf, errors); + fixArtifactRefName(rootPath, a); + }); + } + }); + } } else if (ci instanceof TNodeType) { TNodeType nt = (TNodeType) ci; fixOperationImplFileRef(nt); - if (Objects.nonNull(nt.getArtifacts()) && !nt.getArtifacts().getArtifact().isEmpty()) { - nt.getArtifacts() - .getArtifact() - .stream() + if (Objects.nonNull(nt.getArtifacts()) && !nt.getArtifacts().isEmpty()) { + nt.getArtifacts().stream() .map(this::fixForwardSlash) .filter(a -> this.isImportable(rootPath, a)) .forEach(a -> { @@ -245,7 +245,7 @@ private void fixArtifactRefName(Path rootPath, TArtifact a) { private void fixOperationImplFileRef(TNodeType nt) { // current assumption: primary field in operation's implementation stores file reference if (Objects.nonNull(nt.getArtifacts()) && Objects.nonNull(nt.getInterfaceDefinitions())) { - nt.getArtifacts().getArtifact().forEach(a -> { + nt.getArtifacts().forEach(a -> { nt.getInterfaceDefinitions().forEach(iDef -> { if (Objects.nonNull(iDef.getOperations())) { iDef.getOperations().forEach(op -> { diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/splitting/ProviderRepository.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/splitting/ProviderRepository.java index b2fcfbef67..39021977bf 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/splitting/ProviderRepository.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/splitting/ProviderRepository.java @@ -21,7 +21,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -45,7 +44,7 @@ public class ProviderRepository { private static final String NS_NAME_START = "http://www.opentosca.org/providers/"; /** - * Pointing to a concrete node template has to be done by putting this node template into a separeate namespace

+ * Pointing to a concrete node template has to be done by putting this node template into a separate namespace

* The given targetLocation is appended to {@see NS_NAME_START} to gain the namespace. All NodeTemplates in this * namespace and all "lower" namespaces (e.g., starting with that string) are returned. * @@ -58,18 +57,13 @@ public List getAllTopologyFragmentsForLocationAndOfferingCapa QName requiredCapabilityType = RepositoryFactory.getRepository().getElement(reqTypeId).getRequiredCapabilityType(); return getAllTopologyFragmentsForLocation(targetLocation).stream() - .filter(tf -> { - Optional nodeTemplate = ModelUtilities.getAllNodeTemplates(tf).stream() + .filter(tf -> + tf.getNodeTemplates().stream() .filter(nt -> nt.getCapabilities() != null) - .filter(nt -> nt.getCapabilities().getCapability().stream() + .anyMatch(nt -> nt.getCapabilities().stream() .anyMatch(cap -> cap.getType().equals(requiredCapabilityType)) - ).findAny(); - if (nodeTemplate.isPresent()) { - return true; - } else { - return false; - } - }) + ) + ) .collect(Collectors.toList()); } @@ -139,12 +133,16 @@ public List getAllTopologyFragmentsForLocation(String targetL // get all contained node templates .flatMap(id -> { TTopologyTemplate topologyTemplate = RepositoryFactory.getRepository().getElement(id).getTopologyTemplate(); - List matchedNodeTemplates = topologyTemplate.getNodeTemplateOrRelationshipTemplate().stream() - .filter(t -> t instanceof TNodeTemplate) - .map(TNodeTemplate.class::cast) - .collect(Collectors.toList()); + if (topologyTemplate != null) { + List matchedNodeTemplates = topologyTemplate.getNodeTemplateOrRelationshipTemplate().stream() + .filter(t -> t instanceof TNodeTemplate) + .map(TNodeTemplate.class::cast) + .collect(Collectors.toList()); - matchedNodeTemplates.forEach(t -> ModelUtilities.setTargetLabel(t, id.getNamespace().getDecoded().replace(NS_NAME_START, ""))); + matchedNodeTemplates.forEach(t -> + ModelUtilities.setTargetLabel(t, id.getNamespace().getDecoded().replace(NS_NAME_START, "")) + ); + } return getAllTopologyFragmentsFromServiceTemplate(topologyTemplate).stream(); }) @@ -161,41 +159,38 @@ private List getAllTopologyFragmentsFromServiceTemplate(TTopo //It can only be one topology fragment contained in the service template if (nodeTemplatesWithoutIncomingRelationship.size() == 1) { - TDocumentation documentation = new TDocumentation(); - Optional targetLabel = ModelUtilities.getTargetLabel(nodeTemplatesWithoutIncomingRelationship.get(0)); - String label; - if (!targetLabel.isPresent()) { - label = "unkown"; - } else { - label = targetLabel.get(); - } - documentation.getContent().add("Stack of Node Template " + nodeTemplatesWithoutIncomingRelationship.get(0).getId() - + " from Provider Repository " + label); - topologyTemplate.getDocumentation().add(documentation); + String targetLabel = ModelUtilities.getTargetLabel(nodeTemplatesWithoutIncomingRelationship.get(0)) + .orElse("unknown"); + topologyTemplate.getDocumentation().add( + new TDocumentation.Builder() + .addContent("Stack of Node Template " + nodeTemplatesWithoutIncomingRelationship.get(0).getId() + + " from Provider Repository " + targetLabel) + .build() + ); topologyFragments.add(topologyTemplate); } else { for (TNodeTemplate nodeWithoutIncomingRel : nodeTemplatesWithoutIncomingRelationship) { if (!visitedNodeTemplates.contains(nodeWithoutIncomingRel)) { - TDocumentation documentation = new TDocumentation(); - Optional targetLabel = ModelUtilities.getTargetLabel(nodeWithoutIncomingRel); - String label; - if (!targetLabel.isPresent()) { - label = "unkown"; - } else { - label = targetLabel.get(); - } - documentation.getContent().add("Stack of Node Template " + nodeWithoutIncomingRel.getId() - + " from Provider Repository " + label); + String targetLabel = ModelUtilities.getTargetLabel(nodeWithoutIncomingRel) + .orElse("unknown"); TTopologyTemplate topologyFragment = new TTopologyTemplate.Builder() - .addDocumentation(documentation) + .addDocumentation( + new TDocumentation.Builder() + .addContent("Stack of Node Template " + nodeWithoutIncomingRel.getId() + + " from Provider Repository " + targetLabel) + .build() + ) .build(); - topologyFragment.getNodeTemplateOrRelationshipTemplate().addAll(breadthFirstSearch(nodeWithoutIncomingRel, topologyTemplate)); + topologyFragment.getNodeTemplateOrRelationshipTemplate() + .addAll( + breadthFirstSearch(nodeWithoutIncomingRel, topologyTemplate) + ); topologyFragments.add(topologyFragment); topologyFragment.getNodeTemplateOrRelationshipTemplate().stream() .filter(et -> et instanceof TNodeTemplate) .map(TNodeTemplate.class::cast) - .forEach(nt -> visitedNodeTemplates.add(nt)); + .forEach(visitedNodeTemplates::add); } } } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/splitting/Splitting.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/splitting/Splitting.java index 8c1752f3c5..f194fa530b 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/splitting/Splitting.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/splitting/Splitting.java @@ -36,7 +36,6 @@ import org.eclipse.winery.model.tosca.TCapability; import org.eclipse.winery.model.tosca.TCapabilityType; import org.eclipse.winery.model.tosca.TInterface; -import org.eclipse.winery.model.tosca.TInterfaces; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TOperation; @@ -58,6 +57,8 @@ import org.slf4j.LoggerFactory; +import static org.eclipse.winery.common.ListUtils.listIsNotNullOrEmpty; + public class Splitting { private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(Splitting.class); @@ -145,12 +146,12 @@ public ServiceTemplateId matchTopologyOfServiceTemplate(ServiceTemplateId id) th TServiceTemplate serviceTemplate = repository.getElement(id); TTopologyTemplate topologyTemplate = serviceTemplate.getTopologyTemplate(); - /* + /* Get all open requirements and the basis type of the required capability type - Two different basis types are distinguished: - "Container" which means a hostedOn injection is required - "Endpoint" which means a connectsTo injection is required - */ + Two different basis types are distinguished: + "Container" which means a hostedOn injection is required + "Endpoint" which means a connectsTo injection is required + */ Map requirementsAndMatchingBasisCapabilityTypes = getOpenRequirementsAndMatchingBasisCapabilityTypeNames(topologyTemplate); // Output check @@ -236,24 +237,24 @@ public TNodeType createPlaceholderNodeType(String nameOfNodeTemplateGettingPlace public TNodeTemplate createPlaceholderNodeTemplate(TTopologyTemplate topologyTemplate, String nameOfNodeTemplateGettingPlaceholder, QName placeholderQName) { TNodeTemplate placeholderNodeTemplate = new TNodeTemplate(); - String id; + StringBuilder id; List ids = new ArrayList<>(); for (TNodeTemplate nt : topologyTemplate.getNodeTemplates()) { ids.add(nt.getId()); } boolean uniqueID = false; - id = nameOfNodeTemplateGettingPlaceholder + "_placeholder"; + id = new StringBuilder(nameOfNodeTemplateGettingPlaceholder + "_placeholder"); while (!uniqueID) { - if (!ids.contains(id + IdCounter)) { - id = id + IdCounter; + if (!ids.contains(id.toString() + IdCounter)) { + id.append(IdCounter); IdCounter++; uniqueID = true; } else { IdCounter++; } } - placeholderNodeTemplate.setId(id); - placeholderNodeTemplate.setName(id); + placeholderNodeTemplate.setId(id.toString()); + placeholderNodeTemplate.setName(id.toString()); placeholderNodeTemplate.setType(placeholderQName); return placeholderNodeTemplate; @@ -266,19 +267,18 @@ public List getInputParamListofIncomingRelationshipTemplates(TTopolo TNodeTemplate incomingNodetemplate = ModelUtilities.getSourceNodeTemplateOfRelationshipTemplate(topologyTemplate, incomingRelationshipTemplate); NodeTypeId incomingNodeTypeId = new NodeTypeId(incomingNodetemplate.getType()); TNodeType incomingNodeType = repo.getElement(incomingNodeTypeId); - TInterfaces incomingNodeTypeInterfaces = incomingNodeType.getInterfaces(); + List incomingNodeTypeInterfaces = incomingNodeType.getInterfaces(); RelationshipTypeId incomingRelationshipTypeId = new RelationshipTypeId(incomingRelationshipTemplate.getType()); - TRelationshipType incomingRelationshipType = repo.getElement(incomingRelationshipTypeId); - TInterface relevantInterface = new TInterface(); - if (!incomingNodeTypeInterfaces.getInterface().isEmpty()) { - List connectionInterfaces = incomingNodeTypeInterfaces.getInterface().stream().filter(tInterface -> tInterface.getIdFromIdOrNameField().contains("connection")).collect(Collectors.toList()); + if (!incomingNodeTypeInterfaces.isEmpty()) { + TInterface relevantInterface = null; + List connectionInterfaces = incomingNodeTypeInterfaces.stream().filter(tInterface -> tInterface.getIdFromIdOrNameField().contains("connection")).collect(Collectors.toList()); if (connectionInterfaces.size() > 1) { TNodeTemplate targetNodeTemplate = ModelUtilities.getTargetNodeTemplateOfRelationshipTemplate(topologyTemplate, incomingRelationshipTemplate); for (TInterface tInterface : connectionInterfaces) { int separator = tInterface.getIdFromIdOrNameField().lastIndexOf("/"); String prefixRelation = tInterface.getIdFromIdOrNameField().substring(separator + 1); - if (targetNodeTemplate.getName().toLowerCase().contains(prefixRelation.toLowerCase())) { + if (targetNodeTemplate.getName() != null && targetNodeTemplate.getName().toLowerCase().contains(prefixRelation.toLowerCase())) { relevantInterface = tInterface; } } @@ -286,11 +286,11 @@ public List getInputParamListofIncomingRelationshipTemplates(TTopolo relevantInterface = connectionInterfaces.get(0); } - for (TOperation tOperation : relevantInterface.getOperation()) { - TOperation.InputParameters inputParameters = tOperation.getInputParameters(); - if (inputParameters != null) { - for (TParameter param : inputParameters.getInputParameter()) { - listOfInputs.add(param); + if (relevantInterface != null) { + for (TOperation tOperation : relevantInterface.getOperations()) { + List inputParameters = tOperation.getInputParameters(); + if (inputParameters != null) { + listOfInputs.addAll(inputParameters); } } } @@ -300,13 +300,12 @@ public List getInputParamListofIncomingRelationshipTemplates(TTopolo } public TCapability createPlaceholderCapability(TTopologyTemplate topologyTemplate, QName capabilityType) { - TCapability capa = new TCapability(); // unique id for capability String id; List ids = new ArrayList<>(); for (TNodeTemplate nt : topologyTemplate.getNodeTemplates()) { if (nt.getCapabilities() != null) { - nt.getCapabilities().getCapability().stream().forEach(cap -> ids.add(cap.getId())); + nt.getCapabilities().forEach(cap -> ids.add(cap.getId())); } } boolean uniqueID = false; @@ -320,10 +319,8 @@ public TCapability createPlaceholderCapability(TTopologyTemplate topologyTemplat newCapabilityCounter++; } } - capa.setId(id); - capa.setName(id); - capa.setType(capabilityType); - return capa; + + return new TCapability.Builder(id, capabilityType, id).build(); } /** @@ -357,11 +354,11 @@ public ServiceTemplateId composeServiceTemplates(String composedSolutionServiceT TNodeTemplate nodeWithOpenCapability = composedTopologyTemplate.getNodeTemplates().stream() .filter(nt -> nt.getCapabilities() != null) - .filter(nt -> nt.getCapabilities().getCapability().stream() + .filter(nt -> nt.getCapabilities().stream() .anyMatch(c -> c.getType().equals(requiredCapabilityTypeQName))).findFirst().orElse(null); if (nodeWithOpenCapability != null) { - TCapability matchingCapability = nodeWithOpenCapability.getCapabilities().getCapability() + TCapability matchingCapability = nodeWithOpenCapability.getCapabilities() .stream().filter(c -> c.getType().equals(requiredCapabilityTypeQName)).findFirst().get(); TRelationshipType matchingRelationshipType = getMatchingRelationshipType(requirement, matchingCapability); @@ -393,12 +390,12 @@ public void resolveTopologyTemplate(ServiceTemplateId serviceTemplateId) throws QName requiredCapTypeQName = getRequiredCapabilityTypeQNameOfRequirement(requirement); List nodesWithMatchingCapability = topologyTemplate.getNodeTemplates().stream() .filter(nt -> nt.getCapabilities() != null) - .filter(nt -> nt.getCapabilities().getCapability().stream() + .filter(nt -> nt.getCapabilities().stream() .anyMatch(c -> c.getType().equals(requiredCapTypeQName))) .collect(Collectors.toList()); if (!nodesWithMatchingCapability.isEmpty() && nodesWithMatchingCapability.size() == 1) { - TCapability matchingCapability = nodesWithMatchingCapability.get(0).getCapabilities().getCapability() + TCapability matchingCapability = nodesWithMatchingCapability.get(0).getCapabilities() .stream().filter(c -> c.getType().equals(requiredCapTypeQName)).findFirst().get(); TRelationshipType matchingRelationshipType = getMatchingRelationshipType(requirement, matchingCapability); @@ -582,7 +579,7 @@ public Map> getHostingInjectionOptions(TTopology //Find lowest level nodes with open requirements which means they can be hosted by an other component for (TNodeTemplate nodeTemplateCandidate : needHostNodeTemplateCandidates) { if (hasNodeOpenRequirement(topologyTemplate, nodeTemplateCandidate)) { - if (nodeTemplateCandidate.getRequirements().getRequirement().stream() + if (nodeTemplateCandidate.getRequirements() != null && nodeTemplateCandidate.getRequirements().stream() .anyMatch(req -> getBasisCapabilityType(getRequiredCapabilityTypeQNameOfRequirement(req)).getName().equalsIgnoreCase("Container"))) { nodesToCheck.add(nodeTemplateCandidate); } @@ -603,7 +600,7 @@ public Map> getHostingInjectionOptions(TTopology //noinspection OptionalGetWithoutIsPresent String targetLabel = ModelUtilities.getTargetLabel(needHostNode).get(); - List openHostedOnRequirements = needHostNode.getRequirements().getRequirement().stream() + List openHostedOnRequirements = needHostNode.getRequirements().stream() .filter(req -> getBasisCapabilityType(getRequiredCapabilityTypeQNameOfRequirement(req)).getName().equalsIgnoreCase("Container")).collect(Collectors.toList()); List compatibleTopologyFragments = repository @@ -649,7 +646,7 @@ public Map> getHostingInjectionOptions(TTopology nodesForWhichHostsFound.add(predecessor); //throw new SplittingException("The Node Template with the ID " + predecessor.getId() + " has no requirement assigned and the injected can't be processed"); } else { - List openHostedOnRequirements = predecessor.getRequirements().getRequirement().stream() + List openHostedOnRequirements = predecessor.getRequirements().stream() .filter(req -> getBasisCapabilityType(getRequiredCapabilityTypeQNameOfRequirement(req)).getName().equalsIgnoreCase("Container")).collect(Collectors.toList()); List compatibleTopologyFragments = repository @@ -715,7 +712,7 @@ private boolean hasNodeOpenRequirement(TTopologyTemplate topology, TNodeTemplate return false; } List openRequirements = getOpenRequirements(topology); - return node.getRequirements().getRequirement().stream().anyMatch(openRequirements::contains); + return node.getRequirements().stream().anyMatch(openRequirements::contains); } /** @@ -786,15 +783,16 @@ public TTopologyTemplate injectNodeTemplates(TTopologyTemplate topologyTemplate, Set replacedNodeTemplatesToDelete = new HashSet<>(); for (String predecessorOfNewHostId : injectNodes.keySet()) { - TNodeTemplate predecessorOfNewHost = ModelUtilities.getAllNodeTemplates(topologyTemplate).stream() + TNodeTemplate predecessorOfNewHost = topologyTemplate.getNodeTemplates().stream() .filter(nt -> nt.getId().equals(predecessorOfNewHostId)) - .findFirst().orElse(null); + .findFirst() + .orElse(null); LOGGER.debug("Predecessor which get a new host " + predecessorOfNewHost.getId()); List originHostSuccessors = new ArrayList<>(); originHostSuccessors.clear(); originHostSuccessors = getHostedOnSuccessorsOfNodeTemplate(topologyTemplate, predecessorOfNewHost); - TRequirement openHostedOnRequirement = predecessorOfNewHost.getRequirements().getRequirement().stream() + TRequirement openHostedOnRequirement = predecessorOfNewHost.getRequirements().stream() .filter(req -> getBasisCapabilityType(getRequiredCapabilityTypeQNameOfRequirement(req)).getName().equals("Container")) .findAny().get(); TNodeTemplate newMatchingNodeTemplate; @@ -802,7 +800,7 @@ public TTopologyTemplate injectNodeTemplates(TTopologyTemplate topologyTemplate, //Highest Node Template to which the HostedOn Relationship has to be connected TNodeTemplate newHostNodeTemplate = matchingTopologyFragment.getNodeTemplates().stream() .filter(nt -> nt.getCapabilities() != null) - .filter(nt -> nt.getCapabilities().getCapability().stream().anyMatch(cap -> cap.getType().equals(getRequiredCapabilityTypeQNameOfRequirement(openHostedOnRequirement)))) + .filter(nt -> nt.getCapabilities().stream().anyMatch(cap -> cap.getType().equals(getRequiredCapabilityTypeQNameOfRequirement(openHostedOnRequirement)))) .findFirst().get(); LOGGER.debug("New host NodeTemplate: {}", newHostNodeTemplate.getId()); @@ -818,21 +816,24 @@ public TTopologyTemplate injectNodeTemplates(TTopologyTemplate topologyTemplate, .forEach(et -> et.setId(et.getId() + "_" + IdCounter++)); // rename capabilities and requirements - matchingTopologyFragment.getNodeTemplates().stream().forEach(node -> { - TNodeTemplate.Capabilities caps = node.getCapabilities(); + matchingTopologyFragment.getNodeTemplates().forEach(node -> { + List caps = node.getCapabilities(); if (Objects.nonNull(caps)) { - caps.getCapability().stream() - .filter(et -> topologyTemplate.getNodeTemplates().stream().filter(nt -> Objects.nonNull(nt.getCapabilities())) - .flatMap(nt -> nt.getCapabilities().getCapability().stream()).anyMatch(cap -> cap.getId().equals(et.getId()))) + caps.stream() + .filter(et -> topologyTemplate.getNodeTemplates().stream() + .filter(nt -> Objects.nonNull(nt.getCapabilities())) + .flatMap(nt -> nt.getCapabilities().stream()) + .anyMatch(cap -> cap.getId().equals(et.getId()))) .forEach(et -> et.setId(et.getId() + "_" + IdCounter++)); } - TNodeTemplate.Requirements reqs = node.getRequirements(); - if (Objects.nonNull(reqs)) { - reqs.getRequirement().stream() - .filter(et -> topologyTemplate.getNodeTemplates().stream().filter(nt -> Objects.nonNull(nt.getRequirements())) - .flatMap(nt -> nt.getRequirements().getRequirement().stream()).anyMatch(req -> req.getId().equals(et.getId()))) - .forEach(et -> et.setId(et.getId() + "_" + IdCounter++)); + if (listIsNotNullOrEmpty(node.getRequirements())) { + node.getRequirements().stream() + .filter(et -> topologyTemplate.getNodeTemplates().stream() + .filter(nt -> Objects.nonNull(nt.getRequirements())) + .flatMap(nt -> nt.getRequirements().stream()) + .anyMatch(req -> req.getId().equals(et.getId())) + ).forEach(et -> et.setId(et.getId() + "_" + IdCounter++)); } }); @@ -871,7 +872,7 @@ public TTopologyTemplate injectNodeTemplates(TTopologyTemplate topologyTemplate, newHostedOnRelationship.setTargetElement(targetElement); TRequirement requiredRequirement = null; - List openRequirements = predecessorOfNewHost.getRequirements().getRequirement(); + List openRequirements = predecessorOfNewHost.getRequirements(); for (TRequirement requirement : openRequirements) { QName requiredCapabilityTypeQName = getRequiredCapabilityTypeQNameOfRequirement(requirement); TCapabilityType matchingBasisCapabilityType = getBasisCapabilityType(requiredCapabilityTypeQName); @@ -882,7 +883,7 @@ public TTopologyTemplate injectNodeTemplates(TTopologyTemplate topologyTemplate, } TCapability requiredCapability = null; - List openCapabilities = newMatchingNodeTemplate.getCapabilities().getCapability(); + List openCapabilities = newMatchingNodeTemplate.getCapabilities(); for (TCapability capability : openCapabilities) { TCapabilityType basisCapabilityType = getBasisCapabilityType(capability.getType()); if (basisCapabilityType.getName().equalsIgnoreCase("Container")) { @@ -985,13 +986,13 @@ public Map> getConnectionInjectionOptions(TTopol List nodeTemplates = ModelUtilities.getAllNodeTemplates(topologyTemplate); List nodeTemplatesWithConnectionRequirement = nodeTemplates.stream() .filter(nt -> nt.getRequirements() != null) - .filter(nt -> nt.getRequirements().getRequirement().stream() + .filter(nt -> nt.getRequirements().stream() .anyMatch(req -> getBasisCapabilityType(getRequiredCapabilityTypeQNameOfRequirement(req)).getName().equalsIgnoreCase("Endpoint"))) .collect(Collectors.toList()); if (!nodeTemplatesWithConnectionRequirement.isEmpty()) { for (TNodeTemplate nodeWithOpenConnectionRequirement : nodeTemplatesWithConnectionRequirement) { - List requirements = nodeWithOpenConnectionRequirement.getRequirements().getRequirement().stream() + List requirements = nodeWithOpenConnectionRequirement.getRequirements().stream() .filter(req -> getBasisCapabilityType(getRequiredCapabilityTypeQNameOfRequirement(req)).getName().equalsIgnoreCase("Endpoint")) .filter(req -> getOpenRequirementsAndMatchingBasisCapabilityTypeNames(topologyTemplate).keySet().contains(req)) .collect(Collectors.toList()); @@ -1026,10 +1027,10 @@ public TTopologyTemplate injectConnectionNodeTemplates(TTopologyTemplate topolog for (String openRequirementId : selectedConnectionFragments.keySet()) { TNodeTemplate nodeTemplateWithThisOpenReq = nodeTemplates.stream() .filter(nt -> nt.getRequirements() != null) - .filter(nt -> nt.getRequirements().getRequirement().stream().anyMatch(req -> req.getId().equals(openRequirementId))) + .filter(nt -> nt.getRequirements().stream().anyMatch(req -> req.getId().equals(openRequirementId))) .findFirst().get(); - TRequirement openRequirement = nodeTemplateWithThisOpenReq.getRequirements().getRequirement().stream() + TRequirement openRequirement = nodeTemplateWithThisOpenReq.getRequirements().stream() .filter(req -> req.getId().equals(openRequirementId)).findFirst().get(); QName requiredCapabilityTypeQName = getRequiredCapabilityTypeQNameOfRequirement(openRequirement); @@ -1044,9 +1045,9 @@ public TTopologyTemplate injectConnectionNodeTemplates(TTopologyTemplate topolog TNodeTemplate nodeWithOpenCapability = nodeTemplates.stream() .filter(nt -> nt.getCapabilities() != null) - .filter(nt -> nt.getCapabilities().getCapability().stream() + .filter(nt -> nt.getCapabilities().stream() .anyMatch(c -> c.getType().equals(requiredCapabilityTypeQName))).findFirst().get(); - TCapability matchingCapability = nodeWithOpenCapability.getCapabilities().getCapability() + TCapability matchingCapability = nodeWithOpenCapability.getCapabilities() .stream().filter(c -> c.getType().equals(requiredCapabilityTypeQName)).findFirst().get(); TRelationshipType matchingRelationshipType = @@ -1067,32 +1068,19 @@ public TTopologyTemplate injectConnectionNodeTemplates(TTopologyTemplate topolog */ public Map getOpenRequirementsAndItsNodeTemplate(TTopologyTemplate topologyTemplate) { Map openRequirementsAndItsNodeTemplates = new HashMap<>(); - List nodeTemplates = ModelUtilities.getAllNodeTemplates(topologyTemplate); + List nodeTemplates = topologyTemplate.getNodeTemplates(); for (TNodeTemplate nodeTemplate : nodeTemplates) { if (nodeTemplate.getRequirements() != null) { - List containedRequirements = nodeTemplate.getRequirements().getRequirement(); - List successorsOfNodeTemplate = new ArrayList<>(); - List outgoingRelationships = ModelUtilities.getOutgoingRelationshipTemplates(topologyTemplate, nodeTemplate); - if (outgoingRelationships != null && !outgoingRelationships.isEmpty()) { - for (TRelationshipTemplate relationshipTemplate : outgoingRelationships) { - if (relationshipTemplate.getSourceElement().getRef() instanceof TNodeTemplate) { - successorsOfNodeTemplate.add((TNodeTemplate) relationshipTemplate.getTargetElement().getRef()); - } else { - TCapability targetElement = (TCapability) relationshipTemplate.getTargetElement().getRef(); - successorsOfNodeTemplate.add(nodeTemplates.stream() - .filter(nt -> nt.getCapabilities() != null) - .filter(nt -> nt.getCapabilities().getCapability().stream().anyMatch(c -> c.getId().equals(targetElement.getId()))).findAny().get()); - } - } - } - for (TRequirement requirement : containedRequirements) { + extractSuccessorsOfNode(topologyTemplate, nodeTemplates, nodeTemplate); + List successorsOfNodeTemplate = extractSuccessorsOfNode(topologyTemplate, nodeTemplates, nodeTemplate); + for (TRequirement requirement : nodeTemplate.getRequirements()) { QName requiredCapabilityTypeQName = getRequiredCapabilityTypeQNameOfRequirement(requirement); if (!successorsOfNodeTemplate.isEmpty()) { boolean existingCap = successorsOfNodeTemplate.stream() .filter(x -> x.getCapabilities() != null) - .anyMatch(x -> x.getCapabilities().getCapability().stream().anyMatch(y -> y.getType().equals(requiredCapabilityTypeQName))); + .anyMatch(x -> x.getCapabilities().stream().anyMatch(y -> y.getType().equals(requiredCapabilityTypeQName))); if (!existingCap) { openRequirementsAndItsNodeTemplates.put(requirement, nodeTemplate); } @@ -1105,6 +1093,25 @@ public Map getOpenRequirementsAndItsNodeTemplate(TT return openRequirementsAndItsNodeTemplates; } + private List extractSuccessorsOfNode(TTopologyTemplate topologyTemplate, List nodeTemplates, TNodeTemplate nodeTemplate) { + List successorsOfNodeTemplate = new ArrayList<>(); + List outgoingRelationships = ModelUtilities.getOutgoingRelationshipTemplates(topologyTemplate, nodeTemplate); + if (listIsNotNullOrEmpty(outgoingRelationships)) { + for (TRelationshipTemplate relationshipTemplate : outgoingRelationships) { + if (relationshipTemplate.getSourceElement().getRef() instanceof TNodeTemplate) { + successorsOfNodeTemplate.add((TNodeTemplate) relationshipTemplate.getTargetElement().getRef()); + } else { + TCapability targetElement = (TCapability) relationshipTemplate.getTargetElement().getRef(); + successorsOfNodeTemplate.add(nodeTemplates.stream() + .filter(nt -> nt.getCapabilities() != null) + .filter(nt -> nt.getCapabilities().stream().anyMatch(c -> c.getId().equals(targetElement.getId()))).findAny().get()); + } + } + } + + return successorsOfNodeTemplate; + } + /** * */ @@ -1439,32 +1446,18 @@ public Map getOpenRequirementsAndMatchingBasisCapabilityTy */ public List getOpenRequirements(TTopologyTemplate topologyTemplate) { List openRequirements = new ArrayList<>(); - List nodeTemplates = ModelUtilities.getAllNodeTemplates(topologyTemplate); + List nodeTemplates = topologyTemplate.getNodeTemplates(); for (TNodeTemplate nodeTemplate : nodeTemplates) { if (nodeTemplate.getRequirements() != null) { - List containedRequirements = nodeTemplate.getRequirements().getRequirement(); - List successorsOfNodeTemplate = new ArrayList<>(); - List outgoingRelationships = ModelUtilities.getOutgoingRelationshipTemplates(topologyTemplate, nodeTemplate); - if (outgoingRelationships != null && !outgoingRelationships.isEmpty()) { - for (TRelationshipTemplate relationshipTemplate : outgoingRelationships) { - if (relationshipTemplate.getSourceElement().getRef() instanceof TNodeTemplate) { - successorsOfNodeTemplate.add((TNodeTemplate) relationshipTemplate.getTargetElement().getRef()); - } else { - TCapability targetElement = (TCapability) relationshipTemplate.getTargetElement().getRef(); - successorsOfNodeTemplate.add(nodeTemplates.stream() - .filter(nt -> nt.getCapabilities() != null) - .filter(nt -> nt.getCapabilities().getCapability().stream().anyMatch(c -> c.getId().equals(targetElement.getId()))).findAny().get()); - } - } - } - for (TRequirement requirement : containedRequirements) { + List successorsOfNodeTemplate = extractSuccessorsOfNode(topologyTemplate, nodeTemplates, nodeTemplate); + for (TRequirement requirement : nodeTemplate.getRequirements()) { QName requiredCapabilityTypeQName = getRequiredCapabilityTypeQNameOfRequirement(requirement); if (!successorsOfNodeTemplate.isEmpty()) { boolean existingCap = successorsOfNodeTemplate.stream() .filter(x -> x.getCapabilities() != null) - .anyMatch(x -> x.getCapabilities().getCapability().stream().anyMatch(y -> y.getType().equals(requiredCapabilityTypeQName))); + .anyMatch(x -> x.getCapabilities().stream().anyMatch(y -> y.getType().equals(requiredCapabilityTypeQName))); if (!existingCap) { openRequirements.add(requirement); } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/CriteriaCached.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/CriteriaCached.java index f7cc1865d8..c24e34261e 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/CriteriaCached.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/CriteriaCached.java @@ -116,7 +116,7 @@ protected Map toInjectParameter(TopologyWrapper topol } // the same matching nt is injected for all nts that should be hosted together - TTopologyTemplate replacement = AllocationUtils.deepcopy(entry.getKey().getReplacement()); + TTopologyTemplate replacement = AllocationUtils.deepCopy(entry.getKey().getReplacement()); for (PermutationHelper permutationHelper : hostTogether) { injectParameter.put(permutationHelper.getCorrespondingNT().getId(), replacement); done.add(permutationHelper); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/CriteriaCommon.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/CriteriaCommon.java index 3e05043b1a..2115ea6600 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/CriteriaCommon.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/CriteriaCommon.java @@ -80,7 +80,7 @@ private List generateTopologies(List topologie List generated = new ArrayList<>(); for (List permutation : permutations) { - TTopologyTemplate newTopologyTemplate = AllocationUtils.deepcopy(topology.getTopology()); + TTopologyTemplate newTopologyTemplate = AllocationUtils.deepCopy(topology.getTopology()); Map injectParameter = toInjectParameter(topology, permutation); newTopologyTemplate = splitting.injectNodeTemplates(newTopologyTemplate, injectParameter, injectRemoval); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/fulfillpolicies/FulfillPolicies.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/fulfillpolicies/FulfillPolicies.java index a4da41d70b..e087c5dd58 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/fulfillpolicies/FulfillPolicies.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/fulfillpolicies/FulfillPolicies.java @@ -52,7 +52,7 @@ public FulfillPolicies(JsonNode params, int outputCap) { public List filter(List topologies) { // clone to avoid altering input topologies List cloned = topologies.stream().map(t -> - new TopologyWrapper(AllocationUtils.deepcopy(t.getTopology()))).collect(Collectors.toList()); + new TopologyWrapper(AllocationUtils.deepCopy(t.getTopology()))).collect(Collectors.toList()); // all generated topologies have the same policies for top level nts -> get policies from any of them Map> policiesForNTs = getPoliciesForNTs(cloned.get(0), params); return new PoliciesFilter(cloned, policiesForNTs).filter(); @@ -98,8 +98,10 @@ private Map> assignTargetLabels(TopologyWrapper topol matchingFragments = new PolicyComparison(policiesForNTs.get(topLevelNT), matchingFragments).getFragmentsFulfillingPolicies(); for (TTopologyTemplate fragment : matchingFragments) { - String targetLabel = ModelUtilities.getTargetLabel(fragment.getNodeTemplates().get(0)).get(); - possibleTargetLabels.get(topLevelNT).add(targetLabel); + ModelUtilities.getTargetLabel(fragment.getNodeTemplates().get(0)) + .ifPresent(targetLabel -> + possibleTargetLabels.get(topLevelNT).add(targetLabel) + ); } if (possibleTargetLabels.get(topLevelNT).isEmpty()) { @@ -136,8 +138,7 @@ protected List> getPossibleMatches(TopologyWrapper topol } /** - * Get policy templates by names specified in GUI. - * The Policy Template names are used as IDs -> have to be unique. + * Get policy templates by names specified in GUI. The Policy Template names are used as IDs -> have to be unique. */ private Map> getPoliciesForNTs(TopologyWrapper topology, JsonNode params) { Map> policiesForNTs = new HashMap<>(); @@ -151,8 +152,8 @@ private Map> getPoliciesForNTs(TopologyWrappe String propertyKey = policyWithOperator.get("property").asText(); String operator = policyWithOperator.get("operator").asText(); - for (TPolicy policy : topLevelNT.getPolicies().getPolicy()) { - if (policy.getName().equals(policyWithOperator.get("policy").asText())) { + for (TPolicy policy : topLevelNT.getPolicies()) { + if (policy.getName() != null && policy.getName().equals(policyWithOperator.get("policy").asText())) { TPolicyTemplate policyTemplate = AllocationUtils.toPolicyTemplate(policy); policiesForNTs.get(topLevelNT).add(new PolicyWrapper(policyTemplate, propertyKey, operator)); } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/minexternalconnections/MinExternalConnections.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/minexternalconnections/MinExternalConnections.java index 247390eaaf..812a3547f8 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/minexternalconnections/MinExternalConnections.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/minexternalconnections/MinExternalConnections.java @@ -93,7 +93,7 @@ public List generateTargetLabelTopologies(TopologyWrapper topol if (generatedTopologies.size() >= outputCap) { break; } - TopologyWrapper clone = new TopologyWrapper(AllocationUtils.deepcopy(topology.getTopology())); + TopologyWrapper clone = new TopologyWrapper(AllocationUtils.deepCopy(topology.getTopology())); Map topLevelNtsByIds = clone.getTopLevelNtsByIds(); // map merged ConnectsToGraph to topology diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/minhosts/MinHosts.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/minhosts/MinHosts.java index aaf6c3ea49..c9d5399d03 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/minhosts/MinHosts.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/criteria/minhosts/MinHosts.java @@ -128,7 +128,7 @@ protected Map toInjectParameter(TopologyWrapper topol Map injectParameter = new HashMap<>(); for (PermutationHelper possibility : permutation) { // all predecessors of the nt to replace get the same matching nt - TTopologyTemplate clone = AllocationUtils.deepcopy(possibility.getReplacement()); + TTopologyTemplate clone = AllocationUtils.deepCopy(possibility.getReplacement()); for (TNodeTemplate predecessor : topology.getHostedOnPredecessors(possibility.getCorrespondingNT())) { injectParameter.put(predecessor.getId(), clone); } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/util/AllocationUtils.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/util/AllocationUtils.java index 79898b104f..f679c3e84f 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/util/AllocationUtils.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/util/AllocationUtils.java @@ -36,7 +36,7 @@ public class AllocationUtils { public static long idCounter = 0; - private static IRepository repository = RepositoryFactory.getRepository(); + private static final IRepository repository = RepositoryFactory.getRepository(); /** * Calculates the permutations of the given lists. @@ -81,7 +81,7 @@ public static List generateTargetLabelTopologies(TopologyWrappe List topologies = new ArrayList<>(); for (List permutation : permutations) { - TopologyWrapper newTopology = new TopologyWrapper(deepcopy(topology.getTopology())); + TopologyWrapper newTopology = new TopologyWrapper(deepCopy(topology.getTopology())); Map topLevelNtsByIds = newTopology.getTopLevelNtsByIds(); for (PermutationHelper possibility : permutation) { @@ -100,7 +100,7 @@ public static List getPolicyTemplates(TNodeTemplate nodeTemplat List policyTemplates = new ArrayList<>(); if (nodeTemplate.getPolicies() != null) { - List tPolicies = nodeTemplate.getPolicies().getPolicy(); + List tPolicies = nodeTemplate.getPolicies(); for (TPolicy tPolicy : tPolicies) { policyTemplates.add(toPolicyTemplate(tPolicy)); } @@ -116,14 +116,14 @@ public static TPolicyTemplate toPolicyTemplate(TPolicy policy) { /** * Still no complete copy of all TOSCA constructs. Cloned so that !original.equals(clone). */ - public static TTopologyTemplate deepcopy(TTopologyTemplate topologyTemplate) { - return deepcopy(topologyTemplate, true); + public static TTopologyTemplate deepCopy(TTopologyTemplate topologyTemplate) { + return deepCopy(topologyTemplate, true); } /** * Still no complete copy of all TOSCA constructs. */ - public static TTopologyTemplate deepcopy(TTopologyTemplate topologyTemplate, boolean changeNames) { + public static TTopologyTemplate deepCopy(TTopologyTemplate topologyTemplate, boolean changeNames) { TTopologyTemplate.Builder clone = new TTopologyTemplate.Builder(); Map clonedNTsByIds = new HashMap<>(); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/util/TopologyWrapper.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/util/TopologyWrapper.java index 1830ca4103..22484c8fea 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/util/TopologyWrapper.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/targetallocation/util/TopologyWrapper.java @@ -192,7 +192,7 @@ public Set getPresentTargetLabels() { public List getRequirements(TNodeTemplate nodeTemplate) { if (nodeTemplate.getRequirements() != null) { - return nodeTemplate.getRequirements().getRequirement(); + return nodeTemplate.getRequirements(); } return new ArrayList<>(); } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/XmlRepository.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/XmlRepository.java index 5ae9d858ca..c6986b9d7b 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/XmlRepository.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/XmlRepository.java @@ -64,7 +64,7 @@ public class XmlRepository extends AbstractFileBasedRepository { private static final Logger LOGGER = LoggerFactory.getLogger(XmlRepository.class); /** - * @param repositoryRoot root of the filebased repository + * @param repositoryRoot root of the file-based repository */ public XmlRepository(Path repositoryRoot) { super(repositoryRoot); @@ -83,7 +83,7 @@ public org.eclipse.winery.model.tosca.TDefinitions definitionsFromRef(Repository LOGGER.info("Failed to read definitions from reference {}", ref, e); return null; } - ToCanonical converter = new ToCanonical(this); + ToCanonical converter = new ToCanonical(); return converter.convert((XDefinitions) definition); } @@ -119,7 +119,7 @@ public void putContentToFile(RepositoryFileReference ref, InputStream inputStrea @Override public void putDefinition(RepositoryFileReference ref, org.eclipse.winery.model.tosca.TDefinitions content) throws IOException { - FromCanonical converter = new FromCanonical(this); + FromCanonical converter = new FromCanonical(); XTDefinitions definitions = converter.convert(content); Path serializationTarget = ref2AbsolutePath(ref); Files.createDirectories(serializationTarget.getParent()); @@ -142,14 +142,14 @@ public SortedSet getDefinitionsChildIds(Class< return res; } assert (Files.isDirectory(dir)); - final OnlyNonHiddenDirectories onhdf = new OnlyNonHiddenDirectories(); + final OnlyNonHiddenDirectories hiddenDirectories = new OnlyNonHiddenDirectories(); // list all directories contained in this directory - try (DirectoryStream ds = Files.newDirectoryStream(dir, onhdf)) { + try (DirectoryStream ds = Files.newDirectoryStream(dir, hiddenDirectories)) { for (Path nsP : ds) { // the current path is the namespace Namespace ns = new Namespace(nsP.getFileName().toString(), true); - try (DirectoryStream idDS = Files.newDirectoryStream(nsP, onhdf)) { + try (DirectoryStream idDS = Files.newDirectoryStream(nsP, hiddenDirectories)) { for (Path idP : idDS) { XmlId xmlId = new XmlId(idP.getFileName().toString(), true); if (omitDevelopmentVersions) { @@ -191,7 +191,7 @@ public SortedSet getDefinitionsChildIds(Class< @Override public void serialize(org.eclipse.winery.model.tosca.TDefinitions definitions, OutputStream target) throws IOException { - FromCanonical converter = new FromCanonical(this); + FromCanonical converter = new FromCanonical(); XTDefinitions implementedStandard = converter.convert(definitions); serialize(implementedStandard, target); } diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/FromCanonical.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/FromCanonical.java index 2661898393..1c30852bb3 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/FromCanonical.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/FromCanonical.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation + * Copyright (c) 2020-2021 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -44,10 +44,9 @@ import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TExtension; import org.eclipse.winery.model.tosca.TGroupDefinition; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; +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.TInterfaces; import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TNodeTypeImplementation; @@ -89,12 +88,10 @@ import org.eclipse.winery.model.tosca.xml.XDefinitions; import org.eclipse.winery.model.tosca.xml.XHasId; import org.eclipse.winery.model.tosca.xml.XRelationshipSourceOrTarget; -import org.eclipse.winery.model.tosca.xml.XTAppliesTo; import org.eclipse.winery.model.tosca.xml.XTArtifact; import org.eclipse.winery.model.tosca.xml.XTArtifactReference; import org.eclipse.winery.model.tosca.xml.XTArtifactTemplate; import org.eclipse.winery.model.tosca.xml.XTArtifactType; -import org.eclipse.winery.model.tosca.xml.XTArtifacts; import org.eclipse.winery.model.tosca.xml.XTBoolean; import org.eclipse.winery.model.tosca.xml.XTBoundaryDefinitions; import org.eclipse.winery.model.tosca.xml.XTCapability; @@ -105,7 +102,6 @@ import org.eclipse.winery.model.tosca.xml.XTConstraint; import org.eclipse.winery.model.tosca.xml.XTDefinitions; import org.eclipse.winery.model.tosca.xml.XTDeploymentArtifact; -import org.eclipse.winery.model.tosca.xml.XTDeploymentArtifacts; import org.eclipse.winery.model.tosca.xml.XTDocumentation; import org.eclipse.winery.model.tosca.xml.XTEntityTemplate; import org.eclipse.winery.model.tosca.xml.XTEntityType; @@ -114,18 +110,16 @@ import org.eclipse.winery.model.tosca.xml.XTExportedOperation; import org.eclipse.winery.model.tosca.xml.XTExtensibleElements; import org.eclipse.winery.model.tosca.xml.XTExtension; -import org.eclipse.winery.model.tosca.xml.XTImplementationArtifacts; +import org.eclipse.winery.model.tosca.xml.XTImplementationArtifact; import org.eclipse.winery.model.tosca.xml.XTImport; +import org.eclipse.winery.model.tosca.xml.XTInstanceState; import org.eclipse.winery.model.tosca.xml.XTInterface; -import org.eclipse.winery.model.tosca.xml.XTInterfaces; import org.eclipse.winery.model.tosca.xml.XTNodeTemplate; import org.eclipse.winery.model.tosca.xml.XTNodeType; import org.eclipse.winery.model.tosca.xml.XTNodeTypeImplementation; import org.eclipse.winery.model.tosca.xml.XTOperation; import org.eclipse.winery.model.tosca.xml.XTParameter; import org.eclipse.winery.model.tosca.xml.XTPlan; -import org.eclipse.winery.model.tosca.xml.XTPlans; -import org.eclipse.winery.model.tosca.xml.XTPolicies; import org.eclipse.winery.model.tosca.xml.XTPolicy; import org.eclipse.winery.model.tosca.xml.XTPolicyTemplate; import org.eclipse.winery.model.tosca.xml.XTPolicyType; @@ -141,7 +135,6 @@ import org.eclipse.winery.model.tosca.xml.XTRequirementType; import org.eclipse.winery.model.tosca.xml.XTServiceTemplate; import org.eclipse.winery.model.tosca.xml.XTTag; -import org.eclipse.winery.model.tosca.xml.XTTopologyElementInstanceStates; import org.eclipse.winery.model.tosca.xml.XTTopologyTemplate; import org.eclipse.winery.model.tosca.xml.extensions.XOTAttributeMapping; import org.eclipse.winery.model.tosca.xml.extensions.XOTAttributeMappingType; @@ -159,24 +152,19 @@ import org.eclipse.winery.model.tosca.xml.extensions.XOTStringList; import org.eclipse.winery.model.tosca.xml.extensions.XOTTestRefinementModel; import org.eclipse.winery.model.tosca.xml.extensions.XOTTopologyFragmentRefinementModel; -import org.eclipse.winery.repository.xml.XmlRepository; -import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.eclipse.winery.common.ListUtils.listIsNotNullOrEmpty; + @SuppressWarnings("DuplicatedCode") -@NonNullByDefault public class FromCanonical { private static final Logger LOGGER = LoggerFactory.getLogger(FromCanonical.class); - private final XmlRepository repository; - private List rollingImportStorage; - - public FromCanonical(XmlRepository repository) { - this.repository = repository; + public FromCanonical() { } public XTDefinitions convert(TDefinitions canonical) { @@ -187,10 +175,14 @@ public XTDefinitions convert(TDefinitions canonical) { * Converts a canonical TDefinitions collection to XML TDefinitions. */ public XTDefinitions convert(TDefinitions canonical, boolean convertImports) { + if (convertImports) { + LOGGER.warn("Converting imports is not yet implemented!"); + } + // FIXME need to correctly deal with convertImports flag to create a self-contained Definitions to export as CSAR if it is set. XDefinitions.Builder builder = new XDefinitions.Builder(canonical.getId(), canonical.getTargetNamespace()) .setImport(convertList(canonical.getImport(), this::convert)) - .setExtensions(convertExtensions(canonical.getExtensions())) + .addExtensions(convertExtensions(canonical.getExtensions())) .addTypes(convertTypes(canonical.getTypes())) .setServiceTemplates(convertList(canonical.getServiceTemplates(), this::convert)) .setNodeTypes(convertList(canonical.getNodeTypes(), this::convert)) @@ -203,8 +195,7 @@ public XTDefinitions convert(TDefinitions canonical, boolean convertImports) { .setPolicyTypes(convertList(canonical.getPolicyTypes(), this::convert)) .setPolicyTemplate(convertList(canonical.getPolicyTemplates(), this::convert)) .setRequirementTypes(convertList(canonical.getRequirementTypes(), this::convert)) - .setName(canonical.getName()) - .addImports(this.rollingImportStorage); + .setName(canonical.getName()); // this handles the "conversion" – basically copying of data – required by the disjoint TExtensibleElements // acting as baseclass for all the extensions we support builder.addNonStandardElements(convertList(canonical.getPatternRefinementModels(), this::convert)) @@ -226,13 +217,8 @@ private XTRelationshipType convert(TRelationshipType canonical) { builder.setValidTarget(canonical.getValidTarget().getTypeRef()); } if (canonical.getInstanceStates() != null) { - XTTopologyElementInstanceStates instanceStates = new XTTopologyElementInstanceStates(); - instanceStates.getInstanceState().addAll(canonical.getInstanceStates().getInstanceState().stream() - .map(c -> { - XTTopologyElementInstanceStates.InstanceState r = new XTTopologyElementInstanceStates.InstanceState(); - r.setState(c.getState()); - return r; - }).collect(Collectors.toList())); + List instanceStates = canonical.getInstanceStates().stream() + .map(c -> new XTInstanceState(c.getState())).collect(Collectors.toList()); builder.setInstanceStates(instanceStates); } if (canonical.getInterfaceDefinitions() != null) { @@ -242,15 +228,17 @@ private XTRelationshipType convert(TRelationshipType canonical) { return builder.build(); } - private List convertInterfaces(@Nullable TInterfaces interfaces) { + private List convertInterfaces(@Nullable List interfaces) { if (interfaces == null) { return Collections.emptyList(); } - return interfaces.getInterface().stream().map(this::convertInterface).collect(Collectors.toList()); + return interfaces.stream() + .map(this::convert) + .collect(Collectors.toList()); } - private XTInterface convertInterface(TInterface canonical) { - return new XTInterface.Builder(canonical.getName(), convertOperations(canonical.getOperation())).build(); + private XTInterface convert(TInterface canonical) { + return new XTInterface.Builder(canonical.getName(), convertOperations(canonical.getOperations())).build(); } private List convertOperations(List operation) { @@ -260,11 +248,11 @@ private List convertOperations(List operation) { private XTOperation convert(TOperation canonical) { XTOperation.Builder builder = new XTOperation.Builder(canonical.getName()); if (canonical.getInputParameters() != null) { - builder.addInputParameters(canonical.getInputParameters().getInputParameter().stream() + builder.addInputParameters(canonical.getInputParameters().stream() .map(this::convert).collect(Collectors.toList())); } if (canonical.getOutputParameters() != null) { - builder.addOutputParameters(canonical.getOutputParameters().getOutputParameter().stream() + builder.addOutputParameters(canonical.getOutputParameters().stream() .map(this::convert).collect(Collectors.toList())); } return builder.build(); @@ -288,14 +276,17 @@ private XTRelationshipTypeImplementation convert(TRelationshipTypeImplementation private , Value extends TEntityTypeImplementation> void fillEntityTypeImplementationProperties(Builder builder, Value canonical) { if (canonical.getRequiredContainerFeatures() != null) { - builder.addRequiredContainerFeatures(canonical.getRequiredContainerFeatures().getRequiredContainerFeature() - .stream().map(this::convert).collect(Collectors.toList())); + builder.addRequiredContainerFeatures( + canonical.getRequiredContainerFeatures().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (canonical.getTags() != null) { - builder.addTags(convertList(canonical.getTags().getTag(), this::convert)); + builder.addTags(convertList(canonical.getTags(), this::convert)); } if (canonical.getImplementationArtifacts() != null) { - builder.addImplementationArtifacts(canonical.getImplementationArtifacts().getImplementationArtifact().stream() + builder.addImplementationArtifacts(canonical.getImplementationArtifacts().stream() .map(this::convert).collect(Collectors.toList())); } builder.setTargetNamespace(canonical.getTargetNamespace()); @@ -304,8 +295,8 @@ void fillEntityTypeImplementationProperties(Builder builder, Value canonical) { fillExtensibleElementsProperties(builder, canonical); } - private XTImplementationArtifacts.ImplementationArtifact convert(TImplementationArtifacts.ImplementationArtifact canonical) { - return new XTImplementationArtifacts.ImplementationArtifact.Builder(canonical.getArtifactType()) + private XTImplementationArtifact convert(TImplementationArtifact canonical) { + return new XTImplementationArtifact.Builder(canonical.getArtifactType()) .setName(canonical.getName()) .setInterfaceName(canonical.getInterfaceName()) .setOperationName(canonical.getOperationName()) @@ -314,12 +305,12 @@ private XTImplementationArtifacts.ImplementationArtifact convert(TImplementation } private XTTag convert(TTag canonical) { - return new XTTag.Builder().setName(canonical.getName()).setValue(canonical.getValue()).build(); + return new XTTag.Builder(canonical.getName(), canonical.getValue()) + .build(); } private XTRequiredContainerFeature convert(TRequiredContainerFeature canonical) { - XTRequiredContainerFeature result = new XTRequiredContainerFeature(canonical.getFeature()); - return result; + return new XTRequiredContainerFeature(canonical.getFeature()); } private XTPolicyTemplate convert(TPolicyTemplate canonical) { @@ -331,16 +322,12 @@ private XTPolicyTemplate convert(TPolicyTemplate canonical) { private XTPolicyType convert(TPolicyType canonical) { XTPolicyType.Builder builder = new XTPolicyType.Builder(canonical.getName()); - if (canonical.getAppliesTo() != null) { - XTAppliesTo appliesTo = new XTAppliesTo(); - appliesTo.getNodeTypeReference().addAll(canonical.getAppliesTo().getNodeTypeReference().stream() - .map(c -> { - XTAppliesTo.NodeTypeReference result = new XTAppliesTo.NodeTypeReference(); - result.setTypeRef(c.getTypeRef()); - return result; - }) - .collect(Collectors.toList())); - builder.setAppliesTo(appliesTo); + if (!canonical.getAppliesTo().isEmpty()) { + builder.setAppliesTo( + canonical.getAppliesTo().stream() + .map(c -> new XTPolicyType.XNodeTypeReference(c.getTypeRef())) + .collect(Collectors.toList()) + ); } fillEntityTypeProperties(builder, canonical); return builder.build(); @@ -349,7 +336,7 @@ private XTPolicyType convert(TPolicyType canonical) { private , Value extends TEntityType> void fillEntityTypeProperties(Builder builder, Value canonical) { if (canonical.getTags() != null) { - builder.addTags(convertList(canonical.getTags().getTag(), this::convert)); + builder.addTags(convertList(canonical.getTags(), this::convert)); } if (canonical.getDerivedFrom() != null) { XTEntityType.DerivedFrom derived = new XTEntityType.DerivedFrom(); @@ -359,7 +346,7 @@ void fillEntityTypeProperties(Builder builder, Value canonical) { if (canonical.getProperties() != null) { TEntityType.PropertiesDefinition properties = canonical.getProperties(); if (properties instanceof WinerysPropertiesDefinition) { - // do the magic thingy of storing the properties definition in the any element. + // do the magic thingy of storing the properties' definition in the any element. builder.addAny(properties); } else if (properties instanceof TEntityType.XmlElementDefinition) { XTEntityType.PropertiesDefinition propertiesDefinition = new XTEntityType.PropertiesDefinition(); @@ -371,7 +358,7 @@ void fillEntityTypeProperties(Builder builder, Value canonical) { ); builder.setPropertiesDefinition(propertiesDefinition); } else if (properties instanceof TEntityType.YamlPropertiesDefinition) { - // currently unsupported!? + // unsupported!? (currently) LOGGER.warn("Trying to convert YAML-based type definition [{}] to XML. Properties are incorrect!", canonical.getQName()); } } @@ -398,9 +385,7 @@ private XTRequirementType convert(TRequirementType canonical) { private XTNodeTypeImplementation convert(TNodeTypeImplementation canonical) { XTNodeTypeImplementation.Builder builder = new XTNodeTypeImplementation.Builder(canonical.getName(), canonical.getNodeType()); if (canonical.getDeploymentArtifacts() != null) { - XTDeploymentArtifacts artifacts = new XTDeploymentArtifacts.Builder(canonical.getDeploymentArtifacts() - .getDeploymentArtifact().stream().map(this::convert).collect(Collectors.toList())).build(); - builder.setDeploymentArtifacts(artifacts); + builder.setDeploymentArtifacts(convertList(canonical.getDeploymentArtifacts(), this::convert)); } if (canonical.getDerivedFrom() != null) { XTNodeTypeImplementation.DerivedFrom derived = new XTNodeTypeImplementation.DerivedFrom(); @@ -420,39 +405,27 @@ private XTDeploymentArtifact convert(TDeploymentArtifact canonical) { private XTNodeType convert(TNodeType canonical) { XTNodeType.Builder builder = new XTNodeType.Builder(canonical.getName()); - if (canonical.getRequirementDefinitions() != null) { - XTNodeType.RequirementDefinitions reqDefs = new XTNodeType.RequirementDefinitions(); - reqDefs.getRequirementDefinition().addAll(convertList(canonical.getRequirementDefinitions().getRequirementDefinition(), this::convert)); - builder.setRequirementDefinitions(reqDefs); + if (listIsNotNullOrEmpty(canonical.getRequirementDefinitions())) { + builder.setRequirementDefinitions(convertList(canonical.getRequirementDefinitions(), this::convert)); } if (canonical.getCapabilityDefinitions() != null) { - XTNodeType.CapabilityDefinitions capDefs = new XTNodeType.CapabilityDefinitions(); - capDefs.getCapabilityDefinition().addAll(convertList(canonical.getCapabilityDefinitions().getCapabilityDefinition(), this::convert)); - builder.setCapabilityDefinitions(capDefs); + builder.setCapabilityDefinitions(convertList(canonical.getCapabilityDefinitions(), this::convert)); } if (canonical.getInstanceStates() != null) { - XTTopologyElementInstanceStates instanceStates = new XTTopologyElementInstanceStates(); - instanceStates.getInstanceState().addAll(canonical.getInstanceStates().getInstanceState().stream() - .map(c -> { - XTTopologyElementInstanceStates.InstanceState r = new XTTopologyElementInstanceStates.InstanceState(); - r.setState(c.getState()); - return r; - }).collect(Collectors.toList())); + List instanceStates = canonical.getInstanceStates().stream() + .map(c -> new XTInstanceState(c.getState())).collect(Collectors.toList()); builder.setInstanceStates(instanceStates); } if (canonical.getInterfaces() != null) { - XTInterfaces interfaces = new XTInterfaces(); - interfaces.getInterface().addAll(convertInterfaces(canonical.getInterfaces())); - builder.setInterfaces(interfaces); + builder.setInterfaces(convertList(canonical.getInterfaces(), this::convert)); } if (canonical.getInterfaceDefinitions() != null) { LOGGER.warn("Converting YAML InterfaceDefinitions to XML is currently not supported!"); } if (canonical.getArtifacts() != null) { - XTArtifacts artifacts = new XTArtifacts(); - artifacts.getArtifact().addAll(canonical.getArtifacts().getArtifact().stream() - .map(this::convert).collect(Collectors.toList())); - builder.addToAny(artifacts); + builder.addToAny( + this.convertList(canonical.getArtifacts(), this::convert) + ); } fillEntityTypeProperties(builder, canonical); return builder.build(); @@ -472,10 +445,11 @@ private XTRequirementDefinition convert(TRequirementDefinition canonical) { // it's required for us, though, so we just assume it's present XTRequirementDefinition.Builder builder = new XTRequirementDefinition.Builder(canonical.getName(), canonical.getRequirementType()); if (canonical.getConstraints() != null) { - XTRequirementDefinition.Constraints constraints = new XTRequirementDefinition.Constraints(); - constraints.getConstraint().addAll(canonical.getConstraints().getConstraint().stream() - .map(this::convert).collect(Collectors.toList())); - builder.setConstraints(constraints); + builder.setConstraints( + canonical.getConstraints().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } builder.setLowerBound(canonical.getLowerBound()); builder.setUpperBound(canonical.getUpperBound()); @@ -490,9 +464,9 @@ private XTRequirementDefinition convert(TRequirementDefinition canonical) { private XTCapabilityDefinition convert(TCapabilityDefinition canonical) { XTCapabilityDefinition.Builder builder = new XTCapabilityDefinition.Builder(canonical.getName(), canonical.getCapabilityType()); if (canonical.getConstraints() != null) { - canonical.getConstraints().getConstraint() - .stream().map(this::convert) - .forEach(builder::addConstraints); + canonical.getConstraints().stream() + .map(this::convert) + .forEach(builder::addConstraint); } builder.setLowerBound(canonical.getLowerBound()); builder.setUpperBound(canonical.getUpperBound()); @@ -502,7 +476,7 @@ private XTCapabilityDefinition convert(TCapabilityDefinition canonical) { } private XTConstraint convert(TConstraint canonical) { - XTConstraint.Builder constraint = new XTConstraint.Builder(); + XTConstraint.Builder constraint = new XTConstraint.Builder<>(); constraint.setAny(canonical.getAny()); constraint.setConstraintType(canonical.getConstraintType()); return constraint.build(); @@ -526,10 +500,10 @@ void fillEntityTemplateProperties(Builder builder, Value canonical) { builder.setProperties(convertProperties(canonical.getProperties())); } if (canonical.getPropertyConstraints() != null) { - XTEntityTemplate.PropertyConstraints constraints = new XTEntityTemplate.PropertyConstraints(); - constraints.getPropertyConstraint().addAll(canonical.getPropertyConstraints().getPropertyConstraint().stream() - .map(this::convert).collect(Collectors.toList())); - builder.setPropertyConstraints(constraints); + builder.setPropertyConstraints( + canonical.getPropertyConstraints().stream() + .map(this::convert).collect(Collectors.toList()) + ); } fillExtensibleElementsProperties(builder, canonical); } @@ -591,9 +565,9 @@ private XTArtifactTemplate convert(TArtifactTemplate canonical) { XTArtifactTemplate.Builder builder = new XTArtifactTemplate.Builder(canonical.getId(), canonical.getType()); builder.setName(canonical.getName()); if (canonical.getArtifactReferences() != null) { - canonical.getArtifactReferences().getArtifactReference().stream() + canonical.getArtifactReferences().stream() .map(this::convert) - .forEach(builder::addArtifactReferences); + .forEach(builder::addArtifactReference); } fillEntityTemplateProperties(builder, canonical); return builder.build(); @@ -605,18 +579,22 @@ private XTArtifactReference convert(TArtifactReference canonical) { return xml.build(); } - private List convertIncludeOrExclude(List includeOrExclude) { - List results = new ArrayList<>(); - for (Object item : includeOrExclude) { + private List convertIncludeOrExclude(List includeOrExclude) { + List results = new ArrayList<>(); + for (TArtifactReference.IncludeOrExclude item : includeOrExclude) { if (item instanceof TArtifactReference.Include) { - XTArtifactReference.Include xml = new XTArtifactReference.Include(); - xml.setPattern(((TArtifactReference.Include) item).getPattern()); - results.add(xml); + results.add( + new XTArtifactReference.Include( + item.getPattern() + ) + ); } if (item instanceof TArtifactReference.Exclude) { - XTArtifactReference.Exclude xml = new XTArtifactReference.Exclude(); - xml.setPattern(((TArtifactReference.Exclude) item).getPattern()); - results.add(xml); + results.add( + new XTArtifactReference.Exclude( + item.getPattern() + ) + ); } } return results; @@ -635,14 +613,15 @@ private XTServiceTemplate convert(TServiceTemplate canonical) { builder.setName(canonical.getName()); builder.setTargetNamespace(canonical.getTargetNamespace()); if (canonical.getTags() != null) { - builder.addTags(convertList(canonical.getTags().getTag(), this::convert)); + builder.addTags(convertList(canonical.getTags(), this::convert)); } builder.setBoundaryDefinitions(convert(canonical.getBoundaryDefinitions())); if (canonical.getPlans() != null) { - XTPlans plans = new XTPlans(); - plans.setTargetNamespace(canonical.getPlans().getTargetNamespace()); - plans.getPlan().addAll(canonical.getPlans().getPlan().stream().map(this::convert).collect(Collectors.toList())); - builder.setPlans(plans); + builder.setPlans( + canonical.getPlans().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } builder.setSubstitutableNodeType(canonical.getSubstitutableNodeType()); fillExtensibleElementsProperties(builder, canonical); @@ -668,7 +647,7 @@ private XTTag convert(@Nullable TGroupDefinition group) { } String name = "group:" + group.getName(); String value = group.getDescription() == null ? "" : group.getDescription(); - return new XTTag.Builder().setName(name).setValue(value).build(); + return new XTTag.Builder(name, value).build(); } @Nullable @@ -678,7 +657,7 @@ private XTTag convert(@Nullable OTParticipant participant) { } String name = "participant:" + participant.getName(); String value = participant.getUrl() == null ? "" : participant.getUrl(); - return new XTTag.Builder().setName(name).setValue(value).build(); + return new XTTag.Builder(name, value).build(); } private XTPlan convert(TPlan canonical) { @@ -687,14 +666,18 @@ private XTPlan convert(TPlan canonical) { builder.setPrecondition(convert(canonical.getPrecondition())); } if (canonical.getInputParameters() != null) { - XTPlan.InputParameters inputs = new XTPlan.InputParameters(); - inputs.getInputParameter().addAll(canonical.getInputParameters().getInputParameter().stream().map(this::convert).collect(Collectors.toList())); - builder.setInputParameters(inputs); + builder.setInputParameters( + canonical.getInputParameters().stream() + .map(this::convert + ).collect(Collectors.toList()) + ); } if (canonical.getOutputParameters() != null) { - XTPlan.OutputParameters outputs = new XTPlan.OutputParameters(); - outputs.getOutputParameter().addAll(canonical.getOutputParameters().getOutputParameter().stream().map(this::convert).collect(Collectors.toList())); - builder.setOutputParameters(outputs); + builder.setOutputParameters( + canonical.getOutputParameters().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (canonical.getPlanModel() != null) { XTPlan.PlanModel model = new XTPlan.PlanModel(); @@ -712,10 +695,10 @@ private XTPlan convert(TPlan canonical) { } private XTCondition convert(TCondition canonical) { - XTCondition xml = new XTCondition(); - xml.setExpressionLanguage(canonical.getExpressionLanguage()); - xml.getAny().addAll(canonical.getAny()); - return xml; + return new XTCondition.Builder() + .setExpressionLanguage(canonical.getExpressionLanguage()) + .setAny(canonical.getAny()) + .build(); } @Nullable @@ -728,48 +711,57 @@ private XTBoundaryDefinitions convert(@Nullable TBoundaryDefinitions canonical) XTBoundaryDefinitions.Properties props = new XTBoundaryDefinitions.Properties(); props.setAny(canonical.getProperties().getAny()); if (canonical.getProperties().getPropertyMappings() != null) { - XTBoundaryDefinitions.Properties.PropertyMappings mappings = new XTBoundaryDefinitions.Properties.PropertyMappings(); - mappings.getPropertyMapping().addAll(canonical.getProperties().getPropertyMappings().getPropertyMapping().stream() - .map(this::convert).collect(Collectors.toList())); - props.setPropertyMappings(mappings); + props.setPropertyMappings( + canonical.getProperties().getPropertyMappings().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } builder.setProperties(props); } if (canonical.getRequirements() != null) { - XTBoundaryDefinitions.Requirements reqs = new XTBoundaryDefinitions.Requirements(); - reqs.getRequirement().addAll(canonical.getRequirements().getRequirement().stream() - .map(this::convert).collect(Collectors.toList())); - builder.setRequirements(reqs); + builder.setRequirements( + canonical.getRequirements().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (canonical.getCapabilities() != null) { - XTBoundaryDefinitions.Capabilities caps = new XTBoundaryDefinitions.Capabilities(); - caps.getCapability().addAll(canonical.getCapabilities().getCapability().stream() - .map(this::convert).collect(Collectors.toList())); - builder.setCapabilities(caps); + builder.setCapabilities( + canonical.getCapabilities().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (canonical.getPolicies() != null) { - XTPolicies policies = new XTPolicies(); - policies.getPolicy().addAll(canonical.getPolicies().getPolicy().stream().map(this::convert).collect(Collectors.toList())); - builder.setPolicies(policies); + builder.setPolicies( + canonical.getPolicies().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (canonical.getInterfaces() != null) { - XTBoundaryDefinitions.Interfaces interfaces = new XTBoundaryDefinitions.Interfaces(); - interfaces.getInterface().addAll(canonical.getInterfaces().getInterface().stream().map(this::convert).collect(Collectors.toList())); - builder.setInterfaces(interfaces); + builder.setInterfaces( + canonical.getInterfaces().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (canonical.getPropertyConstraints() != null) { - XTBoundaryDefinitions.PropertyConstraints constraints = new XTBoundaryDefinitions.PropertyConstraints(); - constraints.getPropertyConstraint().addAll(convertList(canonical.getPropertyConstraints().getPropertyConstraint(), this::convert)); - builder.setPropertyConstraints(constraints); + builder.setPropertyConstraints( + convertList(canonical.getPropertyConstraints(), this::convert) + ); } return builder.build(); } private XTExportedInterface convert(TExportedInterface canonical) { - XTExportedInterface exportedInterface = new XTExportedInterface(); - exportedInterface.setName(canonical.getName()); - exportedInterface.getOperation().addAll(canonical.getOperation().stream().map(this::convert).collect(Collectors.toList())); - return exportedInterface; + return new XTExportedInterface.Builder( + canonical.getName(), + canonical.getOperation().stream() + .map(this::convert) + .collect(Collectors.toList()) + ).build(); } private XTExportedOperation convert(TExportedOperation canonical) { @@ -852,11 +844,11 @@ private XTRequirement convert(TRequirement canonical) { } private XTPropertyMapping convert(TPropertyMapping canonical) { - XTPropertyMapping xml = new XTPropertyMapping(); - xml.setServiceTemplatePropertyRef(canonical.getServiceTemplatePropertyRef()); - xml.setTargetPropertyRef(canonical.getTargetPropertyRef()); - xml.setTargetObjectRef(convert(canonical.getTargetObjectRef())); - return xml; + return new XTPropertyMapping.Builder( + canonical.getServiceTemplatePropertyRef(), + convert(canonical.getTargetObjectRef()), + canonical.getTargetPropertyRef() + ).build(); } @Nullable @@ -874,25 +866,21 @@ private XTTopologyTemplate convert(@Nullable TTopologyTemplate canonical) { private XTNodeTemplate convert(TNodeTemplate canonical) { XTNodeTemplate.Builder builder = new XTNodeTemplate.Builder(canonical.getId(), canonical.getType()); - if (canonical.getRequirements() != null) { - XTNodeTemplate.Requirements reqs = new XTNodeTemplate.Requirements(); - reqs.getRequirement().addAll(convertList(canonical.getRequirements().getRequirement(), this::convert)); - builder.setRequirements(reqs); + if (listIsNotNullOrEmpty(canonical.getRequirements())) { + builder.setRequirements(convertList(canonical.getRequirements(), this::convert)); } if (canonical.getCapabilities() != null) { - XTNodeTemplate.Capabilities caps = new XTNodeTemplate.Capabilities(); - caps.getCapability().addAll(convertList(canonical.getCapabilities().getCapability(), this::convert)); - builder.setCapabilities(caps); + builder.setCapabilities(convertList(canonical.getCapabilities(), this::convert)); } if (canonical.getPolicies() != null) { - XTPolicies policies = new XTPolicies(); - policies.getPolicy().addAll(convertList(canonical.getPolicies().getPolicy(), this::convert)); - builder.setPolicies(policies); + builder.addPolicies( + convertList(canonical.getPolicies(), this::convert) + ); } if (canonical.getDeploymentArtifacts() != null) { - XTDeploymentArtifacts artifacts = new XTDeploymentArtifacts(); - artifacts.getDeploymentArtifact().addAll(convertList(canonical.getDeploymentArtifacts().getDeploymentArtifact(), this::convert)); - builder.setDeploymentArtifacts(artifacts); + builder.setDeploymentArtifacts( + convertList(canonical.getDeploymentArtifacts(), this::convert) + ); } builder.setName(canonical.getName()); builder.setMinInstances(canonical.getMinInstances()); @@ -914,8 +902,9 @@ private XTRelationshipTemplate convert(TRelationshipTemplate canonical) { builder.setRelationshipConstraints(constraints); } if (canonical.getPolicies() != null) { - XTPolicies xtPolicies = new XTPolicies(convertList(canonical.getPolicies().getPolicy(), this::convert)); - builder.addPolicies(xtPolicies); + builder.addPolicies( + convertList(canonical.getPolicies(), this::convert) + ); } fillEntityTemplateProperties(builder, canonical); return builder.build(); @@ -969,13 +958,13 @@ private XRelationshipSourceOrTarget convert(RelationshipSourceOrTarget canonical throw new IllegalStateException(String.format("Tried to convert unknown RelationshipSourceOrTarget implementation %s", canonical.getClass().getName())); } - private XTDefinitions.Extensions convertExtensions(TDefinitions.@Nullable Extensions canonical) { + private List convertExtensions(List canonical) { if (canonical == null) { return null; } - XTDefinitions.Extensions result = new XTDefinitions.Extensions(); - result.getExtension().addAll(canonical.getExtension().stream().map(this::convert).collect(Collectors.toList())); - return result; + return canonical.stream() + .map(this::convert) + .collect(Collectors.toList()); } private XTDefinitions.Types convertTypes(TDefinitions.@Nullable Types canonical) { @@ -989,7 +978,6 @@ private XTDefinitions.Types convertTypes(TDefinitions.@Nullable Types canonical) private XHasId convert(HasId canonical) { if (canonical instanceof TDefinitions) { - // what in the ever loving fuck am I supposed to do now?? // this case should never ever come true throw new IllegalStateException("Attempted to convert a TDefinitions instance through HasId overload."); } @@ -1015,7 +1003,9 @@ private List convertList(@Nullable List canonical, Function c if (canonical == null) { return Collections.emptyList(); } - return canonical.stream().map(convert).collect(Collectors.toList()); + return canonical.stream() + .map(convert) + .collect(Collectors.toList()); } private XOTComplianceRule convert(OTComplianceRule canonical) { diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/ToCanonical.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/ToCanonical.java index 4e79d0b74f..df0a61d77b 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/ToCanonical.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/xml/converter/ToCanonical.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation + * Copyright (c) 2020-2021 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -25,7 +25,6 @@ import org.eclipse.winery.model.tosca.HasId; import org.eclipse.winery.model.tosca.RelationshipSourceOrTarget; -import org.eclipse.winery.model.tosca.TAppliesTo; import org.eclipse.winery.model.tosca.TArtifact; import org.eclipse.winery.model.tosca.TArtifactReference; import org.eclipse.winery.model.tosca.TArtifactTemplate; @@ -39,7 +38,6 @@ import org.eclipse.winery.model.tosca.TConstraint; import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TDeploymentArtifact; -import org.eclipse.winery.model.tosca.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TDocumentation; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TEntityType; @@ -49,18 +47,16 @@ import org.eclipse.winery.model.tosca.TExtensibleElements; import org.eclipse.winery.model.tosca.TExtension; import org.eclipse.winery.model.tosca.TGroupDefinition; -import org.eclipse.winery.model.tosca.TImplementationArtifacts; +import org.eclipse.winery.model.tosca.TImplementationArtifact; import org.eclipse.winery.model.tosca.TImport; +import org.eclipse.winery.model.tosca.TInstanceState; import org.eclipse.winery.model.tosca.TInterface; -import org.eclipse.winery.model.tosca.TInterfaces; 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.TParameter; import org.eclipse.winery.model.tosca.TPlan; -import org.eclipse.winery.model.tosca.TPlans; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TPolicyTemplate; import org.eclipse.winery.model.tosca.TPolicyType; @@ -76,7 +72,6 @@ import org.eclipse.winery.model.tosca.TRequirementType; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTopologyElementInstanceStates; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.extensions.OTAttributeMapping; import org.eclipse.winery.model.tosca.extensions.OTAttributeMappingType; @@ -120,10 +115,9 @@ import org.eclipse.winery.model.tosca.xml.XTExportedOperation; import org.eclipse.winery.model.tosca.xml.XTExtensibleElements; import org.eclipse.winery.model.tosca.xml.XTExtension; -import org.eclipse.winery.model.tosca.xml.XTImplementationArtifacts; +import org.eclipse.winery.model.tosca.xml.XTImplementationArtifact; import org.eclipse.winery.model.tosca.xml.XTImport; import org.eclipse.winery.model.tosca.xml.XTInterface; -import org.eclipse.winery.model.tosca.xml.XTInterfaces; import org.eclipse.winery.model.tosca.xml.XTNodeTemplate; import org.eclipse.winery.model.tosca.xml.XTNodeType; import org.eclipse.winery.model.tosca.xml.XTNodeTypeImplementation; @@ -160,7 +154,6 @@ import org.eclipse.winery.model.tosca.xml.extensions.XOTStringList; import org.eclipse.winery.model.tosca.xml.extensions.XOTTestRefinementModel; import org.eclipse.winery.model.tosca.xml.extensions.XOTTopologyFragmentRefinementModel; -import org.eclipse.winery.repository.xml.XmlRepository; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @@ -171,20 +164,14 @@ public class ToCanonical { private static final Logger LOGGER = LoggerFactory.getLogger(ToCanonical.class); - private final XmlRepository repository; - public ToCanonical(XmlRepository repository) { - this.repository = repository; - } - - public TDefinitions convert(XTDefinitions xml) { - return convert(xml, false); + public ToCanonical() { } /** * Converts an XML TDefinitions collection to canonical TDefinitions. */ - public TDefinitions convert(XTDefinitions xml, boolean convertImports) { + public TDefinitions convert(XTDefinitions xml) { // FIXME need to correctly deal with convertImports flag to create a self-contained Definitions to export as CSAR if it is set. TDefinitions.Builder builder = new TDefinitions.Builder(xml.getId(), xml.getTargetNamespace()) .setName(xml.getName()) @@ -202,7 +189,7 @@ public TDefinitions convert(XTDefinitions xml, boolean convertImports) { .setPolicyTemplate(convertList(xml.getPolicyTemplates(), this::convert)) .addRequirementTypes(convertList(xml.getRequirementTypes(), this::convert)); if (xml.getExtensions() != null) { - builder.addExtensions(convertList(xml.getExtensions().getExtension(), this::convert)); + builder.addExtensions(convertList(xml.getExtensions(), this::convert)); } // this handles the "conversion" – basically copying of data – required by the disjoint TExtensibleElements // acting as baseclass for all the extensions we support @@ -253,12 +240,12 @@ private TDefinitions resolveReferences(TDefinitions preliminary) { return; } if (boundaries.getRequirements() != null) { - boundaries.getRequirements().getRequirement().forEach(req -> + boundaries.getRequirements().forEach(req -> req.setRef(resolveRequirement(req.getRef(), topology)) ); } if (boundaries.getCapabilities() != null) { - boundaries.getCapabilities().getCapability().forEach(cap -> + boundaries.getCapabilities().forEach(cap -> cap.setRef(resolveCapability(cap.getRef(), topology)) ); } @@ -272,7 +259,16 @@ private TDefinitions resolveReferences(TDefinitions preliminary) { if (ref instanceof TCapability) { incomplete.setRef(resolveCapability((TCapability) ref, topology)); } else if (ref instanceof TNodeTemplate) { - incomplete.setRef(topology.getNodeTemplate(ref.getId())); + if (topology != null) { + TNodeTemplate nodeTemplate = topology.getNodeTemplate(ref.getId()); + if (nodeTemplate != null) { + incomplete.setRef(nodeTemplate); + } else { + LOGGER.error("Node Template could not be found!"); + } + } else { + LOGGER.error("Topology Template was null!"); + } } else if (ref instanceof TRequirement) { incomplete.setRef(resolveRequirement((TRequirement) ref, topology)); } else { @@ -284,7 +280,7 @@ private TDefinitions resolveReferences(TDefinitions preliminary) { private TCapability resolveCapability(TCapability incomplete, TTopologyTemplate topology) { return topology.getNodeTemplates().stream() .flatMap(nt -> nt.getCapabilities() == null ? Stream.empty() - : nt.getCapabilities().getCapability().stream()) + : nt.getCapabilities().stream()) .filter(cap -> cap.getId().equals(incomplete.getId())) .findFirst() .orElseGet(() -> { @@ -295,8 +291,8 @@ private TCapability resolveCapability(TCapability incomplete, TTopologyTemplate private TRequirement resolveRequirement(TRequirement incomplete, TTopologyTemplate topology) { return topology.getNodeTemplates().stream() - .flatMap(nt -> nt.getRequirements() == null ? Stream.empty() - : nt.getRequirements().getRequirement().stream()) + .filter(nt -> nt.getRequirements() != null) + .flatMap(nt -> nt.getRequirements().stream()) .filter(req -> req.getId().equals(incomplete.getId())) .findFirst() .orElseGet(() -> { @@ -317,28 +313,23 @@ private TRelationshipType convert(XTRelationshipType xml) { builder.setValidTarget(xml.getValidTarget().getTypeRef()); } if (xml.getInstanceStates() != null) { - TTopologyElementInstanceStates instanceStates = new TTopologyElementInstanceStates(); - instanceStates.getInstanceState().addAll(xml.getInstanceStates().getInstanceState().stream() - .map(c -> { - TTopologyElementInstanceStates.InstanceState r = new TTopologyElementInstanceStates.InstanceState(); - r.setState(c.getState()); - return r; - }).collect(Collectors.toList())); + List instanceStates = xml.getInstanceStates().stream() + .map(c -> new TInstanceState(c.getState())).collect(Collectors.toList()); builder.setInstanceStates(instanceStates); } fillEntityTypeProperties(builder, xml); return builder.build(); } - private List convertInterfaces(XTInterfaces xml) { + private List convertInterfaces(List xml) { if (xml == null) { - return Collections.emptyList(); + return null; } - return xml.getInterface().stream().map(this::convertInterface).collect(Collectors.toList()); + return xml.stream().map(this::convertInterface).collect(Collectors.toList()); } private TInterface convertInterface(XTInterface xml) { - return new TInterface.Builder(xml.getName(), convertOperations(xml.getOperation())).build(); + return new TInterface.Builder(xml.getName(), convertOperations(xml.getOperations())).build(); } private List convertOperations(List xml) { @@ -348,12 +339,18 @@ private List convertOperations(List xml) { private TOperation convert(XTOperation xml) { TOperation.Builder builder = new TOperation.Builder(xml.getName()); if (xml.getInputParameters() != null) { - builder.addInputParameters(xml.getInputParameters().getInputParameter().stream() - .map(this::convert).collect(Collectors.toList())); + builder.addInputParameters( + xml.getInputParameters().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (xml.getOutputParameters() != null) { - builder.addOutputParameters(xml.getOutputParameters().getOutputParameter().stream() - .map(this::convert).collect(Collectors.toList())); + builder.addOutputParameters( + xml.getOutputParameters().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } return builder.build(); } @@ -376,15 +373,21 @@ private TRelationshipTypeImplementation convert(XTRelationshipTypeImplementation private , Value extends XTEntityTypeImplementation> void fillEntityTypeImplementationProperties(Builder builder, Value xml) { if (xml.getRequiredContainerFeatures() != null) { - builder.addRequiredContainerFeatures(xml.getRequiredContainerFeatures().getRequiredContainerFeature() - .stream().map(this::convert).collect(Collectors.toList())); + builder.addRequiredContainerFeatures( + xml.getRequiredContainerFeatures().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (xml.getTags() != null) { - builder.addTags(xml.getTags().getTag().stream().map(this::convert).collect(Collectors.toList())); + builder.addTags(xml.getTags().stream().map(this::convert).collect(Collectors.toList())); } if (xml.getImplementationArtifacts() != null) { - builder.addImplementationArtifacts(xml.getImplementationArtifacts().getImplementationArtifact().stream() - .map(this::convert).collect(Collectors.toList())); + builder.addImplementationArtifacts( + xml.getImplementationArtifacts().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } builder.setTargetNamespace(xml.getTargetNamespace()); builder.setAbstract(xml.getAbstract() == XTBoolean.YES); @@ -392,8 +395,8 @@ void fillEntityTypeImplementationProperties(Builder builder, Value xml) { fillExtensibleElementsProperties(builder, xml); } - private TImplementationArtifacts.ImplementationArtifact convert(XTImplementationArtifacts.ImplementationArtifact xml) { - return new TImplementationArtifacts.ImplementationArtifact.Builder(xml.getArtifactType()) + private TImplementationArtifact convert(XTImplementationArtifact xml) { + return new TImplementationArtifact.Builder(xml.getArtifactType()) .setName(xml.getName()) .setInterfaceName(xml.getInterfaceName()) .setOperationName(xml.getOperationName()) @@ -402,28 +405,26 @@ private TImplementationArtifacts.ImplementationArtifact convert(XTImplementation } private TTag convert(XTTag xml) { - return new TTag.Builder().setName(xml.getName()).setValue(xml.getValue()).build(); + return new TTag.Builder(xml.getName(), xml.getValue()) + .build(); } private TRequiredContainerFeature convert(XTRequiredContainerFeature xml) { - TRequiredContainerFeature result = new TRequiredContainerFeature(); - result.setFeature(xml.getFeature()); - return result; + return new TRequiredContainerFeature( + xml.getFeature() + ); } private TPolicyType convert(XTPolicyType xml) { TPolicyType.Builder builder = new TPolicyType.Builder(xml.getName()); if (xml.getAppliesTo() != null) { - TAppliesTo appliesTo = new TAppliesTo(); - appliesTo.getNodeTypeReference().addAll(xml.getAppliesTo().getNodeTypeReference().stream() - .map(c -> { - TAppliesTo.NodeTypeReference result = new TAppliesTo.NodeTypeReference(); - result.setTypeRef(c.getTypeRef()); - return result; - }) - .collect(Collectors.toList())); - builder.setAppliesTo(appliesTo); + builder.setAppliesTo( + xml.getAppliesTo().stream() + .map(c -> new TPolicyType.NodeTypeReference(c.getTypeRef())) + .collect(Collectors.toList()) + ); } + fillEntityTypeProperties(builder, xml); return builder.build(); } @@ -431,7 +432,11 @@ private TPolicyType convert(XTPolicyType xml) { private , Value extends XTEntityType> void fillEntityTypeProperties(Builder builder, Value xml) { if (xml.getTags() != null) { - builder.addTags(xml.getTags().getTag().stream().map(this::convert).collect(Collectors.toList())); + builder.addTags( + xml.getTags().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (xml.getDerivedFrom() != null) { TEntityType.DerivedFrom derived = new TEntityType.DerivedFrom(); @@ -489,9 +494,7 @@ private TRequirementType convert(XTRequirementType xml) { private TNodeTypeImplementation convert(XTNodeTypeImplementation xml) { TNodeTypeImplementation.Builder builder = new TNodeTypeImplementation.Builder(xml.getName(), xml.getNodeType()); if (xml.getDeploymentArtifacts() != null) { - TDeploymentArtifacts artifacts = new TDeploymentArtifacts.Builder(xml.getDeploymentArtifacts() - .getDeploymentArtifact().stream().map(this::convert).collect(Collectors.toList())).build(); - builder.setDeploymentArtifacts(artifacts); + builder.setDeploymentArtifacts(convertList(xml.getDeploymentArtifacts(), this::convert)); } if (xml.getDerivedFrom() != null) { TNodeTypeImplementation.DerivedFrom derived = new TNodeTypeImplementation.DerivedFrom(); @@ -512,30 +515,23 @@ private TDeploymentArtifact convert(XTDeploymentArtifact xml) { private TNodeType convert(XTNodeType xml) { TNodeType.Builder builder = new TNodeType.Builder(xml.getName()); if (xml.getRequirementDefinitions() != null) { - TNodeType.RequirementDefinitions reqDefs = new TNodeType.RequirementDefinitions(); - reqDefs.getRequirementDefinition().addAll(xml.getRequirementDefinitions().getRequirementDefinition() - .stream().map(this::convert).collect(Collectors.toList())); + List reqDefs = xml.getRequirementDefinitions() + .stream().map(this::convert).collect(Collectors.toList()); builder.setRequirementDefinitions(reqDefs); } if (xml.getCapabilityDefinitions() != null) { - TNodeType.CapabilityDefinitions capDefs = new TNodeType.CapabilityDefinitions(); - capDefs.getCapabilityDefinition().addAll(xml.getCapabilityDefinitions().getCapabilityDefinition() - .stream().map(this::convert).collect(Collectors.toList())); + List capDefs = xml.getCapabilityDefinitions() + .stream().map(this::convert).collect(Collectors.toList()); builder.setCapabilityDefinitions(capDefs); } if (xml.getInstanceStates() != null) { - TTopologyElementInstanceStates instanceStates = new TTopologyElementInstanceStates(); - instanceStates.getInstanceState().addAll(xml.getInstanceStates().getInstanceState().stream() - .map(c -> { - TTopologyElementInstanceStates.InstanceState r = new TTopologyElementInstanceStates.InstanceState(); - r.setState(c.getState()); - return r; - }).collect(Collectors.toList())); + List instanceStates = xml.getInstanceStates().stream() + .map(c -> new TInstanceState(c.getState())).collect(Collectors.toList()); builder.setInstanceStates(instanceStates); } if (xml.getInterfaces() != null) { - TInterfaces interfaces = new TInterfaces(); - interfaces.getInterface().addAll(convertInterfaces(xml.getInterfaces())); + List interfaces = xml.getInterfaces().stream() + .map(this::convertInterface).collect(Collectors.toList()); builder.setInterfaces(interfaces); } fillEntityTypeProperties(builder, xml); @@ -556,10 +552,11 @@ private TRequirementDefinition convert(XTRequirementDefinition xml) { // it's required for us, though, so we just assume it's present TRequirementDefinition.Builder builder = new TRequirementDefinition.Builder(xml.getName(), xml.getRequirementType()); if (xml.getConstraints() != null) { - TRequirementDefinition.Constraints constraints = new TRequirementDefinition.Constraints(); - constraints.getConstraint().addAll(xml.getConstraints().getConstraint().stream() - .map(this::convert).collect(Collectors.toList())); - builder.setConstraints(constraints); + builder.setConstraints( + xml.getConstraints().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } builder.setLowerBound(xml.getLowerBound()); builder.setUpperBound(xml.getUpperBound()); @@ -574,8 +571,8 @@ private TRequirementDefinition convert(XTRequirementDefinition xml) { private TCapabilityDefinition convert(XTCapabilityDefinition xml) { TCapabilityDefinition.Builder builder = new TCapabilityDefinition.Builder(xml.getName(), xml.getCapabilityType()); if (xml.getConstraints() != null) { - xml.getConstraints().getConstraint() - .stream().map(this::convert) + xml.getConstraints().stream() + .map(this::convert) .forEach(builder::addConstraints); } builder.setLowerBound(xml.getLowerBound()); @@ -586,10 +583,10 @@ private TCapabilityDefinition convert(XTCapabilityDefinition xml) { } private TConstraint convert(XTConstraint xml) { - TConstraint constraint = new TConstraint(); - constraint.setAny(xml.getAny()); - constraint.setConstraintType(xml.getConstraintType()); - return constraint; + return new TConstraint( + xml.getAny(), + xml.getConstraintType() + ); } private TCapability convert(XTCapability xml) { @@ -610,10 +607,11 @@ void fillEntityTemplateProperties(Builder builder, Value xml) { builder.setProperties(convertProperties(xml.getProperties())); } if (xml.getPropertyConstraints() != null) { - TEntityTemplate.PropertyConstraints constraints = new TEntityTemplate.PropertyConstraints(); - constraints.getPropertyConstraint().addAll(xml.getPropertyConstraints().getPropertyConstraint().stream() - .map(this::convert).collect(Collectors.toList())); - builder.setPropertyConstraints(constraints); + builder.setPropertyConstraints( + xml.getPropertyConstraints().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } fillExtensibleElementsProperties(builder, xml); } @@ -630,11 +628,11 @@ private TEntityTemplate.Properties convertProperties(XTEntityTemplate.Properties } private TPropertyConstraint convert(XTPropertyConstraint xml) { - TPropertyConstraint constraint = new TPropertyConstraint(); - constraint.setAny(xml.getAny()); - constraint.setConstraintType(xml.getConstraintType()); - constraint.setProperty(xml.getProperty()); - return constraint; + return new TPropertyConstraint( + xml.getAny(), + xml.getConstraintType(), + xml.getProperty() + ); } private TExtension convert(XTExtension xml) { @@ -645,11 +643,10 @@ private TExtension convert(XTExtension xml) { } private TDocumentation convert(XTDocumentation xml) { - TDocumentation canonical = new TDocumentation(); - canonical.getContent().addAll(xml.getContent()); - canonical.setSource(xml.getSource()); - canonical.setLang(xml.getLang()); - return canonical; + return new TDocumentation.Builder(xml.getContent()) + .setSource(xml.getSource()) + .setLang(xml.getLang()) + .build(); } private TCapabilityType convert(XTCapabilityType xml) { @@ -672,9 +669,9 @@ private TArtifactTemplate convert(XTArtifactTemplate xml) { TArtifactTemplate.Builder builder = new TArtifactTemplate.Builder(xml.getId(), xml.getType()); builder.setName(xml.getName()); if (xml.getArtifactReferences() != null) { - xml.getArtifactReferences().getArtifactReference().stream() + xml.getArtifactReferences().stream() .map(this::convert) - .forEach(builder::addArtifactReferences); + .forEach(builder::addArtifactReference); } fillEntityTemplateProperties(builder, xml); return builder.build(); @@ -694,15 +691,11 @@ private TArtifactReference convert(XTArtifactReference xml) { } private TArtifactReference.Include convert(XTArtifactReference.Include xml) { - TArtifactReference.Include canonical = new TArtifactReference.Include(); - canonical.setPattern(xml.getPattern()); - return canonical; + return new TArtifactReference.Include(xml.getPattern()); } private TArtifactReference.Exclude convert(XTArtifactReference.Exclude xml) { - TArtifactReference.Exclude canonical = new TArtifactReference.Exclude(); - canonical.setPattern(xml.getPattern()); - return canonical; + return new TArtifactReference.Exclude(xml.getPattern()); } private TImport convert(XTImport xml) { @@ -719,31 +712,33 @@ private TServiceTemplate convert(XTServiceTemplate xml) { builder.setName(xml.getName()); builder.setTargetNamespace(xml.getTargetNamespace()); if (xml.getTags() != null) { - xml.getTags().getTag().stream() + xml.getTags().stream() .filter(t -> !t.getName().startsWith("group:")) // filter group definitions .filter(t -> !t.getName().startsWith("participant:")) // filter participants - .map(this::convert).forEach(builder::addTags); + .map(this::convert) + .forEach(builder::addTag); } if (xml.getBoundaryDefinitions() != null) { builder.setBoundaryDefinitions(convert(xml.getBoundaryDefinitions())); } if (xml.getPlans() != null) { - TPlans plans = new TPlans(); - plans.setTargetNamespace(xml.getPlans().getTargetNamespace()); - plans.getPlan().addAll(xml.getPlans().getPlan().stream().map(this::convert).collect(Collectors.toList())); - builder.setPlans(plans); + builder.setPlans( + xml.getPlans().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } builder.setSubstitutableNodeType(xml.getSubstitutableNodeType()); fillExtensibleElementsProperties(builder, xml); // map group-related tags back to topology template if (topologyTemplate != null && xml.getTags() != null) { - topologyTemplate.setGroups(convertList(xml.getTags().getTag(), this::convertToGroup)); + topologyTemplate.setGroups(convertList(xml.getTags(), this::convertToGroup)); } // handle participant extension if (topologyTemplate != null && xml.getTags() != null) { - topologyTemplate.setParticipants(convertList(xml.getTags().getTag(), this::convertToParticipant)); + topologyTemplate.setParticipants(convertList(xml.getTags(), this::convertToParticipant)); } return builder.build(); @@ -775,14 +770,18 @@ private TPlan convert(XTPlan xml) { builder.setPrecondition(convert(xml.getPrecondition())); } if (xml.getInputParameters() != null) { - TPlan.InputParameters inputs = new TPlan.InputParameters(); - inputs.getInputParameter().addAll(xml.getInputParameters().getInputParameter().stream().map(this::convert).collect(Collectors.toList())); - builder.setInputParameters(inputs); + builder.setInputParameters( + xml.getInputParameters().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (xml.getOutputParameters() != null) { - TPlan.OutputParameters outputs = new TPlan.OutputParameters(); - outputs.getOutputParameter().addAll(xml.getOutputParameters().getOutputParameter().stream().map(this::convert).collect(Collectors.toList())); - builder.setOutputParameters(outputs); + builder.setOutputParameters( + xml.getOutputParameters().stream() + .map(this::convert) + .collect(Collectors.toList()) + ); } if (xml.getPlanModel() != null) { TPlan.PlanModel model = new TPlan.PlanModel(); @@ -800,10 +799,10 @@ private TPlan convert(XTPlan xml) { } private TCondition convert(XTCondition xml) { - TCondition canonical = new TCondition(); - canonical.setExpressionLanguage(xml.getExpressionLanguage()); - canonical.getAny().addAll(xml.getAny()); - return canonical; + return new TCondition( + xml.getAny(), + xml.getExpressionLanguage() + ); } private TBoundaryDefinitions convert(XTBoundaryDefinitions xml) { @@ -812,35 +811,36 @@ private TBoundaryDefinitions convert(XTBoundaryDefinitions xml) { TBoundaryDefinitions.Properties props = new TBoundaryDefinitions.Properties(); props.setAny(xml.getProperties().getAny()); if (xml.getProperties().getPropertyMappings() != null) { - TBoundaryDefinitions.Properties.PropertyMappings mappings = new TBoundaryDefinitions.Properties.PropertyMappings(); - mappings.getPropertyMapping().addAll(convertList(xml.getProperties().getPropertyMappings().getPropertyMapping(), this::convert)); - props.setPropertyMappings(mappings); + props.setPropertyMappings( + convertList(xml.getProperties().getPropertyMappings(), this::convert) + ); } builder.setProperties(props); } if (xml.getRequirements() != null) { - TBoundaryDefinitions.Requirements reqs = new TBoundaryDefinitions.Requirements(); - reqs.getRequirement().addAll(convertList(xml.getRequirements().getRequirement(), this::convert)); - builder.setRequirements(reqs); + builder.setRequirements( + convertList(xml.getRequirements(), this::convert) + ); } if (xml.getCapabilities() != null) { - TBoundaryDefinitions.Capabilities caps = new TBoundaryDefinitions.Capabilities(); - caps.getCapability().addAll(convertList(xml.getCapabilities().getCapability(), this::convert)); - builder.setCapabilities(caps); + builder.setCapabilities( + convertList(xml.getCapabilities(), this::convert) + ); } if (xml.getPolicies() != null) { - TPolicies policies = new TPolicies(convertList(xml.getPolicies().getPolicy(), this::convert)); - builder.setPolicies(policies); + builder.setPolicies( + convertList(xml.getPolicies(), this::convert) + ); } if (xml.getInterfaces() != null) { - TBoundaryDefinitions.Interfaces interfaces = new TBoundaryDefinitions.Interfaces(); - interfaces.getInterface().addAll(convertList(xml.getInterfaces().getInterface(), this::convert)); - builder.setInterfaces(interfaces); + builder.setInterfaces( + convertList(xml.getInterfaces(), this::convert) + ); } if (xml.getPropertyConstraints() != null) { - TBoundaryDefinitions.PropertyConstraints constraints = new TBoundaryDefinitions.PropertyConstraints(); - constraints.getPropertyConstraint().addAll(convertList(xml.getPropertyConstraints().getPropertyConstraint(), this::convert)); - builder.setPropertyConstraints(constraints); + builder.setPropertyConstraints( + convertList(xml.getPropertyConstraints(), this::convert) + ); } return builder.build(); } @@ -914,17 +914,17 @@ private TPolicyTemplate convert(XTPolicyTemplate xml) { } private TCapabilityRef convert(XTCapabilityRef xml) { - TCapabilityRef canonical = new TCapabilityRef(); - canonical.setName(xml.getName()); - canonical.setRef(convert(xml.getRef())); - return canonical; + return new TCapabilityRef( + xml.getName(), + convert(xml.getRef()) + ); } private TRequirementRef convert(XTRequirementRef xml) { - TRequirementRef canonical = new TRequirementRef(); - canonical.setName(xml.getName()); - canonical.setRef(convert(xml.getRef())); - return canonical; + return new TRequirementRef( + xml.getName(), + convert(xml.getRef()) + ); } private TRequirement convert(XTRequirement xml) { @@ -937,11 +937,11 @@ private TRequirement convert(XTRequirement xml) { } private TPropertyMapping convert(XTPropertyMapping xml) { - TPropertyMapping canonical = new TPropertyMapping(); - canonical.setServiceTemplatePropertyRef(xml.getServiceTemplatePropertyRef()); - canonical.setTargetPropertyRef(xml.getTargetPropertyRef()); - canonical.setTargetObjectRef(convert(xml.getTargetObjectRef())); - return canonical; + return new TPropertyMapping( + xml.getServiceTemplatePropertyRef(), + convert(xml.getTargetObjectRef()), + xml.getTargetPropertyRef() + ); } @Nullable @@ -960,25 +960,18 @@ private TTopologyTemplate convert(XTTopologyTemplate xml) { private TNodeTemplate convert(XTNodeTemplate xml) { TNodeTemplate.Builder builder = new TNodeTemplate.Builder(xml.getId(), xml.getType()); if (xml.getRequirements() != null) { - TNodeTemplate.Requirements reqs = new TNodeTemplate.Requirements(); - reqs.getRequirement().addAll(convertList(xml.getRequirements().getRequirement(), this::convert)); - builder.setRequirements(reqs); + builder.setRequirements(convertList(xml.getRequirements(), this::convert)); } if (xml.getCapabilities() != null) { - TNodeTemplate.Capabilities caps = new TNodeTemplate.Capabilities(); - caps.getCapability().addAll(convertList(xml.getCapabilities().getCapability(), this::convert)); - builder.setCapabilities(caps); + builder.setCapabilities(convertList(xml.getCapabilities(), this::convert)); } if (xml.getPolicies() != null) { - TPolicies policies = new TPolicies(convertList(xml.getPolicies().getPolicy(), this::convert)); - builder.setPolicies(policies); + builder.setPolicies( + convertList(xml.getPolicies(), this::convert) + ); } if (xml.getDeploymentArtifacts() != null) { - TDeploymentArtifacts artifacts = new TDeploymentArtifacts.Builder( - convertList(xml.getDeploymentArtifacts().getDeploymentArtifact(), this::convert) - ) - .build(); - builder.setDeploymentArtifacts(artifacts); + builder.addDeploymentArtifacts(convertList(xml.getDeploymentArtifacts(), this::convert)); } builder.setName(xml.getName()); builder.setMinInstances(xml.getMinInstances()); @@ -991,7 +984,7 @@ private TNodeTemplate convert(XTNodeTemplate xml) { private TRelationshipTemplate convert(XTRelationshipTemplate xml) { TRelationshipTemplate.Builder builder = new TRelationshipTemplate.Builder(xml.getId(), xml.getType(), - convert(xml.getSourceElement()), convert(xml.getTargetElement())); + convert(xml.getSourceElement().getRef()), convert(xml.getTargetElement().getRef())); builder.setName(xml.getName()); if (xml.getRelationshipConstraints() != null) { TRelationshipTemplate.RelationshipConstraints constraints = new TRelationshipTemplate.RelationshipConstraints(); @@ -1000,8 +993,9 @@ private TRelationshipTemplate convert(XTRelationshipTemplate xml) { builder.setRelationshipConstraints(constraints); } if (xml.getPolicies() != null) { - TPolicies policies = new TPolicies(convertList(xml.getPolicies().getPolicy(), this::convert)); - builder.setPolicies(policies); + builder.setPolicies( + convertList(xml.getPolicies(), this::convert) + ); } fillEntityTemplateProperties(builder, xml); return builder.build(); @@ -1014,12 +1008,6 @@ private TRelationshipTemplate.RelationshipConstraints.RelationshipConstraint con return canonical; } - private TRelationshipTemplate.SourceOrTargetElement convert(XTRelationshipTemplate.SourceOrTargetElement xml) { - TRelationshipTemplate.SourceOrTargetElement canonical = new TRelationshipTemplate.SourceOrTargetElement(); - canonical.setRef(convert(xml.getRef())); - return canonical; - } - private RelationshipSourceOrTarget convert(XRelationshipSourceOrTarget xml) { // Capability or NodeTemplate or Requirement if (xml instanceof XTCapability) { @@ -1045,7 +1033,6 @@ private TDefinitions.Types convertTypes(XTDefinitions.@Nullable Types xml) { private HasId convert(XHasId xml) { if (xml instanceof XTDefinitions) { - // what in the ever loving fuck am I supposed to do now?? // this case should never ever come true throw new IllegalStateException("Attempted to convert a TDefinitions instance through HasId overload."); } 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 0867862968..643a1b559d 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 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020 Contributors to the Eclipse Foundation + * Copyright (c) 2020-2021 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -38,12 +38,10 @@ 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.TAppliesTo; 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.TArtifacts; import org.eclipse.winery.model.tosca.TBoundaryDefinitions; import org.eclipse.winery.model.tosca.TCapability; import org.eclipse.winery.model.tosca.TCapabilityDefinition; @@ -51,26 +49,24 @@ 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.TDeploymentArtifacts; +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.TImplementationArtifacts; 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.TInterfaces; 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.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TPolicyType; import org.eclipse.winery.model.tosca.TRelationshipTemplate; @@ -82,7 +78,6 @@ import org.eclipse.winery.model.tosca.TSchema; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.extensions.kvproperties.AttributeDefinition; import org.eclipse.winery.model.tosca.extensions.kvproperties.ConstraintClauseKV; @@ -142,8 +137,8 @@ public class FromCanonical { private final YamlRepository repository; - private HashBiMap prefixNamespace; - private Map importDefinitions; + private final HashBiMap prefixNamespace; + private final Map importDefinitions; public FromCanonical(YamlRepository repository) { this.repository = repository; @@ -234,7 +229,7 @@ public Map convert(TEntityTemplate.Properties node } if (node instanceof TEntityTemplate.YamlProperties) { Map propertiesKV = ((TEntityTemplate.YamlProperties) node).getProperties(); - Map assignments = propertiesKV.entrySet().stream() + return propertiesKV.entrySet().stream() .map(entry -> new LinkedHashMap.SimpleEntry<>( String.valueOf(entry.getKey()), @@ -245,7 +240,6 @@ public Map convert(TEntityTemplate.Properties node Map.Entry::getKey, Map.Entry::getValue )); - return assignments; } // FIXME deal with converting WineryKVProperties and XmlProperties return null; @@ -309,7 +303,7 @@ public Map convert(TNodeTemplate node, @NonNull List> T convert(TEntityType node, T builder builder .setDerivedFrom(convert(node.getDerivedFrom(), clazz)) - .setMetadata(convert(node.getTags())) + .setMetadata(convertTags(node.getTags())) .addMetadata("targetNamespace", node.getTargetNamespace()) .addMetadata("abstract", node.getAbstract() ? "true" : "false") .addMetadata("final", node.getFinal() ? "true" : "false") @@ -458,8 +452,8 @@ public Map convert(TNodeType node) { return Collections.singletonMap( nodeFullName, convert(node, new YTNodeType.Builder(), TNodeType.class) - .setRequirements(convert(node.getRequirementDefinitions())) - .setCapabilities(convert(node.getCapabilityDefinitions())) + .setRequirements(convertRequirementsDefinition(node.getRequirementDefinitions())) + .setCapabilities(convertCapabilitiesDefinition(node.getCapabilityDefinitions())) .setInterfaces(convert(node.getInterfaceDefinitions())) .setArtifacts(convert(node.getArtifacts())) .build() @@ -470,7 +464,6 @@ public Map convert(TNodeTypeImplementation node, M if (Objects.isNull(node)) { return null; } - String suffix = "@" + node.getNodeType().getLocalPart() + "@" + "nodetypes"; return Stream.of(convert(node.getDeploymentArtifacts(), artifacts), convert(node.getImplementationArtifacts(), artifacts)) .filter(Objects::nonNull) .flatMap(entry -> entry.entrySet().stream()) @@ -492,18 +485,19 @@ public Map convert(TRelationshipType node) { ); } - public Map convert(TInterfaces node, TRelationshipTypeImplementation implementation) { + public Map convert(List node, TEntityTypeImplementation implementation) { if (Objects.isNull(node)) { return null; } - return node.getInterface().stream() + return node.stream() .filter(Objects::nonNull) .map(entry -> convert( - entry, - Optional.ofNullable(implementation.getImplementationArtifacts()).orElse(new TImplementationArtifacts()) - .getImplementationArtifact().stream() - .filter(impl -> Objects.nonNull(impl) && impl.getInterfaceName().equals(entry.getName())) - .collect(Collectors.toList()) + entry, + Optional.ofNullable(implementation.getImplementationArtifacts()) + .orElse(new ArrayList<>()) + .stream() + .filter(impl -> Objects.nonNull(impl) && impl.getInterfaceName().equals(entry.getName())) + .collect(Collectors.toList()) ) ) .flatMap(entry -> entry.entrySet().stream()) @@ -524,19 +518,18 @@ public Map convert(TCapabilityType node) { @NonNull public Map convert(TPolicyType node) { - if (Objects.isNull(node)) { + if (Objects.isNull(node) || node.getAppliesTo().isEmpty()) { return new LinkedHashMap<>(); } - YTPolicyType.Builder builder = new YTPolicyType.Builder(); - if (node.getAppliesTo() != null) { - builder = builder.setTargets(node - .getAppliesTo() - .getNodeTypeReference() + YTPolicyType.Builder builder = new YTPolicyType.Builder(); + builder = builder.setTargets( + node.getAppliesTo() .stream() - .map(TAppliesTo.NodeTypeReference::getTypeRef) - .collect(Collectors.toList())); - } + .map(TPolicyType.NodeTypeReference::getTypeRef) + .collect(Collectors.toList()) + ); + String nodeFullName = this.getFullName(node); return Collections.singletonMap( nodeFullName, @@ -619,11 +612,11 @@ public QName convert(TEntityType.DerivedFrom node, Class node.getTypeRef().getLocalPart()); } - public Metadata convert(TTags node) { - if (Objects.isNull(node)) { + public Metadata convertTags(List tags) { + if (Objects.isNull(tags)) { return null; } - return node.getTag().stream() + return tags.stream() .filter(Objects::nonNull) .collect(Collectors.toMap( TTag::getName, @@ -640,7 +633,7 @@ public Map convert(TInterface node) { return Collections.singletonMap( node.getName(), new YTInterfaceDefinition.Builder<>() - .setOperations(convertOperations(node.getOperation())) + .setOperations(convertOperations(node.getOperations())) .build() ); } @@ -670,25 +663,6 @@ public Map convert(TOperation node) { ); } - @Deprecated - public Map convert(TInterfaces node, TNodeTypeImplementation implementation) { - if (Objects.isNull(node)) { - return null; - } - return node.getInterface().stream() - .filter(Objects::nonNull) - .map(entry -> convert( - entry, - Optional.ofNullable(implementation.getImplementationArtifacts()).orElse(new TImplementationArtifacts()) - .getImplementationArtifact().stream() - .filter(impl -> Objects.nonNull(impl) && impl.getInterfaceName().equals(entry.getName())) - .collect(Collectors.toList()) - ) - ) - .flatMap(entry -> entry.entrySet().stream()) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - @NonNull @Deprecated public Map convert(TInterface node, @NonNull List impl) { @@ -767,6 +741,7 @@ private List addNewImports(List im for (Map.Entry existingImport : existingImports.entrySet()) { if (newImport.getKey().equalsIgnoreCase(existingImport.getKey()) && newImport.getValue().equals(existingImport.getValue())) { found = true; + break; } } if (!found) { @@ -778,12 +753,12 @@ private List addNewImports(List im } @Deprecated - private Map convertInterfaces(Map interfaces, TImplementationArtifacts implementationArtifacts) { + private Map convertInterfaces(Map interfaces, + List implementationArtifacts) { if (implementationArtifacts == null) { return interfaces; } - List listImplArt = implementationArtifacts.getImplementationArtifact(); - for (TImplementationArtifacts.ImplementationArtifact implementationArtifact : listImplArt) { + for (TImplementationArtifact implementationArtifact : implementationArtifacts) { YTInterfaceDefinition selectedInterface = interfaces.get(implementationArtifact.getInterfaceName()); if (selectedInterface != null) { YTOperationDefinition operation = selectedInterface.getOperations().get(implementationArtifact.getOperationName()); @@ -793,57 +768,58 @@ private Map convertInterfaces(Map convert(TNodeType.RequirementDefinitions node) { + public List convertRequirementsDefinition(List node) { if (Objects.isNull(node)) { return null; } - return node.getRequirementDefinition().stream() + return node.stream() .filter(Objects::nonNull) .map(this::convert) .filter(Objects::nonNull) .collect(Collectors.toList()); } - public Map convert(TDeploymentArtifacts node) { + public List convertRequirements(List node) { if (Objects.isNull(node)) { return null; } - return node.getDeploymentArtifact().stream() + return node.stream() .filter(Objects::nonNull) - .map(ia -> new LinkedHashMap.SimpleEntry<>(ia.getArtifactRef().getLocalPart(), convertArtifactReference(new QName(ia.getArtifactRef().getNamespaceURI(), ia.getArtifactRef().getLocalPart())))) + .map(this::convert) .filter(Objects::nonNull) - .filter(entry -> Objects.nonNull(entry.getValue())) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + .collect(Collectors.toList()); } - public Map convert(TDeploymentArtifacts node, Map artifacts) { - if (Objects.isNull(node)) { + public Map convert(TDeploymentArtifact artifact) { + if (Objects.isNull(artifact)) { return null; } - Map output = new LinkedHashMap<>(); - for (TDeploymentArtifact deploymentArtifact : node.getDeploymentArtifact()) { - if (artifacts.containsKey(deploymentArtifact.getArtifactRef().getLocalPart())) { - output.put(deploymentArtifact.getArtifactRef().getLocalPart(), artifacts.get(deploymentArtifact.getArtifactRef().getLocalPart())); - } else { - output.put(deploymentArtifact.getArtifactRef().getLocalPart(), convertArtifactReference(deploymentArtifact.getArtifactRef())); - } - } - return output; + return Collections.singletonMap( + artifact.getArtifactRef() != null ? artifact.getArtifactRef().getLocalPart() : artifact.getName(), + convertArtifactReference(artifact.getArtifactRef()) + ); } - public Map convert(TImplementationArtifacts node, Map artifacts) { - if (Objects.isNull(node)) { + public Map convert(List nodeArtifacts, Map artifacts) { + if (Objects.isNull(nodeArtifacts)) { return null; } Map output = new LinkedHashMap<>(); - for (TImplementationArtifact implementationArtifact : node.getImplementationArtifact()) { - if (artifacts.containsKey(implementationArtifact.getArtifactRef().getLocalPart())) { - output.put(implementationArtifact.getArtifactRef().getLocalPart(), artifacts.get(implementationArtifact.getArtifactRef().getLocalPart())); - } else { - output.put(implementationArtifact.getArtifactRef().getLocalPart(), convertArtifactReference(implementationArtifact.getArtifactRef())); + for (TDeploymentOrImplementationArtifact deploymentArtifact : nodeArtifacts) { + if (deploymentArtifact.getArtifactRef() != null) { + if (artifacts.containsKey(deploymentArtifact.getArtifactRef().getLocalPart())) { + output.put( + deploymentArtifact.getArtifactRef().getLocalPart(), + artifacts.get(deploymentArtifact.getArtifactRef().getLocalPart()) + ); + } else { + output.put(deploymentArtifact.getArtifactRef().getLocalPart(), + convertArtifactReference(deploymentArtifact.getArtifactRef())); + } } } + return output; } @@ -856,29 +832,6 @@ public YTArtifactDefinition convertArtifactReference(QName ref) { public YTArtifactDefinition convert(ArtifactTemplateId id) { TArtifactTemplate node = repository.getElement(id); -// List files = Optional.ofNullable(repository.getContainedFiles(new ArtifactTemplateFilesDirectoryId(id))) -// .orElse(new TreeSet<>()) -// .stream() -// .map(ref -> { -// try { -// InputStream inputStream = repository.newInputStream(ref); -// Path path = this.path.resolve(id.getGroup()) -// .resolve(id.getNamespace().getEncoded()) -// .resolve(node.getIdFromIdOrNameField()) -// .resolve(ref.getFileName()); -// if (!path.toFile().exists()) { -// //noinspection ResultOfMethodCallIgnored -// path.getParent().toFile().mkdirs(); -// Files.copy(inputStream, path); -// } -// return this.path.relativize(path).toString(); -// } catch (IOException e) { -// LOGGER.error("Failed to copy Artifact file", e); -// return null; -// } -// }) -// .filter(Objects::nonNull) -// .collect(Collectors.toList()); return convertArtifactTemplate(node); } @@ -888,20 +841,19 @@ public YTArtifactDefinition convertArtifactTemplate(TArtifactTemplate node) { return null; } List files = new ArrayList<>(); - TArtifactTemplate.ArtifactReferences artifactReferences = node.getArtifactReferences(); + List artifactReferences = node.getArtifactReferences(); if (artifactReferences != null) { - List artifactReferenceList = artifactReferences.getArtifactReference(); - if (artifactReferenceList != null) { - for (TArtifactReference artifactReference : artifactReferenceList) { - files.add(artifactReference.getReference()); - } + for (TArtifactReference artifactReference : artifactReferences) { + files.add(artifactReference.getReference()); } } - return new YTArtifactDefinition.Builder(getQName( - new ArtifactTypeId(node.getType()), - node.getType().getNamespaceURI(), - node.getType().getLocalPart() - ), files.size() > 0 ? files.get(0) : null) + return new YTArtifactDefinition.Builder( + getQName( + new ArtifactTypeId(node.getType()), + node.getType().getNamespaceURI(), + node.getType().getLocalPart() + ), + files.size() > 0 ? files.get(0) : null) .build(); } @@ -927,18 +879,23 @@ public YTMapRequirementDefinition convert(TRequirementDefinition node) { } public QName convert(@NonNull TRequirementType node) { + QName requiredCapabilityType = node.getRequiredCapabilityType(); + if (requiredCapabilityType == null) { + return null; + } + return getQName( - new CapabilityTypeId(node.getRequiredCapabilityType()), - node.getRequiredCapabilityType().getNamespaceURI(), - node.getRequiredCapabilityType().getLocalPart() + new CapabilityTypeId(requiredCapabilityType), + requiredCapabilityType.getNamespaceURI(), + requiredCapabilityType.getLocalPart() ); } - public Map convert(TNodeType.CapabilityDefinitions node) { - if (Objects.isNull(node) || node.getCapabilityDefinition().isEmpty()) { + public Map convertCapabilitiesDefinition(List node) { + if (Objects.isNull(node) || node.isEmpty()) { return null; } - return node.getCapabilityDefinition().stream() + return node.stream() .filter(Objects::nonNull) .collect(Collectors.toMap(TCapabilityDefinition::getName, this::convert)); } @@ -963,98 +920,37 @@ public QName convert(QName node, DefinitionsChildId id) { ); } - public Map convert(TInterfaces node, String type) { + public Map convert(List node, String type) { if (Objects.isNull(node)) { return null; } - return node.getInterface().stream() + return node.stream() .filter(Objects::nonNull) .collect(Collectors.toMap( TInterface::getName, - entry -> new YTInterfaceDefinition.Builder() + entry -> new YTInterfaceDefinition.Builder<>() .setType(new QName(type)) - .addOperations(convertOperations(entry.getOperation(), new ArrayList<>())) - .build() - )); - } - - public Map convert(TInterfaces node) { - if (Objects.isNull(node)) { - return null; - } - return node.getInterface().stream() - .filter(Objects::nonNull) - .collect(Collectors.toMap( - TInterface::getName, - entry -> new YTInterfaceDefinition.Builder() - .addOperations(convertOperations(entry.getOperation(), new ArrayList<>())) + .addOperations(convertOperations(entry.getOperations(), new ArrayList<>())) .build() )); } - public Map convert(TOperation.InputParameters node) { + public Map convert(TParameter node) { if (Objects.isNull(node)) { return null; } - return node.getInputParameter().stream() - .filter(Objects::nonNull) - .collect(Collectors.toMap( - TParameter::getName, - entry -> new YTPropertyDefinition.Builder(convertType(entry.getType())) - .setRequired(entry.getRequired()) - .build() - )); - } - - public Map convert(TOperation.OutputParameters node) { - if (Objects.isNull(node)) { - return null; - } - return node.getOutputParameter().stream() - .filter(Objects::nonNull) - .collect(Collectors.toMap( - TParameter::getName, - entry -> new YTPropertyDefinition.Builder(convertType(entry.getType())) - .setRequired(entry.getRequired()) - .build() - )); + return Collections.singletonMap( + node.getName(), + new YTPropertyDefinition.Builder(convertType(node.getType())) + .setRequired(node.getRequired()) + .build() + ); } private QName convertType(String type) { return TypeConverter.INSTANCE.convert(type); } - public Map convert(TArtifacts node) { - if (Objects.isNull(node)) { - return null; - } - - if (Objects.isNull(node.getArtifact())) { - return new HashMap<>(); - } - - return node.getArtifact().stream() - .filter(Objects::nonNull) - .map(this::convert) - .filter(Objects::nonNull) - .flatMap(map -> map.entrySet().stream()) - .filter(Objects::nonNull) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - - public Map convert(TNodeTemplate.Capabilities node) { - if (Objects.isNull(node)) { - return null; - } - return node.getCapability().stream() - .filter(Objects::nonNull) - .map(this::convert) - .filter(Objects::nonNull) - .flatMap(map -> map.entrySet().stream()) - .filter(Objects::nonNull) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - public Map convert(TArtifact node) { if (Objects.isNull(node)) { return null; @@ -1088,13 +984,10 @@ public Map convert(TInterfaceType node) { } public Map convert(TCapability node) { - if (Objects.isNull(node)) { - return null; - } - - // skip empty capability assignments - if (node.getProperties() == null) { - return null; + if (Objects.isNull(node) || + // skip empty capability assignments + node.getProperties() == null) { + return new HashMap<>(); } return Collections.singletonMap( @@ -1105,17 +998,6 @@ public Map convert(TCapability node) { ); } - public List convert(TNodeTemplate.Requirements node) { - if (Objects.isNull(node)) { - return null; - } - return node.getRequirement().stream() - .filter(Objects::nonNull) - .map(this::convert) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - public YTMapRequirementAssignment convert(TRequirement node) { if (Objects.isNull(node)) { return null; @@ -1144,17 +1026,6 @@ public YTMapRequirementAssignment convert(TRequirement node) { )); } - private Map convert(TPolicies node) { - if (Objects.isNull(node)) { - return null; - } - return node.getPolicy().stream() - .filter(Objects::nonNull) - .map(this::convert) - .flatMap(map -> map.entrySet().stream()) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - private Map convert(List nodes) { if (Objects.isNull(nodes)) { return null; @@ -1192,6 +1063,12 @@ private Map convert(List nodes) { return convert((TGroupDefinition) node).entrySet().stream(); } else if (node instanceof TGroupType) { return convert((TGroupType) node).entrySet().stream(); + } else if (node instanceof TCapability) { + return convert((TCapability) node).entrySet().stream(); + } else if (node instanceof TDeploymentArtifact) { + return convert((TDeploymentArtifact) node).entrySet().stream(); + } else if (node instanceof TParameter) { + return convert((TParameter) node).entrySet().stream(); } throw new AssertionError(); }) @@ -1204,7 +1081,7 @@ private Map convert(TDataType node) { if (Objects.isNull(node)) { return new HashMap<>(); } - String nodeFullName = this.getFullName(node); + String nodeFullName = this.getFullName(node); YTDataType.Builder builder = convert(node, new YTDataType.Builder(), TDataType.class); return Collections.singletonMap( nodeFullName, @@ -1335,11 +1212,12 @@ public static YTPropertyAssignment convert(Object value) { } if (value instanceof Map) { builder.setValue( - ((Map) value).entrySet().stream() + ((Map) value).entrySet().stream() .map(entry -> new LinkedHashMap.SimpleEntry<>( String.valueOf(entry.getKey()), - convert(entry.getValue())) + convert(entry.getValue()) + ) ) .collect(Collectors.toMap( Map.Entry::getKey, @@ -1350,8 +1228,8 @@ public static YTPropertyAssignment convert(Object value) { } if (value instanceof List) { builder.setValue( - ((List) value).stream() - .map(entry -> convert(entry)) + ((List) value).stream() + .map(PropertyConverter::convert) .collect(Collectors.toList()) ); return builder.build(); diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/converter/ToCanonical.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/yaml/converter/ToCanonical.java index ba1f01806f..97062e2965 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 @@ -35,7 +35,6 @@ 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.TAppliesTo; import org.eclipse.winery.model.tosca.TArtifact; import org.eclipse.winery.model.tosca.TArtifactReference; import org.eclipse.winery.model.tosca.TArtifactTemplate; @@ -47,13 +46,12 @@ 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.TDeploymentArtifacts; import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TEntityType; 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.TImplementationArtifacts; +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; @@ -63,7 +61,6 @@ 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.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TPolicyType; import org.eclipse.winery.model.tosca.TRelationshipTemplate; @@ -75,7 +72,6 @@ import org.eclipse.winery.model.tosca.TSchema; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.extensions.kvproperties.AttributeDefinition; import org.eclipse.winery.model.tosca.extensions.kvproperties.ConstraintClauseKV; @@ -139,12 +135,10 @@ public class ToCanonical { private Map artifactTemplates; private List requirementTypes; private List imports; - //private Map interfaceTypes; private Map> policies; private Map> relationshipSTMap; private Map nodeTemplateMap; private AssignmentBuilder assignmentBuilder; - // private ReferenceVisitor referenceVisitor; private final IRepository context; public ToCanonical(IRepository context) { @@ -205,7 +199,7 @@ public TDefinitions convert(YTServiceTemplate node, String id, String target_nam .addRelationshipTypeImplementations(this.relationshipTypeImplementations) .addCapabilityTypes(convert(node.getCapabilityTypes())) .addArtifactTypes(convert(node.getArtifactTypes())) - .addArtifactTemplates(this.artifactTemplates.entrySet().stream().map(Map.Entry::getValue).collect(Collectors.toList())) + .addArtifactTemplates(new ArrayList<>(this.artifactTemplates.values())) .addPolicyTypes(convert(node.getPolicyTypes())) .addInterfaceTypes(convert(node.getInterfaceTypes())) .setName(id) @@ -257,17 +251,17 @@ private > T fillEntityTypeProperties(YTEntityTy .setDerivedFrom(node.getDerivedFrom()) .addTags(convertMetadata(node.getMetadata(), "targetNamespace", "abstract", "final")) .setTargetNamespace(node.getMetadata().get("targetNamespace")) - .setAbstract(Boolean.valueOf(node.getMetadata().get("abstract"))) - .setFinal(Boolean.valueOf(node.getMetadata().get("final"))) + .setAbstract(Boolean.parseBoolean(node.getMetadata().get("abstract"))) + .setFinal(Boolean.parseBoolean(node.getMetadata().get("final"))) .setAttributeDefinitions(convert(node.getAttributes())); if (node.getVersion() != null) { String version = node.getVersion().getVersion(); if (version != null) { - TTag tag = new TTag(); - tag.setName("version"); - tag.setValue(version); - builder.addTags(tag); + builder.addTag( + new TTag.Builder("version", version) + .build() + ); } } @@ -303,23 +297,21 @@ private ConstraintClauseKV convert(YTConstraintClause constraint) { * @return TOSCA XML Tags */ @NonNull - private TTags convertMetadata(Metadata metadata, String... excludedKeys) { + private List convertMetadata(Metadata metadata, String... excludedKeys) { Set exclusionSet = new HashSet<>(Arrays.asList(excludedKeys)); - return new TTags.Builder() - .addTag( - metadata.entrySet().stream() - .filter(Objects::nonNull) - .filter(e -> !exclusionSet.contains(e.getKey())) - .map(entry -> new TTag.Builder().setName(entry.getKey()).setValue(entry.getValue()).build()) - .filter(Objects::nonNull) - .collect(Collectors.toList()) - ) - .build(); + return metadata.entrySet().stream() + .filter(Objects::nonNull) + .filter(e -> !exclusionSet.contains(e.getKey())) + .map(entry -> + new TTag.Builder(entry.getKey(), entry.getValue()) + .build()) + .filter(Objects::nonNull) + .collect(Collectors.toList()); } /** * Converts TOSCA YAML ArtifactTypes to TOSCA XML ArtifactTypes. Both objects have a super type EntityType. - * Additional elements mime_type and file_ext from TOSCA YAML are moved to tags in TOSCA XML + * Additional elements mime_type and file_ext from TOSCA YAML are moved to Tags in TOSCA XML * * @param node the YAML ArtifactType * @return TOSCA XML ArtifactType @@ -402,11 +394,11 @@ private TInterfaceType convertToTInterfaceType(YTInterfaceType node, String type * @return TOSCA XML DeploymentArtifacts */ @Deprecated - private TDeploymentArtifacts convertDeploymentArtifacts(@NonNull Map artifactDefinitionMap, String targetNamespace) { + private List convertDeploymentArtifacts(@NonNull Map artifactDefinitionMap, String targetNamespace) { if (artifactDefinitionMap.isEmpty()) { return null; } - return new TDeploymentArtifacts.Builder(artifactDefinitionMap.entrySet().stream() + return artifactDefinitionMap.entrySet().stream() .filter(Objects::nonNull) .map(entry -> { TArtifactTemplate artifactTemplate = convert(entry.getValue(), entry.getKey()); @@ -415,32 +407,7 @@ private TDeploymentArtifacts convertDeploymentArtifacts(@NonNull Map artifactDefinitionMap) { - if (artifactDefinitionMap.isEmpty()) { - return null; - } - return new TDeploymentArtifacts.Builder(artifactDefinitionMap.entrySet().stream() - .filter(Objects::nonNull) - .map(entry -> { - TArtifactTemplate artifactTemplate = convert(entry.getValue(), entry.getKey()); - this.artifactTemplates.put(artifactTemplate.getId(), artifactTemplate); - return new TDeploymentArtifact.Builder(entry.getKey(), entry.getValue().getType()) - .setArtifactRef(new QName(artifactTemplate.getId())) - .build(); - }) - .collect(Collectors.toList())) - .build(); + .collect(Collectors.toList()); } /** @@ -450,25 +417,23 @@ private TDeploymentArtifacts convertDeploymentArtifacts(@NonNull Map artifactDefinitionMap, String targetNamespace) { + private List convertImplementationArtifact(@NonNull Map artifactDefinitionMap, String targetNamespace) { if (artifactDefinitionMap.isEmpty()) { return null; } - TImplementationArtifacts output = new TImplementationArtifacts.Builder(artifactDefinitionMap.entrySet().stream() + return artifactDefinitionMap.entrySet().stream() .filter(entry -> Objects.nonNull(entry) && Objects.nonNull(entry.getValue())) .map(entry -> { TArtifactTemplate artifactTemplate = convert(entry.getValue(), entry.getKey()); this.artifactTemplates.put(artifactTemplate.getId(), artifactTemplate); - return new TImplementationArtifacts.ImplementationArtifact.Builder(entry.getValue().getType()) + return new TImplementationArtifact.Builder(entry.getValue().getType()) .setName(entry.getKey()) .setArtifactRef(new QName(targetNamespace, artifactTemplate.getId())) .setInterfaceName(convertInterfaceName(entry.getValue())) .setOperationName(convertOperationName(entry.getValue())) .build(); }) - .collect(Collectors.toList())) - .build(); - return output; + .collect(Collectors.toList()); } @Nullable @@ -547,7 +512,7 @@ private TNodeTemplate convert(YTNodeTemplate node, String id) { } /** - * Constructs the the name of the PropertyType for a given type + * Constructs the name of the PropertyType for a given type */ private QName getPropertyTypeName(QName type) { return new QName(type.getNamespaceURI(), type.getLocalPart() + "_Properties"); @@ -593,7 +558,7 @@ private TRequirement convert(YTRequirementAssignment node, String id) { TRequirement.Builder builder = new TRequirement.Builder(reqId, id, null); if (node.getCapability() != null) { - builder = builder.setCapability(node.getCapability().toString()); + builder = builder.setCapability(node.getCapability().getLocalPart()); } else { // when exporting, this must be caught, but while developing, it is tolerated // todo check if this is the case during export! @@ -638,7 +603,7 @@ private TCapabilityDefinition getCapabilityDefinitionOfCapabilityName(String cap for (HasInheritance currentNT : ancestry) { assert currentNT instanceof TNodeType; if (((TNodeType) currentNT).getCapabilityDefinitions() != null) { - currentCapDefs = ((TNodeType) currentNT).getCapabilityDefinitions().getCapabilityDefinition(); + currentCapDefs = ((TNodeType) currentNT).getCapabilityDefinitions(); for (TCapabilityDefinition currentDef : currentCapDefs) { if (currentDef.getName().equals(capName)) { @@ -652,7 +617,7 @@ private TCapabilityDefinition getCapabilityDefinitionOfCapabilityName(String cap } /** - * Gets the capability type of a capability identified by its name as present in the capability definition or + * Gets the CapabilityType of a Capability identified by its name as present in the capability definition or * capability assignment */ private QName getCapabilityTypeOfCapabilityName(String capName) { @@ -695,14 +660,13 @@ private TCapabilityDefinition convert(YTCapabilityDefinition node, String id) { if (Objects.isNull(node)) { return null; } - TCapabilityDefinition result = new TCapabilityDefinition.Builder(id, node.getType()) + + return new TCapabilityDefinition.Builder(id, node.getType()) .addDocumentation(node.getDescription()) .setLowerBound(node.getLowerBound()) .setUpperBound(node.getUpperBound()) .setValidSourceTypes(node.getValidSourceTypes()) .build(); - - return result; } private TInterfaceDefinition convert(YTInterfaceDefinition node, String id) { @@ -735,7 +699,7 @@ private TTopologyTemplate convert(YTTopologyTemplateDefinition node) { builder.setNodeTemplates(convert(node.getNodeTemplates())); builder.setRelationshipTemplates(convert(node.getRelationshipTemplates())); - builder.setPolicies(new TPolicies(convert(node.getPolicies()))); + builder.setPolicies(convert(node.getPolicies())); builder.setGroups(convert(node.getGroups())); if (node.getInputs() != null) { @@ -792,7 +756,8 @@ private TRelationshipType convert(YTRelationshipType node, String id) { return null; } String typeName = fixNamespaceDuplication(id, node.getMetadata().get("targetNamespace")); - TRelationshipType output = fillEntityTypeProperties(node, new TRelationshipType.Builder(typeName)) + // convertRelationshipTypeImplementation(node.getInterfaces(), id, node.getMetadata().get("targetNamespace")); + return fillEntityTypeProperties(node, new TRelationshipType.Builder(typeName)) .addInterfaces(convert(node.getInterfaces(), null)) .addSourceInterfaces(convert(node.getInterfaces(), "SourceInterfaces")) .addTargetInterfaces(convert(node.getInterfaces(), "TargetInterfaces")) @@ -802,8 +767,6 @@ private TRelationshipType convert(YTRelationshipType node, String id) { .setValidTarget(convertValidTargetSource(node.getValidTargetTypes(), false)) .setValidTargetList(node.getValidTargetTypes()) .build(); - // convertRelationshipTypeImplementation(node.getInterfaces(), id, node.getMetadata().get("targetNamespace")); - return output; } private QName convertValidTargetSource(List targets, Boolean isSource) { @@ -969,21 +932,14 @@ private String getFileNameFromFile(String filename) { * @param targetList list of TOSCA YAML PolicyType targets * @return TOSCA XML PolicyType AppliesTo */ - private TAppliesTo convertTargets(List targetList) { - if (targetList == null || targetList.size() == 0) { + private List convertTargets(List targetList) { + if (targetList == null || targetList.isEmpty()) { return null; } - List references = new ArrayList<>(); - for (QName nodeRef : targetList) { - TAppliesTo.NodeTypeReference ref = new TAppliesTo.NodeTypeReference(); - ref.setTypeRef(nodeRef); - references.add(ref); - } - - TAppliesTo appliesTo = new TAppliesTo(); - appliesTo.getNodeTypeReference().addAll(references); - return appliesTo; + return targetList.stream() + .map(TPolicyType.NodeTypeReference::new) + .collect(Collectors.toList()); } /** @@ -991,19 +947,19 @@ private TAppliesTo convertTargets(List targetList) { */ private void convertNodeTypeImplementation( Map implArtifacts, - Map deplArtifacts, String type, String targetNamespace) { + Map deploymentArtifacts, String type, String targetNamespace) { for (Map.Entry implArtifact : implArtifacts.entrySet()) { - for (Map.Entry deplArtifact : deplArtifacts.entrySet()) { - if (implArtifact.getKey().equalsIgnoreCase(deplArtifact.getKey())) { - deplArtifacts.remove(deplArtifact.getKey()); + for (Map.Entry deploymentArtifact : deploymentArtifacts.entrySet()) { + if (implArtifact.getKey().equalsIgnoreCase(deploymentArtifact.getKey())) { + deploymentArtifacts.remove(deploymentArtifact.getKey()); } } } TNodeTypeImplementation.Builder builder = (new TNodeTypeImplementation.Builder(type + "_impl", new QName(targetNamespace, type)) .setTargetNamespace(targetNamespace) - // .setDeploymentArtifacts(convertDeploymentArtifacts(deplArtifacts, targetNamespace)) + // .setDeploymentArtifacts(convertDeploymentArtifacts(deploymentArtifacts, targetNamespace)) ); - TImplementationArtifacts implementationArtifacts = convertImplementationArtifact(implArtifacts, targetNamespace); + List implementationArtifacts = convertImplementationArtifact(implArtifacts, targetNamespace); builder.setImplementationArtifacts(implementationArtifacts); this.nodeTypeImplementations.add(builder.build()); } @@ -1169,8 +1125,6 @@ private List convert(@NonNull Map map) { } else if (entry.getValue() instanceof YTRequirementDefinition) { return convert((YTRequirementDefinition) entry.getValue(), entry.getKey()); } else if (entry.getValue() instanceof YTInterfaceType) { - //assert (!interfaceTypes.containsKey(new QName(entry.getKey()))); - //this.interfaceTypes.put(new QName(entry.getKey()), (TInterfaceType) entry.getValue()); return convertToTInterfaceType((YTInterfaceType) entry.getValue(), entry.getKey()); } else if (entry.getValue() instanceof YTInterfaceDefinition) { return convert((YTInterfaceDefinition) entry.getValue(), entry.getKey()); 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 83e6ddb536..2e5d82546d 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 @@ -36,7 +36,6 @@ import org.eclipse.winery.model.ids.definitions.RelationshipTypeId; import org.eclipse.winery.model.ids.definitions.ServiceTemplateId; import org.eclipse.winery.model.tosca.TArtifact; -import org.eclipse.winery.model.tosca.TArtifacts; import org.eclipse.winery.model.tosca.TDefinitions; import org.eclipse.winery.model.tosca.TImport; import org.eclipse.winery.model.tosca.TNodeTemplate; @@ -179,10 +178,9 @@ private void prepareNodeTypeForExport(IRepository repository, NodeTypeId id, TDe //refMap.put(new CsarContentProperties(BackendUtils.getPathInsideRepo(licenseRef)), new RepositoryRefBasedCsarEntry(licenseRef)); String nodeTypePath = BackendUtils.getPathInsideRepo(id); TNodeType node = repository.getElement(id); - TArtifacts artifacts = node.getArtifacts(); + List artifacts = node.getArtifacts(); if (Objects.nonNull(artifacts)) { - - artifacts.getArtifact().forEach(artifact -> { + artifacts.forEach(artifact -> { UrlValidator customValidator = new UrlValidator(); if (customValidator.isValid(artifact.getFile())) { LOGGER.info("Specified file is a valid URL, start processing the reference"); @@ -212,7 +210,7 @@ private void updatePathsInNodeArtifacts(TDefinitions entryDefinitions, TNodeType .filter(nt -> nt.getQName().equals(node.getQName())) .forEach(nt -> { if (nt.getArtifacts() != null) { - nt.getArtifacts().getArtifact().stream() + nt.getArtifacts().stream() .filter(art -> art.getFile().equals(artifact.getFile())) .forEach(art -> { art.setFile("/" + FilenameUtils.separatorsToUnix(pathInsideRepo)); @@ -258,11 +256,11 @@ private void prepareServiceTemplateForExport(IRepository repository, ServiceTemp if (Objects.nonNull(st.getTopologyTemplate())) { for (TNodeTemplate nodeTemplate : st.getTopologyTemplate().getNodeTemplates()) { - TArtifacts artifacts = nodeTemplate.getArtifacts(); + List artifacts = nodeTemplate.getArtifacts(); if (Objects.nonNull(artifacts)) { // update file paths in the exported service template - artifacts.getArtifact().forEach(a -> { + artifacts.forEach(a -> { UrlValidator customValidator = new UrlValidator(); if (customValidator.isValid(a.getFile())) { LOGGER.info("Specified file is a valid URL, start processing the reference"); @@ -305,7 +303,6 @@ private void updatePathsInTopologyTemplateArtifacts(TDefinitions entryDefinition .stream() .filter(node -> node.getId().equals(nodeTemplate.getId())) .forEach(node -> node.getArtifacts() - .getArtifact() .stream() .filter(art -> art.getFile().equals(artifact.getFile())) .forEach(art -> { diff --git a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/backend/BackendUtilsTest.java b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/backend/BackendUtilsTest.java index 23f4cbc9d2..cfe9bb376e 100644 --- a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/backend/BackendUtilsTest.java +++ b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/backend/BackendUtilsTest.java @@ -25,7 +25,6 @@ import javax.xml.namespace.QName; import org.eclipse.winery.common.json.JacksonProvider; -import org.eclipse.winery.repository.common.RepositoryFileReference; import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; import org.eclipse.winery.model.tosca.TArtifactReference; import org.eclipse.winery.model.tosca.TArtifactTemplate; @@ -33,6 +32,7 @@ import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TRelationshipTemplate; import org.eclipse.winery.model.tosca.TTopologyTemplate; +import org.eclipse.winery.repository.common.RepositoryFileReference; import org.eclipse.winery.repository.datatypes.ids.elements.ArtifactTemplateFilesDirectoryId; import org.eclipse.winery.repository.datatypes.ids.elements.ArtifactTemplateSourceDirectoryId; @@ -147,51 +147,33 @@ public void repositoryFileReferenceWithSubdirectoryCorrectlyCreated() { public TArtifactTemplate createArtifactTemplateWithSingleReferenceToAnUrl() { // create artifact template with a single contained reference (an absolute URL) - TArtifactTemplate artifactTemplate = new TArtifactTemplate(); - TArtifactTemplate.ArtifactReferences artifactReferences = new TArtifactTemplate.ArtifactReferences(); - artifactTemplate.setArtifactReferences(artifactReferences); - List artRefList = artifactReferences.getArtifactReference(); - TArtifactReference artRef = new TArtifactReference(); - artRef.setReference("http://www.example.org/absolute-url"); - artRefList.add(artRef); - - return artifactTemplate; + return new TArtifactTemplate.Builder("test", QName.valueOf("{ns}test")) + .addArtifactReference( + new TArtifactReference.Builder("http://www.example.org/absolute-url").build() + ) + .build(); } public TArtifactTemplate createArtifactTemplateWithReferenceToAnUrlAndANonExistentFile() { - // create artifact template with a single contained reference (an absolute URL) - TArtifactTemplate artifactTemplate = new TArtifactTemplate(); - TArtifactTemplate.ArtifactReferences artifactReferences = new TArtifactTemplate.ArtifactReferences(); - artifactTemplate.setArtifactReferences(artifactReferences); - List artRefList = artifactReferences.getArtifactReference(); - - TArtifactReference artRef = new TArtifactReference(); - artRef.setReference("http://www.example.org/absolute-url"); - artRefList.add(artRef); - - artRef = new TArtifactReference(); - artRef.setReference("does-not-exist.txt"); - artRefList.add(artRef); - - return artifactTemplate; + return new TArtifactTemplate.Builder("test", QName.valueOf("{ns}test")) + .addArtifactReference( + new TArtifactReference.Builder("http://www.example.org/absolute-url").build() + ).addArtifactReference( + new TArtifactReference.Builder("does-not-exist.txt").build() + ) + .build(); } public TArtifactTemplate createArtifactTemplateWithReferenceToAnUrlAndExistentFile() { - // create artifact template with a single contained reference (an absolute URL) - TArtifactTemplate artifactTemplate = new TArtifactTemplate(); - TArtifactTemplate.ArtifactReferences artifactReferences = new TArtifactTemplate.ArtifactReferences(); - artifactTemplate.setArtifactReferences(artifactReferences); - List artRefList = artifactReferences.getArtifactReference(); - - TArtifactReference artRef = new TArtifactReference(); - artRef.setReference("http://www.example.org/absolute-url"); - artRefList.add(artRef); - - artRef = new TArtifactReference(); - artRef.setReference("artifacttemplates/http%253A%252F%252Fexample.org/test-artifact-template/exists.txt"); - artRefList.add(artRef); - - return artifactTemplate; + return new TArtifactTemplate.Builder("test", QName.valueOf("{ns}test")) + .addArtifactReference( + new TArtifactReference.Builder("http://www.example.org/absolute-url").build() + ).addArtifactReference( + new TArtifactReference.Builder( + "artifacttemplates/http%253A%252F%252Fexample.org/test-artifact-template/exists.txt" + ).build() + ) + .build(); } @Test @@ -213,7 +195,7 @@ public void synchronizeReferencesDoesNotRemoveUrls() throws Exception { } @Test - public void synchronizeReferencesRemovesNonExistantFileAndDoesNotRemoveUrls() throws Exception { + public void synchronizeReferencesRemovesNonExistentFileAndDoesNotRemoveUrls() throws Exception { ArtifactTemplateId artifactTemplateId = new ArtifactTemplateId("http://example.org", "test-artifact-template", false); // alternative test implementation: Use git-based repository @@ -231,7 +213,7 @@ public void synchronizeReferencesRemovesNonExistantFileAndDoesNotRemoveUrls() th } @Test - public void synchronizeReferencesDoesNontRemoveExistantFileAndDoesNotRemoveUrls() throws Exception { + public void synchronizeReferencesDoesNotRemoveExistentFileAndDoesNotRemoveUrls() throws Exception { ArtifactTemplateId artifactTemplateId = new ArtifactTemplateId("http://example.org", "test-artifact-template", false); // alternative test implementation: Use git-based repository @@ -248,27 +230,29 @@ public void synchronizeReferencesDoesNontRemoveExistantFileAndDoesNotRemoveUrls( TArtifactTemplate artifactTemplate = createArtifactTemplateWithReferenceToAnUrlAndExistentFile(); when(repository.getElement(artifactTemplateId)).thenReturn(artifactTemplate); - TArtifactTemplate synchronizhedArtifactTemplate = BackendUtils.synchronizeReferences(repository, artifactTemplateId); + TArtifactTemplate synchronizedArtifactTemplate = BackendUtils.synchronizeReferences(repository, artifactTemplateId); - assertEquals(createArtifactTemplateWithReferenceToAnUrlAndExistentFile(), synchronizhedArtifactTemplate); + assertEquals(createArtifactTemplateWithReferenceToAnUrlAndExistentFile(), synchronizedArtifactTemplate); } @Test public void testUpdateVersionOfNodeTemplate() throws Exception { TTopologyTemplate.Builder topologyTemplate = new TTopologyTemplate.Builder(); - TNodeTemplate nt1 = new TNodeTemplate(); - TNodeTemplate nt2 = new TNodeTemplate(); - nt1.setId("java8_1.0-w1-wip1_3"); - nt1.setType(new QName("namespace", "java8_1.0-w1-wip1")); - nt2.setId("java8_1.0-w2-wip2"); - nt2.setType(new QName("namespace", "java8_1.0-w2-wip2")); + TNodeTemplate nt1 = new TNodeTemplate.Builder( + "java8_1.0-w1-wip1_3", + new QName("namespace", "java8_1.0-w1-wip1") + ).build(); + TNodeTemplate nt2 = new TNodeTemplate.Builder( + "java8_1.0-w2-wip2", + new QName("namespace", "java8_1.0-w2-wip2") + ).build(); topologyTemplate.addNodeTemplate(nt1); TTopologyTemplate resultTopologyTemplate = BackendUtils.updateVersionOfNodeTemplate(topologyTemplate.build(), "java8_1.0-w1-wip1_3", "{namespace}java8_1.0-w2-wip2"); List entityTemplates = topologyTemplate.getNodeTemplateOrRelationshipTemplate(); List entityTemplatesClone = resultTopologyTemplate.getNodeTemplateOrRelationshipTemplate(); - assertEquals(entityTemplates.get(0).getTypeAsQName().toString(), "{namespace}java8_1.0-w2-wip2"); + assertEquals("{namespace}java8_1.0-w2-wip2", entityTemplates.get(0).getTypeAsQName().toString()); } } diff --git a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/driverspecificationandinjection/DASpecificationTest.java b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/driverspecificationandinjection/DASpecificationTest.java index 8c96c90a52..9b777bd9de 100644 --- a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/driverspecificationandinjection/DASpecificationTest.java +++ b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/driverspecificationandinjection/DASpecificationTest.java @@ -34,6 +34,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; public class DASpecificationTest extends TestWithGitBackedRepository { @@ -43,17 +44,20 @@ public void getArtifactTypeOfDA() throws Exception { setRevisionTo("af529e513388dc9358a8f700757d8dc59aba3a55"); ServiceTemplateId id = new ServiceTemplateId("http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier", "DASpecificationTest", false); TTopologyTemplate topologyTemplate = this.repository.getElement(id).getTopologyTemplate(); + assertNotNull(topologyTemplate); TNodeTemplate nodeTemplateWithAbstractDA = topologyTemplate.getNodeTemplate("shetland_pony"); + assertNotNull(nodeTemplateWithAbstractDA); + assertNotNull(nodeTemplateWithAbstractDA.getDeploymentArtifacts()); - TDeploymentArtifact deploymentArtifact = nodeTemplateWithAbstractDA.getDeploymentArtifacts().getDeploymentArtifact().get(0); + TDeploymentArtifact deploymentArtifact = nodeTemplateWithAbstractDA.getDeploymentArtifacts().get(0); QName artifactTypeQName = deploymentArtifact.getArtifactType(); ArtifactTypeId artifactTypeId = new ArtifactTypeId(artifactTypeQName); TArtifactType artifactType = this.repository.getElement(artifactTypeId); - assertEquals(artifactType.getTargetNamespace(), DASpecification.getArtifactTypeOfDA(nodeTemplateWithAbstractDA.getDeploymentArtifacts().getDeploymentArtifact().get(0)).getTargetNamespace()); - assertEquals(artifactType.getName(), DASpecification.getArtifactTypeOfDA(nodeTemplateWithAbstractDA.getDeploymentArtifacts().getDeploymentArtifact().get(0)).getName()); + assertEquals(artifactType.getTargetNamespace(), DASpecification.getArtifactTypeOfDA(nodeTemplateWithAbstractDA.getDeploymentArtifacts().get(0)).getTargetNamespace()); + assertEquals(artifactType.getName(), DASpecification.getArtifactTypeOfDA(nodeTemplateWithAbstractDA.getDeploymentArtifacts().get(0)).getName()); } @Test @@ -61,6 +65,8 @@ public void getNodeTemplatesWithAbstractDAs() throws Exception { setRevisionTo("af529e513388dc9358a8f700757d8dc59aba3a55"); ServiceTemplateId id = new ServiceTemplateId("http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier", "DASpecificationTest", false); TTopologyTemplate topologyTemplate = this.repository.getElement(id).getTopologyTemplate(); + assertNotNull(topologyTemplate); + List nodeTemplateWithAbstractDA = new ArrayList<>(); nodeTemplateWithAbstractDA.add(topologyTemplate.getNodeTemplate("shetland_pony")); @@ -74,12 +80,15 @@ public void getArtifactTypeHierarchy() throws Exception { setRevisionTo("af529e513388dc9358a8f700757d8dc59aba3a55"); ServiceTemplateId id = new ServiceTemplateId("http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier", "DASpecificationTest", false); TTopologyTemplate topologyTemplate = this.repository.getElement(id).getTopologyTemplate(); + assertNotNull(topologyTemplate); TNodeTemplate nodeTemplate = topologyTemplate.getNodeTemplate("westernequipment"); + assertNotNull(nodeTemplate); + assertNotNull(nodeTemplate.getDeploymentArtifacts()); - List artifactTypes = DASpecification.getArtifactTypeHierarchy(DASpecification.getArtifactTypeOfDA(nodeTemplate.getDeploymentArtifacts().getDeploymentArtifact().get(0))); + List artifactTypes = DASpecification.getArtifactTypeHierarchy(DASpecification.getArtifactTypeOfDA(nodeTemplate.getDeploymentArtifacts().get(0))); List artifactTypeNames = new ArrayList<>(); - artifactTypes.stream().forEach(at -> artifactTypeNames.add(at.getName())); + artifactTypes.forEach(at -> artifactTypeNames.add(at.getName())); assertEquals(2, artifactTypes.size()); assertTrue(artifactTypeNames.contains("WesternEquipment_Pony")); @@ -91,10 +100,14 @@ public void getNodesWithSuitableConcreteDAs() throws Exception { setRevisionTo("5f63267261584a513dd8a9b7960687cc3dda910a"); ServiceTemplateId id = new ServiceTemplateId("http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier", "DASpecificationTest", false); TTopologyTemplate topologyTemplate = this.repository.getElement(id).getTopologyTemplate(); + assertNotNull(topologyTemplate); TNodeTemplate nodeTemplate = topologyTemplate.getNodeTemplate("ponycompetition"); TNodeTemplate nodeTemplateWithAbstractDA = topologyTemplate.getNodeTemplate("shetland_pony"); - TDeploymentArtifact deploymentArtifact = nodeTemplateWithAbstractDA.getDeploymentArtifacts().getDeploymentArtifact().get(0); + assertNotNull(nodeTemplateWithAbstractDA); + assertNotNull(nodeTemplateWithAbstractDA.getDeploymentArtifacts()); + + TDeploymentArtifact deploymentArtifact = nodeTemplateWithAbstractDA.getDeploymentArtifacts().get(0); TNodeTemplate expectedNodeTemplate = topologyTemplate.getNodeTemplate("dressageequipment"); TNodeTemplate actualNodeWithConcreteDA = DASpecification.getNodesWithSuitableConcreteDAs(nodeTemplate, deploymentArtifact, topologyTemplate); @@ -107,17 +120,21 @@ public void getNodesWithSuitableConcreteDAAndTheDirectlyConnectedNode() throws E setRevisionTo("5f63267261584a513dd8a9b7960687cc3dda910a"); ServiceTemplateId id = new ServiceTemplateId("http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier", "DASpecificationTest", false); TTopologyTemplate topologyTemplate = this.repository.getElement(id).getTopologyTemplate(); + assertNotNull(topologyTemplate); TNodeTemplate nodeTemplateWithAbstractDA = topologyTemplate.getNodeTemplate("shetland_pony"); - TDeploymentArtifact deploymentArtifact = nodeTemplateWithAbstractDA.getDeploymentArtifacts().getDeploymentArtifact().get(0); - TNodeTemplate nodeTemplateConcretDA1 = topologyTemplate.getNodeTemplate("dressageequipment"); + assertNotNull(nodeTemplateWithAbstractDA); + assertNotNull(nodeTemplateWithAbstractDA.getDeploymentArtifacts()); + + TDeploymentArtifact deploymentArtifact = nodeTemplateWithAbstractDA.getDeploymentArtifacts().get(0); + TNodeTemplate nodeTemplateConcreteDA1 = topologyTemplate.getNodeTemplate("dressageequipment"); TRelationshipTemplate relationshipTemplate1 = topologyTemplate.getRelationshipTemplate("con_42"); - TNodeTemplate nodeTemplateConcretDA2 = topologyTemplate.getNodeTemplate("westernequipment"); + TNodeTemplate nodeTemplateConcreteDA2 = topologyTemplate.getNodeTemplate("westernequipment"); TRelationshipTemplate relationshipTemplate2 = topologyTemplate.getRelationshipTemplate("con_54"); Set> concreteDAsAndConnectedNodes = new HashSet<>(); - concreteDAsAndConnectedNodes.add(Pair.of(relationshipTemplate1, nodeTemplateConcretDA1)); - concreteDAsAndConnectedNodes.add(Pair.of(relationshipTemplate2, nodeTemplateConcretDA2)); + concreteDAsAndConnectedNodes.add(Pair.of(relationshipTemplate1, nodeTemplateConcreteDA1)); + concreteDAsAndConnectedNodes.add(Pair.of(relationshipTemplate2, nodeTemplateConcreteDA2)); Set> actualNodeWithConcreteDA = DASpecification.getNodesWithSuitableConcreteDAAndTheDirectlyConnectedNode(nodeTemplateWithAbstractDA, deploymentArtifact, topologyTemplate); diff --git a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/driverspecificationandinjection/DriverInjectionTest.java b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/driverspecificationandinjection/DriverInjectionTest.java index ac3fc6593a..ba4a0d23b1 100644 --- a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/driverspecificationandinjection/DriverInjectionTest.java +++ b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/driverspecificationandinjection/DriverInjectionTest.java @@ -41,7 +41,7 @@ public void injectDriver() throws Exception { TTopologyTemplate tTopologyTemplate = DriverInjection.injectDriver(topologyTemplate); TNodeTemplate nodeTemplateWithAbstractDA = tTopologyTemplate.getNodeTemplate("shetland_pony"); - List deploymentArtifacts = nodeTemplateWithAbstractDA.getDeploymentArtifacts().getDeploymentArtifact(); + List deploymentArtifacts = nodeTemplateWithAbstractDA.getDeploymentArtifacts(); List deploymentArtifactNames = new ArrayList<>(); deploymentArtifacts.stream().forEach(da -> deploymentArtifactNames.add(da.getName())); @@ -59,7 +59,7 @@ public void setDriverProperty() throws Exception { ServiceTemplateId id = new ServiceTemplateId("http://winery.opentosca.org/test/servicetemplates/ponyuniverse/daspecifier", "DASpecificationTest", false); TTopologyTemplate topologyTemplate = this.repository.getElement(id).getTopologyTemplate(); TRelationshipTemplate relationshipTemplate = topologyTemplate.getRelationshipTemplate("con_71"); - TDeploymentArtifact deploymentArtifact = topologyTemplate.getNodeTemplate("dressageequipment").getDeploymentArtifacts().getDeploymentArtifact().stream() + TDeploymentArtifact deploymentArtifact = topologyTemplate.getNodeTemplate("dressageequipment").getDeploymentArtifacts().stream() .filter(da -> da.getName().equalsIgnoreCase("DressageEquipment_Pony")).findFirst().get(); DriverInjection.setDriverProperty(relationshipTemplate, deploymentArtifact); diff --git a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/criteria/minexternalconnections/MinExternalConnectionsTest.java b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/criteria/minexternalconnections/MinExternalConnectionsTest.java index accb18d59f..5e161858ae 100644 --- a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/criteria/minexternalconnections/MinExternalConnectionsTest.java +++ b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/criteria/minexternalconnections/MinExternalConnectionsTest.java @@ -76,7 +76,7 @@ public void filter() throws Exception { TTopologyTemplate twoExternal = repository.getElement(id).getTopologyTemplate(); ModelUtilities.setTargetLabel(twoExternal.getNodeTemplate("shetland_pony_2"), "PastureProvider"); ModelUtilities.setTargetLabel(twoExternal.getNodeTemplate("shetland_pony_3"), "PastureProvider"); - TTopologyTemplate oneExternal = AllocationUtils.deepcopy(twoExternal); + TTopologyTemplate oneExternal = AllocationUtils.deepCopy(twoExternal); ModelUtilities.setTargetLabel(oneExternal.getNodeTemplate("shetland_pony_2"), "FieldProvider"); ModelUtilities.setTargetLabel(oneExternal.getNodeTemplate("shetland_pony_3"), "FieldProvider"); diff --git a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/util/AllocationUtilsTest.java b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/util/AllocationUtilsTest.java index 4d5642ab2a..6815ff325d 100644 --- a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/util/AllocationUtilsTest.java +++ b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/util/AllocationUtilsTest.java @@ -84,7 +84,7 @@ public void deepcopy() { }); TTopologyTemplate clone = BackendUtils.clone(topology); assertEquals(topology, clone); - TTopologyTemplate cloneNotEquals = AllocationUtils.deepcopy(topology); + TTopologyTemplate cloneNotEquals = AllocationUtils.deepCopy(topology); assertNotEquals(topology, cloneNotEquals); } diff --git a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/util/TopologyMappingsWrapperTest.java b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/util/TopologyMappingsWrapperTest.java index c5c6e3e750..08033ef215 100644 --- a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/util/TopologyMappingsWrapperTest.java +++ b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/targetallocation/util/TopologyMappingsWrapperTest.java @@ -204,7 +204,8 @@ public void getPresentTargetLabels() { @Test public void getRequirements() { TNodeTemplate nodeTemplate = policiesTopology.getTopology().getNodeTemplate("shetland_pony"); - List requirements = policiesTopology.getRequirements(nodeTemplate); + assertNotNull(nodeTemplate); + List requirements = nodeTemplate.getRequirements(); assertEquals(1, requirements.size()); assertEquals("ReqWarmFloor", requirements.get(0).getType().getLocalPart()); } diff --git a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/xml/XmlRepositoryIntegrationTests.java b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/xml/XmlRepositoryIntegrationTests.java index 5006d34291..7d1cf304da 100644 --- a/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/xml/XmlRepositoryIntegrationTests.java +++ b/org.eclipse.winery.repository/src/test/java/org/eclipse/winery/repository/xml/XmlRepositoryIntegrationTests.java @@ -15,6 +15,7 @@ package org.eclipse.winery.repository.xml; import java.io.IOException; +import java.util.ArrayList; import javax.xml.namespace.QName; @@ -24,7 +25,6 @@ import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TServiceTemplate; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.repository.TestWithGitBackedRepository; import org.eclipse.winery.repository.backend.BackendUtils; @@ -38,7 +38,6 @@ import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; public class XmlRepositoryIntegrationTests extends TestWithGitBackedRepository { @@ -82,9 +81,12 @@ public void testGroupDefinitions() throws Exception { .build(); if (element.getTags() == null) { - element.setTags(new TTags()); + element.setTags(new ArrayList<>()); } - element.getTags().getTag().add(new TTag.Builder().setName("test").setValue("test").build()); + element.getTags() + .add( + new TTag.Builder("test", "test").build() + ); // Save group element.getTopologyTemplate().addGroup(testGroup); @@ -100,6 +102,6 @@ public void testGroupDefinitions() throws Exception { assertTrue(testGroup.getMembers().isEmpty()); assertNotNull(element.getTags()); - assertEquals(1, element.getTags().getTag().size()); + assertEquals(1, element.getTags().size()); } } diff --git a/org.eclipse.winery.tools.deployablecomponents/src/main/java/org/eclipse/winery/tools/deployablecomponents/DeployableComponentsToscaConverter.java b/org.eclipse.winery.tools.deployablecomponents/src/main/java/org/eclipse/winery/tools/deployablecomponents/DeployableComponentsToscaConverter.java index ea04453d4f..c8d99212e1 100644 --- a/org.eclipse.winery.tools.deployablecomponents/src/main/java/org/eclipse/winery/tools/deployablecomponents/DeployableComponentsToscaConverter.java +++ b/org.eclipse.winery.tools.deployablecomponents/src/main/java/org/eclipse/winery/tools/deployablecomponents/DeployableComponentsToscaConverter.java @@ -24,7 +24,6 @@ import org.eclipse.winery.model.tosca.TNodeType; import org.eclipse.winery.model.tosca.TRequirementDefinition; import org.eclipse.winery.model.tosca.TTag; -import org.eclipse.winery.model.tosca.TTags; import org.eclipse.winery.tools.deployablecomponents.commons.Component; import org.apache.commons.lang3.tuple.Pair; @@ -41,9 +40,11 @@ List convertToToscaModel(Map nodeBuilder.addCapabilityDefinitions(convertComponentToCapability(topEntry.getKey())); // add top components to nodes with base component as requirement - TNodeType.Builder nodeBuilder2 = convertComponentToNode(topEntry.getKey()); - nodeBuilder2.addRequirementDefinitions(convertComponentToRequirement(entry.getKey())); - nodes.add(nodeBuilder2.build()); + nodes.add( + convertComponentToNode(topEntry.getKey()) + .addRequirementDefinitions(convertComponentToRequirement(entry.getKey())) + .build() + ); } nodes.add(nodeBuilder.build()); } @@ -52,21 +53,30 @@ List convertToToscaModel(Map private TNodeType.Builder convertComponentToNode(Component component) { TNodeType.Builder baseNodeBuilder = new TNodeType.Builder(component.getName()); - TTag versionTag = new TTag(new TTag.Builder().setName("version").setValue(component.getVersion())); - TTag versionOperatorTag = new TTag(new TTag.Builder().setName("versionOperator").setValue(component.getVersionOperator())); - baseNodeBuilder.setTags(new TTags(new TTags.Builder().addTag(versionTag).addTag(versionOperatorTag))); + baseNodeBuilder.addTag( + new TTag.Builder("versionOperator", component.getVersionOperator()).build() + ); + baseNodeBuilder.addTag( + new TTag.Builder("version", component.getVersion()).build() + ); return baseNodeBuilder; } private TCapabilityDefinition convertComponentToCapability(Component component) { - TCapabilityDefinition.Builder builder = new TCapabilityDefinition.Builder(component.getName(), new QName(component.getName() + component.getVersionOperator() + component.getVersion())); - builder.setUpperBound(component.getVersionOperator() + "_" + component.getVersion()); - return new TCapabilityDefinition(builder); + return new TCapabilityDefinition.Builder( + component.getName(), + new QName(component.getName() + component.getVersionOperator() + component.getVersion()) + ) + .setUpperBound(component.getVersionOperator() + "_" + component.getVersion()) + .build(); } private TRequirementDefinition convertComponentToRequirement(Component component) { - TRequirementDefinition.Builder builder = new TRequirementDefinition.Builder(component.getName(), new QName(component.getName() + component.getVersionOperator() + component.getVersion())); - builder.setUpperBound(component.getVersionOperator() + "_" + component.getVersion()); - return new TRequirementDefinition(builder); + return new TRequirementDefinition.Builder( + component.getName(), + new QName(component.getName() + component.getVersionOperator() + component.getVersion()) + ) + .setUpperBound(component.getVersionOperator() + "_" + component.getVersion()) + .build(); } } diff --git a/org.eclipse.winery.topologygraph/src/main/java/org/eclipse/winery/topologygraph/matching/ToscaPrmPropertyMatcher.java b/org.eclipse.winery.topologygraph/src/main/java/org/eclipse/winery/topologygraph/matching/ToscaPrmPropertyMatcher.java index af5f58b88e..8f2bbf1bb4 100644 --- a/org.eclipse.winery.topologygraph/src/main/java/org/eclipse/winery/topologygraph/matching/ToscaPrmPropertyMatcher.java +++ b/org.eclipse.winery.topologygraph/src/main/java/org/eclipse/winery/topologygraph/matching/ToscaPrmPropertyMatcher.java @@ -61,8 +61,8 @@ public boolean characterizingPatternsCompatible(TEntityTemplate detectorEntityEl HasPolicies candidate = (HasPolicies) candidateEntityElement; if (Objects.nonNull(detectorElement.getPolicies()) && Objects.nonNull(candidate.getPolicies())) { - List candidatePolicies = candidate.getPolicies().getPolicy(); - characterizingPatternsCompatible = detectorElement.getPolicies().getPolicy() + List candidatePolicies = candidate.getPolicies(); + characterizingPatternsCompatible = detectorElement.getPolicies() .stream() .allMatch(detectorPolicy -> { if (this.namespaceManager.isPatternNamespace(detectorPolicy.getPolicyType().getNamespaceURI())) { @@ -83,7 +83,7 @@ public boolean characterizingPatternsCompatible(TEntityTemplate detectorEntityEl }); } else if (Objects.nonNull(detectorElement.getPolicies())) { // only if there are patterns attached - characterizingPatternsCompatible = detectorElement.getPolicies().getPolicy() + characterizingPatternsCompatible = detectorElement.getPolicies() .stream() .noneMatch(detectorPolicy -> this.namespaceManager.isPatternNamespace(detectorPolicy.getPolicyType().getNamespaceURI()) diff --git a/org.eclipse.winery.topologygraph/src/main/java/org/eclipse/winery/topologygraph/matching/patterndetection/PatternDetectionUtils.java b/org.eclipse.winery.topologygraph/src/main/java/org/eclipse/winery/topologygraph/matching/patterndetection/PatternDetectionUtils.java index 48f97d1963..060b86c495 100644 --- a/org.eclipse.winery.topologygraph/src/main/java/org/eclipse/winery/topologygraph/matching/patterndetection/PatternDetectionUtils.java +++ b/org.eclipse.winery.topologygraph/src/main/java/org/eclipse/winery/topologygraph/matching/patterndetection/PatternDetectionUtils.java @@ -109,7 +109,7 @@ public static OTPatternRefinementModel clone(OTPatternRefinementModel other) { .setDetector(other.getDetector()) .setRelationMappings(cloneRelationMappings(other.getRelationMappings())) .setPermutationMappings(other.getPermutationMappings()) - .setRefinementStructure(AllocationUtils.deepcopy(other.getRefinementStructure(), false)) + .setRefinementStructure(AllocationUtils.deepCopy(other.getRefinementStructure(), false)) .setAttributeMappings(cloneAttributeMappings(other.getAttributeMappings())) .setStayMappings(other.getStayMappings()) .setDeploymentArtifactMappings(other.getDeploymentArtifactMappings()) diff --git a/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/ToscaPrmPropertyMatcherTest.java b/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/ToscaPrmPropertyMatcherTest.java index c7bc960bbe..712f4de2c1 100644 --- a/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/ToscaPrmPropertyMatcherTest.java +++ b/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/ToscaPrmPropertyMatcherTest.java @@ -14,7 +14,6 @@ package org.eclipse.winery.topologygraph.matching; import java.util.ArrayList; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -23,9 +22,7 @@ import javax.xml.namespace.QName; -import org.eclipse.winery.model.tosca.TEntityTemplate; import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.utils.ModelUtilities; import org.eclipse.winery.repository.backend.NamespaceManager; @@ -114,26 +111,28 @@ public boolean isPatternNamespace(String namespace) { } }; - TPolicies leftPolicies1 = new TPolicies(); - TPolicy leftPolicy1 = new TPolicy(); - leftPolicy1.setPolicyType(QName.valueOf("{ns}policyType1")); - leftPolicies1.getPolicy().add(leftPolicy1); + List leftPolicies1 = new ArrayList<>(); + leftPolicies1.add( + new TPolicy.Builder(QName.valueOf("{ns}policyType1")).build() + ); - TPolicies leftPolicies2 = new TPolicies(); - TPolicy leftPolicy2 = new TPolicy(); - leftPolicy2.setPolicyType(QName.valueOf("{ns}policyType1123")); - leftPolicies2.getPolicy().add(leftPolicy2); + List leftPolicies2 = new ArrayList<>(); + leftPolicies2.add( + new TPolicy.Builder(QName.valueOf("{ns}policyType1123")).build() + ); - TPolicies rightPolicies1 = new TPolicies(); - TPolicy rightPolicy1 = new TPolicy(); - rightPolicy1.setPolicyType(QName.valueOf("{ns}policyType1")); - rightPolicies1.getPolicy().add(rightPolicy1); + List rightPolicies1 = new ArrayList<>(); + rightPolicies1.add( + new TPolicy.Builder(QName.valueOf("{ns}policyType1")).build() + ); - TPolicies rightPolicies2 = new TPolicies(); - TPolicy rightPolicy2 = new TPolicy(); - rightPolicy2.setPolicyType(QName.valueOf("{ns}policyType1")); - rightPolicy2.setPolicyRef(QName.valueOf("{ns2}policyTemplate1")); - rightPolicies2.getPolicy().add(rightPolicy2); + List rightPolicies2 = new ArrayList<>(); + rightPolicies2.add( + new TPolicy.Builder(QName.valueOf("{ns}policyType1")).build() + ); + rightPolicies2.add( + new TPolicy.Builder(QName.valueOf("{ns2}policyTemplate1")).build() + ); return Stream.of( Arguments.of(leftPolicies1, rightPolicies1, patternNamespaceManager, true, "Matching policy types without templates"), @@ -148,7 +147,7 @@ public boolean isPatternNamespace(String namespace) { @ParameterizedTest(name = "{index} => ''{4}''") @MethodSource("characterizingPatternsCompatibleArguments") - public void characterizingPatternsCompatibleTest(TPolicies leftPolicies, TPolicies rightPolicies, + public void characterizingPatternsCompatibleTest(List leftPolicies, List rightPolicies, NamespaceManager namespaceManager, boolean expected, String description) { // region ***** left ***** TNodeTemplate left = new TNodeTemplate(); diff --git a/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/patterndetection/ToscaComponentPatternMatcherTest.java b/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/patterndetection/ToscaComponentPatternMatcherTest.java index 15c745b3a7..5435b7051e 100644 --- a/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/patterndetection/ToscaComponentPatternMatcherTest.java +++ b/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/patterndetection/ToscaComponentPatternMatcherTest.java @@ -22,7 +22,6 @@ import org.eclipse.winery.model.tosca.TNodeTemplate; import org.eclipse.winery.model.tosca.TNodeType; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.model.tosca.TTopologyTemplate; import org.eclipse.winery.model.tosca.extensions.OTPatternRefinementModel; @@ -36,6 +35,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; class ToscaComponentPatternMatcherTest { @@ -88,13 +88,16 @@ public boolean isPatternNamespace(String namespace) { stayMappings.add((OTStayMapping) PatternDetectionUtils.swapDetectorWithRefinement(stayMapping)); prm.setStayMappings(stayMappings); assertFalse(matcher.isCompatible(refinement, candidate)); + assertNotNull(prm.getStayMappings()); prm.getStayMappings().clear(); assertTrue(matcher.isCompatible(refinement, candidate)); // component pattern mapping exists List componentPatternMappings = new ArrayList<>(); OTPermutationMapping componentPatternMapping = new OTPermutationMapping(new OTPermutationMapping.Builder() - .setDetectorElement(new TNodeTemplate()) + .setDetectorElement( + new TNodeTemplate.Builder("detector", QName.valueOf("{ns}type")).build() + ) .setRefinementElement(refinementTemplate) ); componentPatternMappings.add((OTPermutationMapping) PatternDetectionUtils.swapDetectorWithRefinement(componentPatternMapping)); @@ -104,20 +107,25 @@ public boolean isPatternNamespace(String namespace) { assertTrue(matcher.isCompatible(refinement, candidate)); // different behavior patterns - TPolicies refinementPolicies = new TPolicies(); - refinementPolicies.getPolicy().add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}type1")))); + List refinementPolicies = new ArrayList<>(); + refinementPolicies.add( + new TPolicy.Builder(QName.valueOf("{patternNs}type1")).build() + ); refinementTemplate.setPolicies(refinementPolicies); - TPolicies candidatePolicies = new TPolicies(); + + List candidatePolicies = new ArrayList<>(); candidateTemplate.setPolicies(candidatePolicies); // detector has behavior pattern, candidate doesn't assertFalse(matcher.isCompatible(refinement, candidate)); - candidatePolicies.getPolicy().add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}type1")))); + candidatePolicies.add( + new TPolicy.Builder(QName.valueOf("{patternNs}type1")).build() + ); // detector and candidate have same behavior pattern assertTrue(matcher.isCompatible(refinement, candidate)); - refinementPolicies.getPolicy().clear(); + refinementPolicies.clear(); // candidate has behavior pattern, detector doesn't assertFalse(matcher.isCompatible(refinement, candidate)); - candidatePolicies.getPolicy().clear(); + candidatePolicies.clear(); assertTrue(matcher.isCompatible(refinement, candidate)); // detector supertype of candidate diff --git a/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/patterndetection/ToscaPatternMatcherTest.java b/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/patterndetection/ToscaPatternMatcherTest.java index 2922108b72..1082ffe8be 100644 --- a/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/patterndetection/ToscaPatternMatcherTest.java +++ b/org.eclipse.winery.topologygraph/src/test/java/org/eclipse/winery/topologygraph/matching/patterndetection/ToscaPatternMatcherTest.java @@ -14,10 +14,12 @@ package org.eclipse.winery.topologygraph.matching.patterndetection; +import java.util.ArrayList; +import java.util.List; + import javax.xml.namespace.QName; import org.eclipse.winery.model.tosca.TNodeTemplate; -import org.eclipse.winery.model.tosca.TPolicies; import org.eclipse.winery.model.tosca.TPolicy; import org.eclipse.winery.repository.backend.NamespaceManager; import org.eclipse.winery.topologygraph.matching.MockNamespaceManager; @@ -32,16 +34,21 @@ class ToscaPatternMatcherTest { @Test public void behaviorPatternsCompatible() { - TPolicies detectorPolicies = new TPolicies(); - detectorPolicies.getPolicy().add(new TPolicy(new TPolicy.Builder(QName.valueOf("{ns}type1")))); - TPolicies candidatePolicies = new TPolicies(); - TNodeTemplate detector = new TNodeTemplate(); - detector.setPolicies(detectorPolicies); + List detectorPolicies = new ArrayList<>(); + detectorPolicies.add( + new TPolicy.Builder(QName.valueOf("{ns}type1")).build() + ); + List candidatePolicies = new ArrayList<>(); + + TNodeTemplate detector = new TNodeTemplate.Builder("detector", QName.valueOf("{ns}type")) + .setPolicies(detectorPolicies) + .build(); ToscaNode detectorNode = new ToscaNode(); detectorNode.setNodeTemplate(detector); - TNodeTemplate candidate = new TNodeTemplate(); - candidate.setPolicies(candidatePolicies); + TNodeTemplate candidate = new TNodeTemplate.Builder("candidate", QName.valueOf("{ns}type")) + .setPolicies(candidatePolicies) + .build(); ToscaNode candidateNode = new ToscaNode(); candidateNode.setNodeTemplate(candidate); @@ -56,20 +63,20 @@ public boolean isPatternNamespace(String namespace) { // detector has policy, candidate doesn't assertTrue(matcher.behaviorPatternsCompatible(detectorNode, candidateNode)); - detectorPolicies.getPolicy().clear(); - candidatePolicies.getPolicy().add(new TPolicy(new TPolicy.Builder(QName.valueOf("{ns}type1")))); + detectorPolicies.clear(); + candidatePolicies.add(new TPolicy(new TPolicy.Builder(QName.valueOf("{ns}type1")))); // candidate has policy, detector doesn't assertTrue(matcher.behaviorPatternsCompatible(detectorNode, candidateNode)); - detectorPolicies.getPolicy().add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}type2")))); + detectorPolicies.add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}type2")))); // detector has behavior pattern, candidate doesn't assertFalse(matcher.behaviorPatternsCompatible(detectorNode, candidateNode)); - candidatePolicies.getPolicy().add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}type2")))); + candidatePolicies.add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}type2")))); // detector and candidate have same behavior pattern assertTrue(matcher.behaviorPatternsCompatible(detectorNode, candidateNode)); - candidatePolicies.getPolicy().add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}type3")))); + candidatePolicies.add(new TPolicy(new TPolicy.Builder(QName.valueOf("{patternNs}type3")))); // candidate has different behavior pattern than detector assertFalse(matcher.behaviorPatternsCompatible(detectorNode, candidateNode)); }