Prevent adding same type of Op policy
[clamp.git] / src / main / java / org / onap / clamp / loop / LoopService.java
index acd125b..d14667e 100644 (file)
@@ -98,7 +98,7 @@ public class LoopService {
     public void updateDcaeDeploymentFields(Loop loop, String deploymentId, String deploymentUrl) {
         loop.setDcaeDeploymentId(deploymentId);
         loop.setDcaeDeploymentStatusUrl(deploymentUrl);
-        loopsRepository.save(loop);
+        loopsRepository.saveAndFlush(loop);
     }
 
     public void updateLoopState(Loop loop, String newState) {
@@ -118,19 +118,25 @@ public class LoopService {
     Loop addOperationalPolicy(String loopName, String policyType, String policyVersion) throws IOException {
         Loop loop = getLoop(loopName);
         PolicyModel policyModel = policyModelsService.getPolicyModel(policyType, policyVersion);
+        Set<OperationalPolicy> opPolicySet = loop.getOperationalPolicies();
+        for (OperationalPolicy opPolicy : opPolicySet) {
+               if (opPolicy.getPolicyModel().equals(policyModel)) {
+                       throw new IllegalArgumentException("This type of Operational Policy is already added to the loop. Please choose another one.");
+               }
+        }
         if (policyModel == null) {
             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 +147,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 +185,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);
-    }
 }
+