+ this.toscaDefinitionsVersion = copyConcept.toscaDefinitionsVersion;
+ this.dataTypes = (copyConcept.dataTypes != null ? new JpaToscaDataTypes(copyConcept.dataTypes) : null);
+ this.capabilityTypes =
+ (copyConcept.capabilityTypes != null ? new JpaToscaCapabilityTypes(copyConcept.capabilityTypes) : null);
+ this.relationshipTypes =
+ (copyConcept.relationshipTypes != null ? new JpaToscaRelationshipTypes(copyConcept.relationshipTypes)
+ : null);
+ this.nodeTypes = (copyConcept.nodeTypes != null ? new JpaToscaNodeTypes(copyConcept.nodeTypes) : null);
+ this.policyTypes = (copyConcept.policyTypes != null ? new JpaToscaPolicyTypes(copyConcept.policyTypes) : null);
+ this.topologyTemplate =
+ (copyConcept.topologyTemplate != null ? new JpaToscaTopologyTemplate(copyConcept.topologyTemplate)
+ : null);
+ }
+
+ /**
+ * Authorative constructor.
+ *
+ * @param authorativeConcept the authorative concept to copy from
+ */
+ public JpaToscaServiceTemplate(final ToscaServiceTemplate authorativeConcept) {
+ this.fromAuthorative(authorativeConcept);
+ }
+
+ @Override
+ public ToscaServiceTemplate toAuthorative() {
+ final var toscaServiceTemplate = new ToscaServiceTemplate();
+
+ super.setToscaEntity(toscaServiceTemplate);
+ super.toAuthorative();
+
+ toscaServiceTemplate.setToscaDefinitionsVersion(toscaDefinitionsVersion);
+
+ if (dataTypes != null) {
+ toscaServiceTemplate.setDataTypes(flattenMap(dataTypes.toAuthorative()));
+ }
+
+ if (capabilityTypes != null) {
+ toscaServiceTemplate.setCapabilityTypes(flattenMap(capabilityTypes.toAuthorative()));
+ }
+
+ if (relationshipTypes != null) {
+ toscaServiceTemplate.setRelationshipTypes(flattenMap(relationshipTypes.toAuthorative()));
+ }
+
+ if (nodeTypes != null) {
+ toscaServiceTemplate.setNodeTypes(flattenMap(nodeTypes.toAuthorative()));
+ }
+
+ if (policyTypes != null) {
+ toscaServiceTemplate.setPolicyTypes(flattenMap(policyTypes.toAuthorative()));
+ }
+
+ if (topologyTemplate != null) {
+ toscaServiceTemplate.setToscaTopologyTemplate(topologyTemplate.toAuthorative());
+ }
+
+ return toscaServiceTemplate;
+ }
+
+ /**
+ * Takes a list of maps and flattens it into a single map.
+ *
+ * @param list list to be flattened
+ * @return a map containing all the elements from the list of maps
+ */
+ private <V> Map<String, V> flattenMap(List<Map<String, V>> list) {
+ Map<String, V> result = new LinkedHashMap<>();
+
+ for (Map<String, V> map : list) {
+ result.putAll(map);
+ }
+
+ return result;
+ }
+
+ @Override
+ public void fromAuthorative(ToscaServiceTemplate toscaServiceTemplate) {
+ super.fromAuthorative(toscaServiceTemplate);
+
+ if (toscaServiceTemplate.getDefinedName() == null) {
+ getKey().setName(DEFAULT_NAME);
+ }
+
+ if (toscaServiceTemplate.getDefinedVersion() == null) {
+ getKey().setVersion(DEFAULT_VERSION);
+ }
+
+ toscaDefinitionsVersion = toscaServiceTemplate.getToscaDefinitionsVersion();
+
+ if (toscaServiceTemplate.getDataTypes() != null) {
+ dataTypes = new JpaToscaDataTypes();
+ dataTypes.fromAuthorative(Collections.singletonList(toscaServiceTemplate.getDataTypes()));
+ }
+
+ if (toscaServiceTemplate.getCapabilityTypes() != null) {
+ capabilityTypes = new JpaToscaCapabilityTypes();
+ capabilityTypes.fromAuthorative(Collections.singletonList(toscaServiceTemplate.getCapabilityTypes()));
+ }
+
+ if (toscaServiceTemplate.getRelationshipTypes() != null) {
+ relationshipTypes = new JpaToscaRelationshipTypes();
+ relationshipTypes.fromAuthorative(Collections.singletonList(toscaServiceTemplate.getRelationshipTypes()));
+ }
+
+ if (toscaServiceTemplate.getNodeTypes() != null) {
+ nodeTypes = new JpaToscaNodeTypes();
+ nodeTypes.fromAuthorative(Collections.singletonList(toscaServiceTemplate.getNodeTypes()));
+ }
+
+ if (toscaServiceTemplate.getPolicyTypes() != null) {
+ policyTypes = new JpaToscaPolicyTypes();
+ policyTypes.fromAuthorative(Collections.singletonList(toscaServiceTemplate.getPolicyTypes()));
+ }
+
+ if (toscaServiceTemplate.getToscaTopologyTemplate() != null) {
+ topologyTemplate = new JpaToscaTopologyTemplate();
+ topologyTemplate.fromAuthorative(toscaServiceTemplate.getToscaTopologyTemplate());
+ }