64b3ccde3922db8109fae1f4e22a72c763cb7413
[policy/clamp.git] /
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  *  Copyright (C) 2025 OpenInfra Foundation Europe. All rights reserved.\r
4  * ================================================================================\r
5  * Licensed under the Apache License, Version 2.0 (the "License");\r
6  * you may not use this file except in compliance with the License.\r
7  * You may obtain a copy of the License at\r
8  *\r
9  *      http://www.apache.org/licenses/LICENSE-2.0\r
10  *\r
11  * Unless required by applicable law or agreed to in writing, software\r
12  * distributed under the License is distributed on an "AS IS" BASIS,\r
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14  * See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  *\r
17  * SPDX-License-Identifier: Apache-2.0\r
18  * ============LICENSE_END=========================================================\r
19  */\r
20 \r
21 package org.onap.policy.clamp.models.acm.persistence.concepts;\r
22 \r
23 import jakarta.persistence.Column;\r
24 import jakarta.persistence.Convert;\r
25 import jakarta.persistence.Entity;\r
26 import jakarta.persistence.Id;\r
27 import jakarta.persistence.Inheritance;\r
28 import jakarta.persistence.InheritanceType;\r
29 import jakarta.persistence.Table;\r
30 import jakarta.validation.Valid;\r
31 import jakarta.validation.constraints.NotNull;\r
32 import java.util.LinkedHashMap;\r
33 import java.util.Map;\r
34 import java.util.UUID;\r
35 import java.util.function.UnaryOperator;\r
36 import java.util.stream.Collectors;\r
37 import lombok.Data;\r
38 import lombok.EqualsAndHashCode;\r
39 import lombok.NonNull;\r
40 import org.apache.commons.lang3.ObjectUtils;\r
41 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;\r
42 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionRollback;\r
43 import org.onap.policy.models.base.PfAuthorative;\r
44 import org.onap.policy.models.base.PfUtils;\r
45 import org.onap.policy.models.base.Validated;\r
46 \r
47 @Entity\r
48 @Table(name = "AutomationCompositionRollback")\r
49 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r
50 @Data\r
51 @EqualsAndHashCode(callSuper = false)\r
52 public class JpaAutomationCompositionRollback extends Validated\r
53         implements PfAuthorative<AutomationCompositionRollback>, Comparable<JpaAutomationCompositionRollback> {\r
54 \r
55     @Id\r
56     @NotNull\r
57     private String instanceId;\r
58 \r
59     @NotNull\r
60     @Column\r
61     private String compositionId;\r
62 \r
63     @NotNull\r
64     @Valid\r
65     @Convert(converter = StringToMapConverter.class)\r
66     @Column(length = 100000)\r
67     private Map<String, Object> elements = new LinkedHashMap<>();\r
68 \r
69     /**\r
70      * The Default Constructor creates a {@link JpaAutomationComposition} object with an empty hashmap.\r
71      */\r
72     public JpaAutomationCompositionRollback() {\r
73         this(UUID.randomUUID().toString(), UUID.randomUUID().toString(), new LinkedHashMap<>());\r
74     }\r
75 \r
76     /**\r
77      * The Key Constructor creates a {@link JpaAutomationCompositionRollback} object with all mandatory fields.\r
78      *\r
79      * @param instanceId The UUID of the automation composition rollback instance\r
80      * @param compositionId the TOSCA compositionId of the automation composition rollback definition\r
81      * @param elements the elements of the automation composition rollback\r
82      */\r
83     public JpaAutomationCompositionRollback(@NonNull final String instanceId, @NonNull final String compositionId,\r
84                                          @NonNull final Map<String, Object> elements) {\r
85         this.instanceId = instanceId;\r
86         this.compositionId = compositionId;\r
87         this.elements = PfUtils.mapMap(elements, UnaryOperator.identity());\r
88     }\r
89 \r
90     /**\r
91      * Copy constructor.\r
92      *\r
93      * @param copyConcept the concept to copy from\r
94      */\r
95     public JpaAutomationCompositionRollback(@NonNull final JpaAutomationCompositionRollback copyConcept) {\r
96         this.instanceId = copyConcept.instanceId;\r
97         this.compositionId = copyConcept.compositionId;\r
98         this.elements = PfUtils.mapMap(copyConcept.elements, UnaryOperator.identity());\r
99     }\r
100 \r
101     /**\r
102      * Authorative constructor.\r
103      *\r
104      * @param authorativeConcept the authorative concept to copy from\r
105      */\r
106     public JpaAutomationCompositionRollback(@NonNull final AutomationCompositionRollback authorativeConcept) {\r
107         this.fromAuthorative(authorativeConcept);\r
108     }\r
109 \r
110     @Override\r
111     public AutomationCompositionRollback toAuthorative() {\r
112         var acmRollback = new AutomationCompositionRollback();\r
113         acmRollback.setInstanceId(UUID.fromString(this.instanceId));\r
114         acmRollback.setCompositionId(UUID.fromString(this.compositionId));\r
115         acmRollback.setElements(this.elements.values().stream()\r
116                 .map(el -> AbstractConverter.convertObject(el, AutomationCompositionElement.class))\r
117                 .collect(Collectors.toMap(AutomationCompositionElement::getId, UnaryOperator.identity())));\r
118         return acmRollback;\r
119     }\r
120 \r
121     @Override\r
122     public void fromAuthorative(@NonNull final AutomationCompositionRollback acmRollback) {\r
123         this.instanceId = acmRollback.getInstanceId().toString();\r
124         this.compositionId = acmRollback.getCompositionId().toString();\r
125         this.elements = acmRollback.getElements().values().stream()\r
126                 .collect(Collectors.toMap(element -> element.getId().toString(), UnaryOperator.identity()));\r
127     }\r
128 \r
129     @Override\r
130     public int compareTo(final JpaAutomationCompositionRollback other) {\r
131         if (other == null) {\r
132             return -1;\r
133         }\r
134         if (this == other) {\r
135             return 0;\r
136         }\r
137 \r
138         var result = ObjectUtils.compare(instanceId, other.instanceId);\r
139         if (result != 0) {\r
140             return result;\r
141         }\r
142 \r
143         result = ObjectUtils.compare(compositionId, other.compositionId);\r
144         if (result != 0) {\r
145             return result;\r
146         }\r
147 \r
148         return PfUtils.compareObjects(elements, other.elements);\r
149     }\r
150 \r
151 }\r