diff options
Diffstat (limited to 'common-be/src/main/java/org')
4 files changed, 166 insertions, 5 deletions
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyDataDefinition.java index c885dbcc46..ff72f1f361 100644 --- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyDataDefinition.java +++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/PropertyDataDefinition.java @@ -55,7 +55,12 @@ public class PropertyDataDefinition extends ToscaDataDefinition { private String label; private Boolean immutable = Boolean.FALSE; private Boolean mappedToComponentProperty = Boolean.TRUE; + /** + * @deprecated use {@link #toscaGetFunction#functionType} instead + */ + @Deprecated private ToscaGetFunctionType toscaGetFunctionType; + private ToscaGetFunctionDataDefinition toscaGetFunction; private String inputPath; private String status; @@ -114,6 +119,7 @@ public class PropertyDataDefinition extends ToscaDataDefinition { this.setModel(propertyDataDefinition.getModel()); this.setPropertyId(propertyDataDefinition.getPropertyId()); this.setToscaGetFunctionType(propertyDataDefinition.getToscaGetFunctionType()); + this.setToscaGetFunction(propertyDataDefinition.getToscaGetFunction()); this.parentPropertyType = propertyDataDefinition.getParentPropertyType(); this.subPropertyInputPath = propertyDataDefinition.getSubPropertyInputPath(); if (isNotEmpty(propertyDataDefinition.annotations)) { @@ -161,6 +167,13 @@ public class PropertyDataDefinition extends ToscaDataDefinition { return null; } + public ToscaGetFunctionType getToscaGetFunctionType() { + if (toscaGetFunction != null) { + return toscaGetFunction.getFunctionType(); + } + return toscaGetFunctionType; + } + public Boolean isHidden() { return hidden; } @@ -303,4 +316,13 @@ public class PropertyDataDefinition extends ToscaDataDefinition { public List<Annotation> getAnnotations() { return (List<Annotation>) getToscaPresentationValue(JsonPresentationFields.ANNOTATIONS); } + + public boolean isGetFunction() { + return this.toscaGetFunctionType != null || this.toscaGetFunction != null; + } + + public boolean hasGetFunction() { + return this.toscaGetFunction != null; + } + } diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaGetFunctionDataDefinition.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaGetFunctionDataDefinition.java new file mode 100644 index 0000000000..adc2ad6b44 --- /dev/null +++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaGetFunctionDataDefinition.java @@ -0,0 +1,104 @@ +/* + * - + * ============LICENSE_START======================================================= + * Copyright (C) 2022 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdc.be.datatypes.elements; + +import com.google.gson.Gson; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; +import org.openecomp.sdc.be.datatypes.enums.PropertySource; +import org.openecomp.sdc.be.datatypes.tosca.ToscaGetFunctionType; + +@Data +public class ToscaGetFunctionDataDefinition { + + private String propertyUniqueId; + private String propertyName; + private PropertySource propertySource; + private String sourceUniqueId; + private String sourceName; + private ToscaGetFunctionType functionType; + private List<String> propertyPathFromSource = new ArrayList<>(); + + public ToscaGetFunctionDataDefinition() { + //necessary for JSON conversions + } + + public boolean isSubProperty() { + return propertyPathFromSource != null && propertyPathFromSource.size() > 1; + } + + /** + * Builds the value of a property based on the TOSCA get function information. + */ + public String generatePropertyValue() { + if (functionType == null) { + throw new IllegalStateException("functionType is required in order to generate the get function value"); + } + if (CollectionUtils.isEmpty(propertyPathFromSource)) { + throw new IllegalStateException("propertyPathFromSource is required in order to generate the get function value"); + } + + final var gson = new Gson(); + if (functionType == ToscaGetFunctionType.GET_PROPERTY) { + return gson.toJson(buildGetPropertyFunctionValue()); + } + if (functionType == ToscaGetFunctionType.GET_INPUT) { + return gson.toJson(buildGetInputFunctionValue()); + } + + throw new UnsupportedOperationException(String.format("ToscaGetFunctionType '%s' is not supported yet", functionType)); + } + + private Map<String, Object> buildGetPropertyFunctionValue() { + if (propertySource == null) { + throw new IllegalStateException("propertySource is required in order to generate the get_property value"); + } + if (propertySource == PropertySource.SELF) { + return Map.of(functionType.getFunctionName(), + Stream.concat(Stream.of(PropertySource.SELF.getName()), propertyPathFromSource.stream()).collect(Collectors.toList()) + ); + } + if (propertySource == PropertySource.INSTANCE) { + if (sourceName == null) { + throw new IllegalStateException("sourceName is required in order to generate the get_property from INSTANCE value"); + } + return Map.of(functionType.getFunctionName(), + Stream.concat(Stream.of(sourceName), propertyPathFromSource.stream()).collect(Collectors.toList()) + ); + } + + throw new UnsupportedOperationException(String.format("Tosca property source '%s' not supported", propertySource)); + } + + private Map<String, Object> buildGetInputFunctionValue() { + if (this.propertyPathFromSource.size() == 1) { + return Map.of(this.functionType.getFunctionName(), this.propertyPathFromSource.get(0)); + } + return Map.of(this.functionType.getFunctionName(), this.propertyPathFromSource); + } + +} diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/PropertySource.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/PropertySource.java new file mode 100644 index 0000000000..8086d22815 --- /dev/null +++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/PropertySource.java @@ -0,0 +1,34 @@ +/* + * - + * ============LICENSE_START======================================================= + * Copyright (C) 2022 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdc.be.datatypes.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public enum PropertySource { + SELF("SELF"), INSTANCE("INSTANCE"); + + private final String name; + +} diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/tosca/ToscaGetFunctionType.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/tosca/ToscaGetFunctionType.java index 7e4299c73a..bb85ceb0fc 100644 --- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/tosca/ToscaGetFunctionType.java +++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/tosca/ToscaGetFunctionType.java @@ -23,11 +23,12 @@ import lombok.AllArgsConstructor; import lombok.Getter; @AllArgsConstructor +@Getter public enum ToscaGetFunctionType { - GET_INPUT("get_input"), - GET_PROPERTY("get_property"), - GET_ATTRIBUTE("get_attribute"); + GET_INPUT("get_input", "input"), + GET_PROPERTY("get_property", "property"), + GET_ATTRIBUTE("get_attribute", "attribute"); - @Getter - private final String toscaGetFunctionName; + private final String functionName; + private final String propertyType; } |