X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Fpolicy%2FPolicy.java;h=3b220646111a41df0e207018573cc4293509e80c;hb=723de7f63f0951d0cfe7a23956cf9d00128809b1;hp=c656820596ac9459955accfdc27c0e8a74848646;hpb=b8587538b6d4495977ebde95c21ba659136f43da;p=clamp.git diff --git a/src/main/java/org/onap/clamp/policy/Policy.java b/src/main/java/org/onap/clamp/policy/Policy.java index c6568205..3b220646 100644 --- a/src/main/java/org/onap/clamp/policy/Policy.java +++ b/src/main/java/org/onap/clamp/policy/Policy.java @@ -23,28 +23,39 @@ 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.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.common.AuditEntity; import org.onap.clamp.loop.template.LoopElementModel; +import org.onap.clamp.loop.template.PolicyModel; +import org.yaml.snakeyaml.Yaml; @MappedSuperclass -@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) }) +@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)}) public abstract class Policy extends AuditEntity { + @Transient + private static final EELFLogger logger = EELFManager.getInstance().getLogger(Policy.class); + @Expose @Type(type = "json") @Column(columnDefinition = "json", name = "json_representation", nullable = false) @@ -55,6 +66,10 @@ public abstract class Policy extends AuditEntity { @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") @@ -64,24 +79,87 @@ public abstract class Policy extends AuditEntity { @Column(name = "pdp_group") private String pdpGroup; - public abstract String createPolicyPayload() throws UnsupportedEncodingException; + @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 map = + new Yaml().load(this.getPolicyModel() != null ? this.getPolicyModel().getPolicyModelTosca() : ""); + JSONObject jsonObject = new JSONObject(map); + return new Gson().fromJson(jsonObject.toString(), JsonObject.class); + } + + private String getModelPropertyNameFromTosca(JsonObject object, String policyModelType) { + return object.getAsJsonObject("policy_types").getAsJsonObject(policyModelType) + .getAsJsonObject( + "properties") + .keySet().toArray(new String[1])[0]; + } + + /** + * 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("version", this.getPolicyModel().getVersion()); + + JsonObject policyMetadata = new JsonObject(); + policyDetails.add("metadata", policyMetadata); + policyMetadata.addProperty("policy-id", this.getName()); + + JsonObject policyProperties = new JsonObject(); + policyDetails.add("properties", policyProperties); + policyProperties + .add(this.getModelPropertyNameFromTosca(toscaJson, this.getPolicyModel().getPolicyModelType()), + 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() { @@ -90,16 +168,34 @@ public abstract class Policy extends AuditEntity { /** * jsonRepresentation setter. - * + * * @param jsonRepresentation The jsonRepresentation to set */ public void setJsonRepresentation(JsonObject jsonRepresentation) { this.jsonRepresentation = jsonRepresentation; } + /** + * 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() { @@ -108,7 +204,7 @@ public abstract class Policy extends AuditEntity { /** * configurationsJson setter. - * + * * @param configurationsJson the configurationsJson to set */ public void setConfigurationsJson(JsonObject configurationsJson) { @@ -117,7 +213,7 @@ public abstract class Policy extends AuditEntity { /** * loopElementModel getter. - * + * * @return the loopElementModel */ public LoopElementModel getLoopElementModel() { @@ -126,7 +222,7 @@ public abstract class Policy extends AuditEntity { /** * loopElementModel setter. - * + * * @param loopElementModel the loopElementModel to set */ public void setLoopElementModel(LoopElementModel loopElementModel) { @@ -135,7 +231,7 @@ public abstract class Policy extends AuditEntity { /** * pdpGroup getter. - * + * * @return the pdpGroup */ public String getPdpGroup() { @@ -144,13 +240,31 @@ public abstract class Policy extends AuditEntity { /** * 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. * @@ -162,11 +276,10 @@ public abstract class Policy extends AuditEntity { * @return The generated policy name */ public static String generatePolicyName(String policyType, String serviceName, String serviceVersion, - String resourceName, String blueprintFilename) { + String resourceName, String blueprintFilename) { StringBuilder buffer = new StringBuilder(policyType).append("_").append(serviceName).append("_v") .append(serviceVersion).append("_").append(resourceName).append("_") .append(blueprintFilename.replaceAll(".yaml", "")); return buffer.toString().replace('.', '_').replaceAll(" ", ""); } - }