* ================================================================================
* Copyright (C) 2019 AT&T Intellectual Property. All rights
* reserved.
+ * Modifications Copyright (C) 2020 Huawei Technologies Co., Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
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.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.annotations.Expose;
-
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
-
-import org.hibernate.annotations.Type;
+import org.apache.commons.lang3.RandomStringUtils;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
+import org.onap.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
import org.onap.clamp.dao.model.jsontype.StringJsonUserType;
import org.onap.clamp.loop.Loop;
+import org.onap.clamp.loop.service.Service;
+import org.onap.clamp.loop.template.LoopElementModel;
+import org.onap.clamp.loop.template.PolicyModel;
import org.onap.clamp.policy.Policy;
-import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.Yaml;
@Entity
@Table(name = "operational_policies")
-@TypeDefs({ @TypeDef(name = "json", typeClass = StringJsonUserType.class) })
-public class OperationalPolicy implements Serializable, Policy {
+@TypeDefs({@TypeDef(name = "json", typeClass = StringJsonUserType.class)})
+public class OperationalPolicy extends Policy implements Serializable {
/**
* The serial version ID.
*/
@Column(nullable = false, name = "name", unique = true)
private String name;
- @Expose
- @Type(type = "json")
- @Column(columnDefinition = "json", name = "configurations_json")
- private JsonObject configurationsJson;
-
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "loop_id", nullable = false)
private Loop loop;
+ /**
+ * Constructor for serialization.
+ */
public OperationalPolicy() {
- // Serialization
}
/**
* The constructor.
*
- * @param name
- * The name of the operational policy
- * @param loop
- * The loop that uses this operational policy
- * @param configurationsJson
- * The operational policy property in the format of json
+ * @param name The name of the operational policy
+ * @param configurationsJson The operational policy property in the format of
+ * json
+ * @param jsonRepresentation The jsonObject defining the json schema
+ * @param policyModel The policy model associated if any, can be null
+ * @param loopElementModel The loop element from which this instance is supposed to be created
+ * @param pdpGroup The Pdp Group info
+ * @param pdpSubgroup The Pdp Subgroup info
*/
- public OperationalPolicy(String name, Loop loop, JsonObject configurationsJson) {
+ public OperationalPolicy(String name, JsonObject configurationsJson,
+ JsonObject jsonRepresentation, PolicyModel policyModel,
+ LoopElementModel loopElementModel, String pdpGroup, String pdpSubgroup) {
this.name = name;
- this.loop = loop;
- this.configurationsJson = configurationsJson;
+ this.setPolicyModel(policyModel);
+ this.setConfigurationsJson(configurationsJson);
+ this.setPdpGroup(pdpGroup);
+ this.setPdpSubgroup(pdpSubgroup);
+ this.setLoopElementModel(loopElementModel);
+ this.setJsonRepresentation(jsonRepresentation);
+
}
- @Override
- public String getName() {
- return name;
+ /**
+ * Create an operational policy from a loop element model.
+ *
+ * @param loop The parent loop
+ * @param service The loop service
+ * @param loopElementModel The loop element model
+ * @param toscaConverter The tosca converter that must be used to create the Json representation
+ */
+ public OperationalPolicy(Loop loop, Service service, LoopElementModel loopElementModel,
+ ToscaConverterWithDictionarySupport toscaConverter) {
+ this(Policy.generatePolicyName("OPERATIONAL", service.getName(), service.getVersion(),
+ loopElementModel.getPolicyModels().first().getPolicyAcronym() + '_'
+ + loopElementModel.getPolicyModels().first().getVersion(),
+ RandomStringUtils.randomAlphanumeric(3)), new JsonObject(),
+ new JsonObject(), loopElementModel.getPolicyModels().first(), loopElementModel, null, null);
+ this.setLoop(loop);
+ this.updateJsonRepresentation(toscaConverter, service);
+ }
+
+ /**
+ * Create an operational policy from a policy model.
+ *
+ * @param loop The parent loop
+ * @param service The loop service
+ * @param policyModel The policy model
+ * @param toscaConverter The tosca converter that must be used to create the Json representation
+ */
+ public OperationalPolicy(Loop loop, Service service, PolicyModel policyModel,
+ ToscaConverterWithDictionarySupport toscaConverter) {
+ this(Policy.generatePolicyName("OPERATIONAL", service.getName(), service.getVersion(),
+ policyModel.getPolicyAcronym() + '_' + policyModel.getVersion(),
+ RandomStringUtils.randomAlphanumeric(3)),
+ new JsonObject(),
+ new JsonObject(), policyModel, null, null, null);
+ this.setLoop(loop);
+ this.updateJsonRepresentation(toscaConverter, service);
}
public void setLoop(Loop loopName) {
}
@Override
- public JsonObject getJsonRepresentation() {
- return configurationsJson;
+ public String getName() {
+ return name;
}
- public JsonObject getConfigurationsJson() {
- return configurationsJson;
+ /**
+ * name setter.
+ *
+ * @param name the name to set
+ */
+ @Override
+ public void setName(String name) {
+ this.name = name;
}
- public void setConfigurationsJson(JsonObject configurationsJson) {
- this.configurationsJson = configurationsJson;
+ @Override
+ public void updateJsonRepresentation(ToscaConverterWithDictionarySupport toscaConverter, Service serviceModel) {
+ {
+ this.setJsonRepresentation(new JsonObject());
+ if (this.getPolicyModel() == null) {
+ return;
+ }
+
+ // Generic Case
+ this.setJsonRepresentation(toscaConverter.convertToscaToJsonSchemaObject(
+ this.getPolicyModel().getPolicyModelTosca(),
+ this.getPolicyModel().getPolicyModelType(), serviceModel));
+
+ }
}
@Override
if (other.name != null) {
return false;
}
- } else if (!name.equals(other.name)) {
- return false;
+ } else {
+ if (!name.equals(other.name)) {
+ return false;
+ }
}
return true;
}
- public String createPolicyPayloadYaml() {
- JsonObject policyPayloadResult = new JsonObject();
-
- policyPayloadResult.addProperty("tosca_definitions_version", "tosca_simple_yaml_1_0_0");
-
- JsonObject topologyTemplateNode = new JsonObject();
- policyPayloadResult.add("topology_template", topologyTemplateNode);
-
- JsonArray policiesArray = new JsonArray();
- topologyTemplateNode.add("policies", policiesArray);
-
- JsonObject operationalPolicy = new JsonObject();
- policiesArray.add(operationalPolicy);
-
- JsonObject operationalPolicyDetails = new JsonObject();
- operationalPolicy.add(this.name, operationalPolicyDetails);
- operationalPolicyDetails.addProperty("type", "onap.policies.controlloop.Operational");
- operationalPolicyDetails.addProperty("version", "1.0.0");
-
- JsonObject metadata = new JsonObject();
- operationalPolicyDetails.add("metadata", metadata);
- metadata.addProperty("policy-id", this.name);
-
- operationalPolicyDetails.add("properties", LegacyOperationalPolicy
- .reworkPayloadAttributes(this.configurationsJson.get("operational_policy").deepCopy()));
-
- Gson gson = new GsonBuilder().create();
-
- Map<?, ?> jsonMap = gson.fromJson(gson.toJson(policyPayloadResult), Map.class);
-
- DumperOptions options = new DumperOptions();
- options.setIndent(2);
- options.setPrettyFlow(true);
- options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
-
- return (new Yaml(options)).dump(jsonMap);
- }
-
@Override
public String createPolicyPayload() throws UnsupportedEncodingException {
+ return super.createPolicyPayload();
- // Now using the legacy payload fo Dublin
- JsonObject payload = new JsonObject();
- payload.addProperty("policy-id", this.getName());
- payload.addProperty("content", URLEncoder.encode(
- LegacyOperationalPolicy.createPolicyPayloadYamlLegacy(this.configurationsJson.get("operational_policy")),
- StandardCharsets.UTF_8.toString()));
- String opPayload = new GsonBuilder().setPrettyPrinting().create().toJson(payload);
- logger.info("Operational policy payload: " + opPayload);
- return opPayload;
- }
-
- /**
- * Return a map containing all Guard policies indexed by Guard policy Name.
- *
- * @return The Guards map
- */
- public Map<String, String> createGuardPolicyPayloads() {
- Map<String, String> result = new HashMap<>();
-
- JsonElement guardsList = this.getConfigurationsJson().get("guard_policies");
- if (guardsList != null) {
- for (Entry<String, JsonElement> guardElem : guardsList.getAsJsonObject().entrySet()) {
- JsonObject guard = new JsonObject();
- guard.addProperty("policy-id", guardElem.getKey());
- guard.add("content", guardElem.getValue());
- result.put(guardElem.getKey(), new GsonBuilder().create().toJson(guard));
- }
- }
- logger.info("Guard policy payload: " + result);
- return result;
}
-
}