import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
-import com.google.gson.JsonSyntaxException;
import com.google.gson.annotations.Expose;
import java.io.IOException;
import java.io.Serializable;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
+import org.apache.commons.lang3.RandomStringUtils;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
-import org.onap.clamp.clds.tosca.update.UnknownComponentException;
+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;
@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 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, PolicyModel policyModel,
+ public OperationalPolicy(String name, JsonObject configurationsJson,
+ JsonObject jsonRepresentation, PolicyModel policyModel,
LoopElementModel loopElementModel, String pdpGroup, String pdpSubgroup) {
this.name = name;
- this.loop = loop;
this.setPolicyModel(policyModel);
this.setConfigurationsJson(configurationsJson);
this.setPdpGroup(pdpGroup);
this.setPdpSubgroup(pdpSubgroup);
this.setLoopElementModel(loopElementModel);
- this.setJsonRepresentation(this.generateJsonRepresentation(policyModel));
+ this.setJsonRepresentation(jsonRepresentation);
}
- private JsonObject generateJsonRepresentation(PolicyModel policyModel) {
- JsonObject jsonReturned = new JsonObject();
- if (policyModel == null) {
- return new JsonObject();
- }
- try {
- if (isLegacy()) {
- // Op policy Legacy case
- LegacyOperationalPolicy.preloadConfiguration(jsonReturned, loop);
- jsonReturned =
- OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(loop.getModelService());
- } else {
- // Generic Case
- jsonReturned = Policy.generateJsonRepresentationFromToscaModel(policyModel.getPolicyModelTosca(),
- policyModel.getPolicyModelType());
- }
- } catch (UnknownComponentException | IOException | NullPointerException e) {
- logger.error("Unable to generate the operational policy Schema ... ", e);
- }
- return jsonReturned;
+ /**
+ * 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(),
+ RandomStringUtils.randomAlphanumeric(3), RandomStringUtils.randomAlphanumeric(3)), new JsonObject(),
+ new JsonObject(), loopElementModel.getPolicyModels().first(), loopElementModel, null, null);
+ this.setLoop(loop);
+ this.updateJsonRepresentation(toscaConverter);
+ }
+
+ /**
+ * 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
+ * @throws IOException In case of issues with the legacy files (generated from resource files
+ */
+ public OperationalPolicy(Loop loop, Service service, PolicyModel policyModel,
+ ToscaConverterWithDictionarySupport toscaConverter) throws IOException {
+ this(Policy.generatePolicyName("OPERATIONAL", service.getName(), service.getVersion(),
+ RandomStringUtils.randomAlphanumeric(3), RandomStringUtils.randomAlphanumeric(3)), new JsonObject(),
+ new JsonObject(), policyModel, null, null, null);
+ this.setLoop(loop);
+ this.updateJsonRepresentation(toscaConverter);
}
public void setLoop(Loop loopName) {
this.name = name;
}
+ @Override
+ public void updateJsonRepresentation(ToscaConverterWithDictionarySupport toscaConverter) {
+ {
+ this.setJsonRepresentation(new JsonObject());
+ if (this.getPolicyModel() == null) {
+ return;
+ }
+ if (this.isLegacy()) {
+ // Op policy Legacy case
+ LegacyOperationalPolicy.preloadConfiguration(this.getConfigurationsJson(), this.loop);
+ this.setJsonRepresentation(OperationalPolicyRepresentationBuilder
+ .generateOperationalPolicySchema(this.loop.getModelService()));
+ }
+ else {
+ // Generic Case
+ this.setJsonRepresentation(toscaConverter.convertToscaToJsonSchemaObject(
+ this.getPolicyModel().getPolicyModelTosca(),
+ this.getPolicyModel().getPolicyModelType()));
+ }
+ }
+ }
+
@Override
public int hashCode() {
final int prime = 31;
if (other.name != null) {
return false;
}
- } else if (!name.equals(other.name)) {
+ }
+ else if (!name.equals(other.name)) {
return false;
}
return true;
String opPayload = new GsonBuilder().setPrettyPrinting().create().toJson(payload);
logger.info("Operational policy payload: " + opPayload);
return opPayload;
- } else {
+ }
+ else {
return super.createPolicyPayload();
}
}
if (guardsList != null) {
for (JsonElement guardElem : guardsList.getAsJsonArray()) {
result.put(guardElem.getAsJsonObject().get("policy-id").getAsString(),
- new GsonBuilder().create().toJson(guardElem));
+ new GsonBuilder().create().toJson(guardElem));
}
}
}
logger.info("Guard policy payload: " + result);
return result;
}
-
- /**
- * Regenerate the Operational Policy Json Representation.
- */
- public void updateJsonRepresentation() {
- try {
- this.setJsonRepresentation(
- OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(loop.getModelService()));
- } catch (JsonSyntaxException | IOException | NullPointerException e) {
- logger.error("Unable to generate the operational policy Schema ... ", e);
- this.setJsonRepresentation(new JsonObject());
- }
- }
}