Rework the policy refresh
[clamp.git] / src / main / java / org / onap / clamp / loop / template / LoopElementModel.java
index e6ba981..4a46a95 100644 (file)
@@ -40,16 +40,21 @@ import javax.persistence.ManyToMany;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import org.hibernate.annotations.SortNatural;
+import org.onap.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
+import org.onap.clamp.loop.Loop;
 import org.onap.clamp.loop.common.AuditEntity;
+import org.onap.clamp.policy.Policy;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.operational.OperationalPolicy;
 
 /**
- * This class represents a micro service model for a loop template.
+ * This class represents a micro service/operational/... model for a loop template.
+ * So it's an element in the flow (a box shown in the loop).
  */
 
 @Entity
 @Table(name = "loop_element_models")
 public class LoopElementModel extends AuditEntity implements Serializable {
-    public static final String DEFAULT_GROUP_NAME = "DEFAULT";
     /**
      * The serial version id.
      */
@@ -65,11 +70,13 @@ public class LoopElementModel extends AuditEntity implements Serializable {
     private String dcaeBlueprintId;
 
     /**
-     * Here we store the blueprint coming from DCAE.
+     * Here we store the blueprint coming from DCAE, it can be null if this is not a micro service model.
      */
     @Column(columnDefinition = "MEDIUMTEXT", name = "blueprint_yaml")
     private String blueprint;
 
+    public static String MICRO_SERVICE_TYPE = "MICRO_SERVICE_TYPE";
+    public static String OPERATIONAL_POLICY_TYPE = "OPERATIONAL_POLICY_TYPE";
     /**
      * The type of element.
      */
@@ -89,14 +96,14 @@ public class LoopElementModel extends AuditEntity implements Serializable {
      */
     @Expose
     @ManyToMany(
-        fetch = FetchType.EAGER,
-        cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
+            fetch = FetchType.EAGER,
+            cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
     @JoinTable(
-        name = "loopelementmodels_to_policymodels",
-        joinColumns = @JoinColumn(name = "loop_element_name", referencedColumnName = "name"),
-        inverseJoinColumns = {
-            @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"),
-            @JoinColumn(name = "policy_model_version", referencedColumnName = "version")})
+            name = "loopelementmodels_to_policymodels",
+            joinColumns = @JoinColumn(name = "loop_element_name", referencedColumnName = "name"),
+            inverseJoinColumns = {
+                    @JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"),
+                    @JoinColumn(name = "policy_model_version", referencedColumnName = "version")})
     @SortNatural
     private SortedSet<PolicyModel> policyModels = new TreeSet<>();
 
@@ -228,10 +235,10 @@ public class LoopElementModel extends AuditEntity implements Serializable {
     /**
      * Constructor.
      *
-     * @param name The name id
+     * @param name            The name id
      * @param loopElementType The type of loop element
-     * @param blueprint The blueprint defined for dcae that contains the
-     *        policy type to use
+     * @param blueprint       The blueprint defined for dcae that contains the
+     *                        policy type to use
      */
     public LoopElementModel(String name, String loopElementType, String blueprint) {
         this.name = name;
@@ -239,6 +246,23 @@ public class LoopElementModel extends AuditEntity implements Serializable {
         this.blueprint = blueprint;
     }
 
+    /**
+     * Create a policy instance from the current loop element model.
+     *
+     * @return A Policy object.
+     */
+    public Policy createPolicyInstance(Loop loop, ToscaConverterWithDictionarySupport toscaConverter) {
+        if (LoopElementModel.MICRO_SERVICE_TYPE.equals(this.getLoopElementType())) {
+            return new MicroServicePolicy(loop, loop.getModelService(), this, toscaConverter);
+        }
+        else if (LoopElementModel.OPERATIONAL_POLICY_TYPE.equals(this.getLoopElementType())) {
+            return new OperationalPolicy(loop, loop.getModelService(), this, toscaConverter);
+        }
+        else {
+            return null;
+        }
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
@@ -263,7 +287,8 @@ public class LoopElementModel extends AuditEntity implements Serializable {
             if (other.name != null) {
                 return false;
             }
-        } else if (!name.equals(other.name)) {
+        }
+        else if (!name.equals(other.name)) {
             return false;
         }
         return true;