aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsebdet <sebastien.determe@intl.att.com>2020-03-16 11:04:34 -0700
committersebdet <sebastien.determe@intl.att.com>2020-03-16 14:00:24 -0700
commite916ac28ba46ff7cad64f1a3150b128ba4772c70 (patch)
tree66ec87f03dfd6eec52f0687183da9321db171094
parent82775724cf35060294388f84d2e7d2b0671ee838 (diff)
Rework the policy refresh
Rework the policy refresh for the new unique dialog policyModel Issue-ID: CLAMP-578 Signed-off-by: sebdet <sebastien.determe@intl.att.com> Change-Id: Ie8c91223e92c1e344d7ead5784ffea33d4f6a00f
-rw-r--r--src/main/java/org/onap/clamp/loop/Loop.java24
-rw-r--r--src/main/java/org/onap/clamp/loop/LoopController.java64
-rw-r--r--src/main/java/org/onap/clamp/loop/LoopService.java27
-rw-r--r--src/main/java/org/onap/clamp/loop/template/LoopElementModel.java8
-rw-r--r--src/main/java/org/onap/clamp/policy/Policy.java8
-rw-r--r--src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java23
-rw-r--r--src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java30
-rw-r--r--src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java75
-rw-r--r--src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java60
-rw-r--r--src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java19
-rw-r--r--src/main/resources/clds/camel/rest/clamp-api-v2.xml53
-rw-r--r--src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java2
-rw-r--r--ui-react/src/api/LoopCache.js4
-rw-r--r--ui-react/src/api/LoopCache.test.js11
-rw-r--r--ui-react/src/api/LoopService.js27
-rw-r--r--ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js2
16 files changed, 259 insertions, 178 deletions
diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java
index dd6fbf05..605e42fd 100644
--- a/src/main/java/org/onap/clamp/loop/Loop.java
+++ b/src/main/java/org/onap/clamp/loop/Loop.java
@@ -23,11 +23,8 @@
package org.onap.clamp.loop;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
import com.google.gson.JsonObject;
import com.google.gson.annotations.Expose;
-import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.HashSet;
@@ -77,9 +74,6 @@ public class Loop extends AuditEntity implements Serializable {
*/
private static final long serialVersionUID = -286522707701388642L;
- @Transient
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(Loop.class);
-
@Id
@Expose
@Column(nullable = false, name = "name", unique = true)
@@ -170,23 +164,13 @@ public class Loop extends AuditEntity implements Serializable {
this.setModelService(loopTemplate.getModelService());
loopTemplate.getLoopElementModelsUsed().forEach(element -> {
if (LoopElementModel.MICRO_SERVICE_TYPE.equals(element.getLoopElementModel().getLoopElementType())) {
- try {
- this.addMicroServicePolicy((MicroServicePolicy) element.getLoopElementModel()
- .createPolicyInstance(this, toscaConverter));
- } catch (IOException e) {
- logger.error("Exception caught when creating the microservice policy instance of the loop "
- + "instance", e);
- }
+ this.addMicroServicePolicy((MicroServicePolicy) element.getLoopElementModel()
+ .createPolicyInstance(this, toscaConverter));
}
else if (LoopElementModel.OPERATIONAL_POLICY_TYPE
.equals(element.getLoopElementModel().getLoopElementType())) {
- try {
- this.addOperationalPolicy((OperationalPolicy) element.getLoopElementModel()
- .createPolicyInstance(this, toscaConverter));
- } catch (IOException e) {
- logger.error("Exception caught when creating the operational policy instance of the loop instance",
- e);
- }
+ this.addOperationalPolicy((OperationalPolicy) element.getLoopElementModel()
+ .createPolicyInstance(this, toscaConverter));
}
});
}
diff --git a/src/main/java/org/onap/clamp/loop/LoopController.java b/src/main/java/org/onap/clamp/loop/LoopController.java
index d230eb97..9c2c71f5 100644
--- a/src/main/java/org/onap/clamp/loop/LoopController.java
+++ b/src/main/java/org/onap/clamp/loop/LoopController.java
@@ -29,9 +29,12 @@ import com.google.gson.reflect.TypeToken;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.List;
+import org.onap.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
import org.onap.clamp.clds.util.JsonUtils;
import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.microservice.MicroServicePolicyService;
import org.onap.clamp.policy.operational.OperationalPolicy;
+import org.onap.clamp.policy.operational.OperationalPolicyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -39,13 +42,36 @@ import org.springframework.stereotype.Controller;
public class LoopController {
private final LoopService loopService;
- private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken<List<OperationalPolicy>>() {}.getType();
- private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken<List<MicroServicePolicy>>() {}.getType();
+ private final ToscaConverterWithDictionarySupport toscaConverter;
+ private final OperationalPolicyService operationalPolicyService;
+
+ private final MicroServicePolicyService microServicePolicyService;
+
+ private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken<List<OperationalPolicy>>() {
+ }.getType();
+
+ private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken<List<MicroServicePolicy>>() {
+ }.getType();
+
+
+ /**
+ * Constructor.
+ *
+ * @param loopService loopService
+ * @param operationalPolicyService operationalPolicyService
+ * @param microServicePolicyService microServicePolicyService
+ * @param toscaConverter toscaConverter
+ */
@Autowired
- public LoopController(LoopService loopService) {
+ public LoopController(LoopService loopService, OperationalPolicyService operationalPolicyService,
+ MicroServicePolicyService microServicePolicyService,
+ ToscaConverterWithDictionarySupport toscaConverter) {
this.loopService = loopService;
+ this.toscaConverter = toscaConverter;
+ this.operationalPolicyService = operationalPolicyService;
+ this.microServicePolicyService = microServicePolicyService;
}
public Loop createLoop(String loopName, String templateName) {
@@ -156,10 +182,34 @@ public class LoopController {
/**
* Refresh the Operational Policy Json representation of the loop.
*
- * @param loopName The loop name
- * @return The refreshed Loop
+ * @param loop The loop
+ * @param operationalPolicyName The operational policy name that needs a refresh
+ * @return The loop object
+ */
+ public Loop refreshOperationalPolicyJsonRepresentation(Loop loop, String operationalPolicyName) {
+ for (OperationalPolicy operationalPolicy : loop.getOperationalPolicies()) {
+ if (operationalPolicy.getName().equals(operationalPolicyName)) {
+ this.operationalPolicyService
+ .refreshOperationalPolicyJsonRepresentation(operationalPolicy, toscaConverter);
+ }
+ }
+ return loop;
+ }
+
+ /**
+ * Refresh the Config Policy Json representation of the loop.
+ *
+ * @param loop The loop
+ * @param microServicePolicyName The microservice policy name that needs a refresh
+ * @return The loop object
*/
- public Loop refreshOpPolicyJsonRepresentation(String loopName) {
- return loopService.refreshOpPolicyJsonRepresentation(loopName);
+ public Loop refreshMicroServicePolicyJsonRepresentation(Loop loop, String microServicePolicyName) {
+ for (MicroServicePolicy microServicePolicy : loop.getMicroServicePolicies()) {
+ if (microServicePolicy.getName().equals(microServicePolicyName)) {
+ this.microServicePolicyService
+ .refreshMicroServicePolicyJsonRepresentation(microServicePolicy, toscaConverter);
+ }
+ }
+ return loop;
}
}
diff --git a/src/main/java/org/onap/clamp/loop/LoopService.java b/src/main/java/org/onap/clamp/loop/LoopService.java
index acd125b7..af1f58ba 100644
--- a/src/main/java/org/onap/clamp/loop/LoopService.java
+++ b/src/main/java/org/onap/clamp/loop/LoopService.java
@@ -122,15 +122,15 @@ public class LoopService {
return null;
}
loop.addOperationalPolicy(
- new OperationalPolicy(loop,loop.getModelService(), policyModel, toscaConverter));
+ new OperationalPolicy(loop, loop.getModelService(), policyModel, toscaConverter));
return loopsRepository.saveAndFlush(loop);
}
/**
* This method remove an operational policy to a loop instance.
*
- * @param loopName The loop name
- * @param policyType The policy model type
+ * @param loopName The loop name
+ * @param policyType The policy model type
* @param policyVersion The policy model version
* @return The loop modified
*/
@@ -141,8 +141,8 @@ public class LoopService {
return null;
}
for (OperationalPolicy opPolicy : loop.getOperationalPolicies()) {
- if (opPolicy.getPolicyModel().getPolicyModelType().equals(policyType) &&
- opPolicy.getPolicyModel().getVersion().equals(policyVersion)) {
+ if (opPolicy.getPolicyModel().getPolicyModelType().equals(policyType)
+ && opPolicy.getPolicyModel().getVersion().equals(policyVersion)) {
loop.removeOperationalPolicy(opPolicy);
break;
}
@@ -179,20 +179,5 @@ public class LoopService {
return loopsRepository.findById(loopName)
.orElseThrow(() -> new EntityNotFoundException("Couldn't find closed loop named: " + loopName));
}
-
- /**
- * Api to refresh the Operational Policy UI window.
- *
- * @param loopName The loop Name
- * @return The refreshed loop object
- */
- public Loop refreshOpPolicyJsonRepresentation(String loopName) {
- Loop loop = findClosedLoopByName(loopName);
- Set<OperationalPolicy> policyList = loop.getOperationalPolicies();
- for (OperationalPolicy policy : policyList) {
- policy.updateJsonRepresentation();
- }
- loop.setOperationalPolicies(policyList);
- return loopsRepository.save(loop);
- }
}
+
diff --git a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java
index dfdfc42b..4a46a954 100644
--- a/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java
+++ b/src/main/java/org/onap/clamp/loop/template/LoopElementModel.java
@@ -24,7 +24,6 @@
package org.onap.clamp.loop.template;
import com.google.gson.annotations.Expose;
-import java.io.IOException;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
@@ -251,16 +250,15 @@ public class LoopElementModel extends AuditEntity implements Serializable {
* Create a policy instance from the current loop element model.
*
* @return A Policy object.
- * @throws IOException in case of failure when creating an operational policy
*/
- public Policy createPolicyInstance(Loop loop, ToscaConverterWithDictionarySupport toscaConverter)
- throws IOException {
+ 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 {
+ }
+ else {
return null;
}
}
diff --git a/src/main/java/org/onap/clamp/policy/Policy.java b/src/main/java/org/onap/clamp/policy/Policy.java
index 3b220646..87d36f3d 100644
--- a/src/main/java/org/onap/clamp/policy/Policy.java
+++ b/src/main/java/org/onap/clamp/policy/Policy.java
@@ -43,6 +43,7 @@ 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.template.LoopElementModel;
@@ -176,6 +177,13 @@ public abstract class Policy extends AuditEntity {
}
/**
+ * Regenerate the Policy Json Representation.
+ *
+ * @param toscaConverter The tosca converter required to regenerate the json schema
+ */
+ public abstract void updateJsonRepresentation(ToscaConverterWithDictionarySupport toscaConverter);
+
+ /**
* policyModel getter.
*
* @return the policyModel
diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
index 321c12f6..47b3a4ff 100644
--- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
+++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java
@@ -23,8 +23,6 @@
package org.onap.clamp.policy.microservice;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
import com.google.gson.JsonObject;
import com.google.gson.annotations.Expose;
import java.io.Serializable;
@@ -36,7 +34,6 @@ import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
-import javax.persistence.Transient;
import org.apache.commons.lang3.RandomStringUtils;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
@@ -57,9 +54,6 @@ public class MicroServicePolicy extends Policy implements Serializable {
*/
private static final long serialVersionUID = 6271238288583332616L;
- @Transient
- private static final EELFLogger logger = EELFManager.getInstance().getLogger(MicroServicePolicy.class);
-
@Expose
@Id
@Column(nullable = false, name = "name", unique = true)
@@ -126,20 +120,19 @@ public class MicroServicePolicy extends Policy implements Serializable {
/**
* Constructor with tosca converter.
*
- * @param loop The loop instance
- * @param service The service model object
+ * @param loop The loop instance
+ * @param service The service model object
* @param loopElementModel The loop element model from which this microservice instance is created
- * @param toscaConverter The tosca converter that will used to convert the tosca policy model
+ * @param toscaConverter The tosca converter that will used to convert the tosca policy model
*/
public MicroServicePolicy(Loop loop, Service service, LoopElementModel loopElementModel,
ToscaConverterWithDictionarySupport toscaConverter) {
this(Policy.generatePolicyName("MICROSERVICE", service.getName(), service.getVersion(),
RandomStringUtils.randomAlphanumeric(3), RandomStringUtils.randomAlphanumeric(3)),
loopElementModel.getPolicyModels().first(), false,
- toscaConverter.convertToscaToJsonSchemaObject(
- loopElementModel.getPolicyModels().first().getPolicyModelTosca(),
- loopElementModel.getPolicyModels().first().getPolicyModelType()),
+ new JsonObject(),
loopElementModel, null, null);
+ this.updateJsonRepresentation(toscaConverter);
}
@Override
@@ -157,6 +150,12 @@ public class MicroServicePolicy extends Policy implements Serializable {
this.name = name;
}
+ @Override
+ public void updateJsonRepresentation(ToscaConverterWithDictionarySupport toscaConverter) {
+ toscaConverter.convertToscaToJsonSchemaObject(this.getPolicyModel().getPolicyModelTosca(),
+ this.getPolicyModel().getPolicyModelType());
+ }
+
public Boolean getShared() {
return shared;
}
diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java
index 9bc641c6..0631380f 100644
--- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java
+++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicyService.java
@@ -26,6 +26,7 @@ package org.onap.clamp.policy.microservice;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
+import org.onap.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
import org.onap.clamp.loop.Loop;
import org.onap.clamp.policy.PolicyService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -34,11 +35,11 @@ import org.springframework.stereotype.Service;
@Service
public class MicroServicePolicyService implements PolicyService<MicroServicePolicy> {
- private final MicroServicePolicyRepository repository;
+ private final MicroServicePolicyRepository microServiceRepository;
@Autowired
- public MicroServicePolicyService(MicroServicePolicyRepository repository) {
- this.repository = repository;
+ public MicroServicePolicyService(MicroServicePolicyRepository microServiceRepository) {
+ this.microServiceRepository = microServiceRepository;
}
@Override
@@ -49,7 +50,7 @@ public class MicroServicePolicyService implements PolicyService<MicroServicePoli
@Override
public boolean isExisting(String policyName) {
- return repository.existsById(policyName);
+ return microServiceRepository.existsById(policyName);
}
/**
@@ -60,8 +61,9 @@ public class MicroServicePolicyService implements PolicyService<MicroServicePoli
* @return The updated MicroService policy
*/
public MicroServicePolicy getAndUpdateMicroServicePolicy(Loop loop, MicroServicePolicy policy) {
- return repository.save(
- repository.findById(policy.getName()).map(p -> updateMicroservicePolicyProperties(p, policy, loop))
+ return microServiceRepository.save(
+ microServiceRepository
+ .findById(policy.getName()).map(p -> updateMicroservicePolicyProperties(p, policy, loop))
.orElse(new MicroServicePolicy(policy.getName(), policy.getPolicyModel(),
policy.getShared(), policy.getJsonRepresentation(), null, policy.getPdpGroup(),
policy.getPdpSubgroup())));
@@ -89,6 +91,20 @@ public class MicroServicePolicyService implements PolicyService<MicroServicePoli
String deploymentUrl) {
microServicePolicy.setDcaeDeploymentId(deploymentId);
microServicePolicy.setDcaeDeploymentStatusUrl(deploymentUrl);
- repository.save(microServicePolicy);
+ microServiceRepository.save(microServicePolicy);
+ }
+
+
+ /**
+ * Api to refresh the MicroService Policy UI window.
+ *
+ * @param microServicePolicy The micro Service policy object
+ * @param toscaConverter the tosca converter required to convert the tosca model to json schema
+ */
+ public void refreshMicroServicePolicyJsonRepresentation(MicroServicePolicy microServicePolicy,
+ ToscaConverterWithDictionarySupport toscaConverter) {
+ microServicePolicy.updateJsonRepresentation(toscaConverter);
+ this.microServiceRepository.saveAndFlush(microServicePolicy);
+
}
}
diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java
index 528d695c..492c9b9e 100644
--- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java
+++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java
@@ -31,7 +31,6 @@ import com.google.gson.GsonBuilder;
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;
@@ -120,15 +119,14 @@ public class OperationalPolicy extends Policy implements Serializable {
* @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
- * @throws IOException In case of issues with the legacy files (generated from resource files
*/
public OperationalPolicy(Loop loop, Service service, LoopElementModel loopElementModel,
- ToscaConverterWithDictionarySupport toscaConverter) throws IOException {
+ 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.setJsonRepresentation(generateJsonRepresentation(this, toscaConverter));
+ this.updateJsonRepresentation(toscaConverter);
}
/**
@@ -146,39 +144,7 @@ public class OperationalPolicy extends Policy implements Serializable {
RandomStringUtils.randomAlphanumeric(3), RandomStringUtils.randomAlphanumeric(3)), new JsonObject(),
new JsonObject(), policyModel, null, null, null);
this.setLoop(loop);
- this.setJsonRepresentation(generateJsonRepresentation(this, toscaConverter));
- }
-
- /**
- * This method can generate a Json representation (json schema) for an operational policy.
- * This is mainly to support a legacy case and a generic case.
- * For the legacy case the operational policy given is modified (configurationJson).
- *
- * @param operationalPolicy The operational policy
- * @param toscaConverter The tosca converter
- * @return The Json Object with Json schema
- */
- public static JsonObject generateJsonRepresentation(OperationalPolicy operationalPolicy,
- ToscaConverterWithDictionarySupport toscaConverter)
- throws IOException {
- JsonObject jsonReturned = new JsonObject();
- if (operationalPolicy.getPolicyModel() == null) {
- return new JsonObject();
- }
- if (operationalPolicy.isLegacy()) {
- // Op policy Legacy case
- LegacyOperationalPolicy.preloadConfiguration(operationalPolicy.getConfigurationsJson(), operationalPolicy.loop);
- jsonReturned = OperationalPolicyRepresentationBuilder
- .generateOperationalPolicySchema(operationalPolicy.loop.getModelService());
- }
- else {
- // Generic Case
- jsonReturned = toscaConverter.convertToscaToJsonSchemaObject(
- operationalPolicy.getPolicyModel().getPolicyModelTosca(),
- operationalPolicy.getPolicyModel().getPolicyModelType());
- }
-
- return jsonReturned;
+ this.updateJsonRepresentation(toscaConverter);
}
public void setLoop(Loop loopName) {
@@ -205,6 +171,28 @@ public class OperationalPolicy extends Policy implements Serializable {
}
@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;
int result = 1;
@@ -320,17 +308,4 @@ public class OperationalPolicy extends Policy implements Serializable {
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());
- }
- }
}
diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java
index c88c1b98..75598519 100644
--- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java
+++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java
@@ -24,10 +24,11 @@
package org.onap.clamp.policy.operational;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
-import com.google.gson.JsonSyntaxException;
import java.io.IOException;
import java.util.Map.Entry;
import org.onap.clamp.clds.util.JsonUtils;
@@ -36,6 +37,9 @@ import org.onap.clamp.loop.service.Service;
public class OperationalPolicyRepresentationBuilder {
+ private static final EELFLogger logger =
+ EELFManager.getInstance().getLogger(OperationalPolicyRepresentationBuilder.class);
+
/**
* This method generates the operational policy json representation that will be
* used by ui for rendering. It uses the model (VF and VFModule) defined in the
@@ -44,34 +48,38 @@ public class OperationalPolicyRepresentationBuilder {
*
* @param modelJson The loop model json
* @return The json representation
- * @throws JsonSyntaxException If the schema template cannot be parsed
- * @throws IOException In case of issue when opening the schema template
*/
- public static JsonObject generateOperationalPolicySchema(Service modelJson)
- throws JsonSyntaxException, IOException {
- JsonObject jsonSchema = JsonUtils.GSON.fromJson(
- ResourceFileUtil.getResourceAsString("clds/json-schema/operational_policies/operational_policy.json"),
- JsonObject.class);
- jsonSchema.get("properties").getAsJsonObject()
- .get("operational_policy").getAsJsonObject().get("properties").getAsJsonObject().get("policies")
- .getAsJsonObject().get("items").getAsJsonObject().get("properties").getAsJsonObject().get("target")
- .getAsJsonObject().get("anyOf").getAsJsonArray().addAll(createAnyOfArray(modelJson));
-
- // update CDS recipe and payload information to schema
- JsonArray actors = jsonSchema.get("properties").getAsJsonObject()
- .get("operational_policy").getAsJsonObject().get("properties").getAsJsonObject().get("policies")
- .getAsJsonObject().get("items").getAsJsonObject().get("properties").getAsJsonObject().get("actor")
- .getAsJsonObject().get("anyOf").getAsJsonArray();
-
- for (JsonElement actor : actors) {
- if ("CDS".equalsIgnoreCase(actor.getAsJsonObject().get("title").getAsString())) {
- actor.getAsJsonObject().get("properties").getAsJsonObject().get("type").getAsJsonObject()
- .get("anyOf").getAsJsonArray()
- .addAll(createAnyOfArrayForCdsRecipe(modelJson.getResourceDetails()));
+ public static JsonObject generateOperationalPolicySchema(Service modelJson) {
+
+ JsonObject jsonSchema = null;
+ try {
+ jsonSchema = JsonUtils.GSON.fromJson(
+ ResourceFileUtil
+ .getResourceAsString("clds/json-schema/operational_policies/operational_policy.json"),
+ JsonObject.class);
+ jsonSchema.get("properties").getAsJsonObject()
+ .get("operational_policy").getAsJsonObject().get("properties").getAsJsonObject().get("policies")
+ .getAsJsonObject().get("items").getAsJsonObject().get("properties").getAsJsonObject().get("target")
+ .getAsJsonObject().get("anyOf").getAsJsonArray().addAll(createAnyOfArray(modelJson));
+
+ // update CDS recipe and payload information to schema
+ JsonArray actors = jsonSchema.get("properties").getAsJsonObject()
+ .get("operational_policy").getAsJsonObject().get("properties").getAsJsonObject().get("policies")
+ .getAsJsonObject().get("items").getAsJsonObject().get("properties").getAsJsonObject().get("actor")
+ .getAsJsonObject().get("anyOf").getAsJsonArray();
+
+ for (JsonElement actor : actors) {
+ if ("CDS".equalsIgnoreCase(actor.getAsJsonObject().get("title").getAsString())) {
+ actor.getAsJsonObject().get("properties").getAsJsonObject().get("type").getAsJsonObject()
+ .get("anyOf").getAsJsonArray()
+ .addAll(createAnyOfArrayForCdsRecipe(modelJson.getResourceDetails()));
+ }
}
+ return jsonSchema;
+ } catch (IOException e) {
+ logger.error("Unable to generate the json schema because of an exception",e);
+ return new JsonObject();
}
-
- return jsonSchema;
}
private static JsonObject createSchemaProperty(String title, String type, String defaultValue, String readOnlyFlag,
diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java
index ad6cbd94..9c0cbe99 100644
--- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java
+++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyService.java
@@ -23,9 +23,12 @@
package org.onap.clamp.policy.operational;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
+import org.onap.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport;
import org.onap.clamp.loop.Loop;
import org.onap.clamp.loop.template.PolicyModelsRepository;
import org.onap.clamp.policy.PolicyService;
@@ -39,6 +42,8 @@ public class OperationalPolicyService implements PolicyService<OperationalPolicy
private final PolicyModelsRepository policyModelsRepository;
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(OperationalPolicyService.class);
+
@Autowired
public OperationalPolicyService(OperationalPolicyRepository repository,
PolicyModelsRepository policyModelsRepository) {
@@ -54,7 +59,7 @@ public class OperationalPolicyService implements PolicyService<OperationalPolicy
operationalPolicyRepository
.findById(policy.getName())
.map(p -> setConfiguration(p, policy))
- .orElse(initializeMissingFields(loop,policy)))
+ .orElse(initializeMissingFields(loop, policy)))
.collect(Collectors.toSet());
}
@@ -74,4 +79,16 @@ public class OperationalPolicyService implements PolicyService<OperationalPolicy
policy.setPdpSubgroup(newPolicy.getPdpSubgroup());
return policy;
}
+
+ /**
+ * Api to refresh the Operational Policy UI window.
+ *
+ * @param operationalPolicy The operational policy object
+ * @param toscaConverter the tosca converter required to convert the tosca model to json schema
+ */
+ public void refreshOperationalPolicyJsonRepresentation(OperationalPolicy operationalPolicy,
+ ToscaConverterWithDictionarySupport toscaConverter) {
+ operationalPolicy.updateJsonRepresentation(toscaConverter);
+ this.operationalPolicyRepository.saveAndFlush(operationalPolicy);
+ }
}
diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
index d1c191dc..d81c164a 100644
--- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml
+++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml
@@ -207,24 +207,59 @@
</doTry>
</route>
</put>
- <put uri="/v2/loop/refreshOpPolicyJsonSchema/{loopName}"
+ <put uri="/v2/loop/refreshMicroServicePolicyJsonSchema/{loopName}/{microServicePolicyName}"
+ outType="org.onap.clamp.loop.Loop" produces="application/json">
+ <route>
+ <removeHeaders pattern="*" excludePattern="loopName|microServicePolicyName" />
+ <doTry>
+ <log loggingLevel="INFO"
+ message="Refresh Micro Service Policy UI for loop: ${header.loopName} and ${header.microServicePolicyName}" />
+ <to
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'REFRESH Micro Service Policy UI request')" />
+ <to
+ uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
+ <to uri="direct:load-loop" />
+ <to
+ uri="bean:org.onap.clamp.loop.LoopController?method=refreshMicroServicePolicyJsonRepresentation(${exchangeProperty[loopObject]},${header.microServicePolicyName}})" />
+ <log loggingLevel="INFO"
+ message="REFRESH Micro Service policy request successfully executed for loop: ${header.loopName}" />
+ <to
+ uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('REFRESH Micro Service policy request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+ <to
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+ <doCatch>
+ <exception>java.lang.Exception</exception>
+ <handled>
+ <constant>false</constant>
+ </handled>
+ <to
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+ <log loggingLevel="ERROR"
+ message="REFRESH Micro Service policy request failed for loop: ${header.loopName}" />
+ <to
+ uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('REFRESH Micro Service policy request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
+ </doCatch>
+ </doTry>
+ </route>
+ </put>
+ <put uri="/v2/loop/refreshOperationalPolicyJsonSchema/{loopName}/{operationalPolicyName}"
outType="org.onap.clamp.loop.Loop" produces="application/json">
<route>
- <removeHeaders pattern="*" excludePattern="loopName" />
+ <removeHeaders pattern="*" excludePattern="loopName|operationalPolicyName" />
<doTry>
<log loggingLevel="INFO"
- message="Refresh Operational Policy UI for loop: ${header.loopName}" />
+ message="Refresh Operational Policy UI for loop: ${header.loopName} and ${header.operationalPolicyName}" />
<to
- uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'REFRESH OP Policy UI request')" />
+ uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'REFRESH Operational Policy UI request')" />
<to
uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
<to uri="direct:load-loop" />
<to
- uri="bean:org.onap.clamp.loop.LoopController?method=refreshOpPolicyJsonRepresentation(${header.loopName})" />
+ uri="bean:org.onap.clamp.loop.LoopController?method=refreshOperationalPolicyJsonRepresentation(${exchangeProperty[loopObject]},${header.operationalPolicyName}})" />
<log loggingLevel="INFO"
- message="REFRESH request successfully executed for loop: ${header.loopName}" />
+ message="REFRESH operational policy request successfully executed for loop: ${header.loopName}" />
<to
- uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('REFRESH request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+ uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('REFRESH operational policy request successfully executed','INFO',${exchangeProperty[loopObject]})" />
<to
uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
<doCatch>
@@ -235,9 +270,9 @@
<to
uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
<log loggingLevel="ERROR"
- message="REFRESH request failed for loop: ${header.loopName}" />
+ message="REFRESH operational policy request failed for loop: ${header.loopName}" />
<to
- uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('REFRESH request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
+ uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('REFRESH operational policy request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
</doCatch>
</doTry>
</route>
diff --git a/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java
index 12ddbaa7..4e9b5620 100644
--- a/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java
+++ b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java
@@ -27,9 +27,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
-
import java.io.IOException;
-
import org.junit.Test;
import org.onap.clamp.clds.util.ResourceFileUtil;
import org.onap.clamp.loop.service.Service;
diff --git a/ui-react/src/api/LoopCache.js b/ui-react/src/api/LoopCache.js
index 5eaa79a6..c54337f2 100644
--- a/ui-react/src/api/LoopCache.js
+++ b/ui-react/src/api/LoopCache.js
@@ -70,10 +70,6 @@ export default class LoopCache {
return this.loopJsonCache["name"];
}
- getOperationalPolicyConfigurationJson() {
- return this.loopJsonCache["operationalPolicies"]["0"]["configurationsJson"];
- }
-
getOperationalPolicyJsonSchema() {
return this.loopJsonCache["operationalPolicies"]["0"]["jsonRepresentation"];
}
diff --git a/ui-react/src/api/LoopCache.test.js b/ui-react/src/api/LoopCache.test.js
index fc756814..4642ff52 100644
--- a/ui-react/src/api/LoopCache.test.js
+++ b/ui-react/src/api/LoopCache.test.js
@@ -30,17 +30,6 @@ describe('Verify LoopCache functions', () => {
expect(loopCache.getLoopName()).toBe("LOOP_Jbv1z_v1_0_ResourceInstanceName1_tca");
});
- it('getOperationalPolicyConfigurationJson', () => {
- const opPolicyConfig = {
- "guard_policies": {},
- "operational_policy": {
- "controlLoop": {},
- "policies": []
- }
- };
- expect(loopCache.getOperationalPolicyConfigurationJson()).toStrictEqual(opPolicyConfig);
- });
-
it('getOperationalPolicies', () => {
const opPolicy = [{
"name": "OPERATIONAL_h2NMX_v1_0_ResourceInstanceName1_tca",
diff --git a/ui-react/src/api/LoopService.js b/ui-react/src/api/LoopService.js
index 2750763d..698ee28c 100644
--- a/ui-react/src/api/LoopService.js
+++ b/ui-react/src/api/LoopService.js
@@ -171,8 +171,8 @@ export default class LoopService {
});
}
- static refreshOpPolicyJson(loopName) {
- return fetch('/restservices/clds/v2/loop/refreshOpPolicyJsonSchema/' + loopName, {
+ static refreshOperationalPolicyJson(loopName,operationalPolicyName) {
+ return fetch('/restservices/clds/v2/loop/refreshOperationalPolicyJsonSchema/' + loopName + '/' + operationalPolicyName, {
method: 'PUT',
headers: {
"Content-Type": "application/json"
@@ -194,6 +194,29 @@ export default class LoopService {
});
}
+ static refreshMicroServicePolicyJson(loopName,microServicePolicyName) {
+ return fetch('/restservices/clds/v2/loop/refreshMicroServicePolicyJsonSchema/' + loopName + '/' + microServicePolicyName, {
+ method: 'PUT',
+ headers: {
+ "Content-Type": "application/json"
+ },
+ credentials: 'same-origin'
+ })
+ .then(function (response) {
+ console.debug("Refresh Operational Policy Json Schema response received: ", response.status);
+ if (response.ok) {
+ return response.json();
+ } else {
+ console.error("Refresh Operational Policy Json Schema query failed");
+ return {};
+ }
+ })
+ .catch(function (error) {
+ console.error("Refresh Operational Policy Json Schema error received", error);
+ return {};
+ });
+ }
+
static addOperationalPolicyType(loopName, policyType, policyVersion) {
return fetch('/restservices/clds/v2/loop/addOperationaPolicy/' + loopName + '/policyModel/' + policyType +'/' + policyVersion , {
method: 'PUT',
diff --git a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
index 7ed8ba6f..89e70795 100644
--- a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
+++ b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
@@ -127,7 +127,7 @@ export default class OperationalPolicyModal extends React.Component {
}
handleRefresh() {
- LoopService.refreshOpPolicyJson(this.state.loopCache.getLoopName()).then(data => {
+ LoopService.refreshOperationalPolicyJson(this.state.loopCache.getLoopName(), this.state.loopCache.getOperationalPolicies()[0]).then(data => {
var newLoopCache = new LoopCache(data);
var schema_json = newLoopCache.getOperationalPolicyJsonSchema();
var operationalPoliciesData = newLoopCache.getOperationalPoliciesNoJsonSchema();