Remove legacy operational Policy
[clamp.git] / src / main / java / org / onap / clamp / policy / Policy.java
index c104b13..d84f2c8 100644 (file)
 
 package org.onap.clamp.policy;
 
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
+import com.google.gson.annotations.Expose;
+import java.io.UnsupportedEncodingException;
+import java.util.Map;
+import javax.persistence.Column;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
+import org.hibernate.annotations.Type;
+import org.hibernate.annotations.TypeDef;
+import org.hibernate.annotations.TypeDefs;
+import org.json.JSONObject;
+import org.onap.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
+import org.onap.clamp.dao.model.jsontype.StringJsonUserType;
+import org.onap.clamp.loop.common.AuditEntity;
+import org.onap.clamp.loop.service.Service;
+import org.onap.clamp.loop.template.LoopElementModel;
+import org.onap.clamp.loop.template.PolicyModel;
+import org.yaml.snakeyaml.Yaml;
 
-public interface Policy {
+@MappedSuperclass
+@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)})
+public abstract class Policy extends AuditEntity {
 
-    String getName();
+    @Transient
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(Policy.class);
 
-    JsonObject getJsonRepresentation();
+    @Expose
+    @Type(type = "json")
+    @Column(columnDefinition = "json", name = "json_representation", nullable = false)
+    private JsonObject jsonRepresentation;
 
-    static String generatePolicyName(String policyType, String serviceName, String serviceVersion, String resourceName,
-        String blueprintFilename) {
+    @Expose
+    @Type(type = "json")
+    @Column(columnDefinition = "json", name = "configurations_json")
+    private JsonObject configurationsJson;
+
+    /**
+     * This attribute can be null when the user add a policy on the loop instance, not the template.
+     * When null, It therefore indicates that this policy is not by default in the loop template.
+     */
+    @Expose
+    @ManyToOne(fetch = FetchType.EAGER)
+    @JoinColumn(name = "loop_element_model_id")
+    private LoopElementModel loopElementModel;
+
+    @Expose
+    @Column(name = "pdp_group")
+    private String pdpGroup;
+
+    @Expose
+    @Column(name = "pdp_sub_group")
+    private String pdpSubgroup;
+
+    @Expose
+    @ManyToOne(fetch = FetchType.EAGER)
+    @JoinColumns({@JoinColumn(name = "policy_model_type", referencedColumnName = "policy_model_type"),
+            @JoinColumn(name = "policy_model_version", referencedColumnName = "version")})
+    private PolicyModel policyModel;
+
+    private JsonObject createJsonFromPolicyTosca() {
+        Map<String, Object> map =
+                new Yaml().load(this.getPolicyModel() != null ? this.getPolicyModel().getPolicyModelTosca() : "");
+        JSONObject jsonObject = new JSONObject(map);
+        return new Gson().fromJson(jsonObject.toString(), JsonObject.class);
+    }
+
+    /**
+     * This method create the policy payload that must be sent to PEF.
+     *
+     * @return A String containing the payload
+     * @throws UnsupportedEncodingException In case of failure
+     */
+    public String createPolicyPayload() throws UnsupportedEncodingException {
+        JsonObject toscaJson = createJsonFromPolicyTosca();
+
+        JsonObject policyPayloadResult = new JsonObject();
+
+        policyPayloadResult.add("tosca_definitions_version", toscaJson.get("tosca_definitions_version"));
+
+        JsonObject topologyTemplateNode = new JsonObject();
+        policyPayloadResult.add("topology_template", topologyTemplateNode);
+
+        JsonArray policiesArray = new JsonArray();
+        topologyTemplateNode.add("policies", policiesArray);
+
+        JsonObject thisPolicy = new JsonObject();
+        policiesArray.add(thisPolicy);
+
+        JsonObject policyDetails = new JsonObject();
+        thisPolicy.add(this.getName(), policyDetails);
+        policyDetails.addProperty("type", this.getPolicyModel().getPolicyModelType());
+        policyDetails.addProperty("type_version", this.getPolicyModel().getVersion());
+        policyDetails.addProperty("version", this.getPolicyModel().getVersion());
+
+        JsonObject policyMetadata = new JsonObject();
+        policyDetails.add("metadata", policyMetadata);
+        policyMetadata.addProperty("policy-id", this.getName());
+
+        policyDetails.add("properties", this.getConfigurationsJson());
+
+        String policyPayload = new GsonBuilder().setPrettyPrinting().create().toJson(policyPayloadResult);
+        logger.info("Policy payload: " + policyPayload);
+        return policyPayload;
+    }
+
+
+    /**
+     * Name getter.
+     *
+     * @return the name
+     */
+    public abstract String getName();
+
+    /**
+     * Name setter.
+     */
+    public abstract void setName(String name);
+
+    /**
+     * jsonRepresentation getter.
+     *
+     * @return the jsonRepresentation
+     */
+    public JsonObject getJsonRepresentation() {
+        return jsonRepresentation;
+    }
+
+    /**
+     * jsonRepresentation setter.
+     *
+     * @param jsonRepresentation The jsonRepresentation to set
+     */
+    public void setJsonRepresentation(JsonObject jsonRepresentation) {
+        this.jsonRepresentation = jsonRepresentation;
+    }
+
+    /**
+     * Regenerate the Policy Json Representation.
+     *
+     * @param toscaConverter The tosca converter required to regenerate the json schema
+     * @param serviceModel The service model associated
+     */
+    public abstract void updateJsonRepresentation(ToscaConverterWithDictionarySupport toscaConverter,
+                                                  Service serviceModel);
+
+    /**
+     * policyModel getter.
+     *
+     * @return the policyModel
+     */
+    public PolicyModel getPolicyModel() {
+        return policyModel;
+    }
+
+    /**
+     * policyModel setter.
+     *
+     * @param policyModel The new policyModel
+     */
+    public void setPolicyModel(PolicyModel policyModel) {
+        this.policyModel = policyModel;
+    }
+
+    /**
+     * configurationsJson getter.
+     *
+     * @return The configurationsJson
+     */
+    public JsonObject getConfigurationsJson() {
+        return configurationsJson;
+    }
+
+    /**
+     * configurationsJson setter.
+     *
+     * @param configurationsJson the configurationsJson to set
+     */
+    public void setConfigurationsJson(JsonObject configurationsJson) {
+        this.configurationsJson = configurationsJson;
+    }
+
+    /**
+     * loopElementModel getter.
+     *
+     * @return the loopElementModel
+     */
+    public LoopElementModel getLoopElementModel() {
+        return loopElementModel;
+    }
+
+    /**
+     * loopElementModel setter.
+     *
+     * @param loopElementModel the loopElementModel to set
+     */
+    public void setLoopElementModel(LoopElementModel loopElementModel) {
+        this.loopElementModel = loopElementModel;
+    }
+
+    /**
+     * pdpGroup getter.
+     *
+     * @return the pdpGroup
+     */
+    public String getPdpGroup() {
+        return pdpGroup;
+    }
+
+    /**
+     * pdpGroup setter.
+     *
+     * @param pdpGroup the pdpGroup to set
+     */
+    public void setPdpGroup(String pdpGroup) {
+        this.pdpGroup = pdpGroup;
+    }
+
+    /**
+     * pdpSubgroup getter.
+     *
+     * @return the pdpSubgroup
+     */
+    public String getPdpSubgroup() {
+        return pdpSubgroup;
+    }
+
+    /**
+     * pdpSubgroup setter.
+     *
+     * @param pdpSubgroup the pdpSubgroup to set
+     */
+    public void setPdpSubgroup(String pdpSubgroup) {
+        this.pdpSubgroup = pdpSubgroup;
+    }
+
+    /**
+     * Generate the policy name.
+     *
+     * @param policyType        The policy type
+     * @param serviceName       The service name
+     * @param serviceVersion    The service version
+     * @param resourceName      The resource name
+     * @param blueprintFilename The blueprint file name
+     * @return The generated policy name
+     */
+    public static String generatePolicyName(String policyType, String serviceName, String serviceVersion,
+                                            String resourceName, String blueprintFilename) {
         StringBuilder buffer = new StringBuilder(policyType).append("_").append(serviceName).append("_v")
-            .append(serviceVersion).append("_").append(resourceName).append("_")
-            .append(blueprintFilename.replaceAll(".yaml", ""));
+                .append(serviceVersion).append("_").append(resourceName).append("_")
+                .append(blueprintFilename.replaceAll(".yaml", ""));
         return buffer.toString().replace('.', '_').replaceAll(" ", "");
     }
-
 }