Repository: stratos
Updated Branches:
  refs/heads/master a4a55f08f -> ef8ed14d4


Validate whether application policy is used before removing


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/e6566f3b
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/e6566f3b
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/e6566f3b

Branch: refs/heads/master
Commit: e6566f3b7562dbaa7ee442745b72ad511f64ccff
Parents: 6cbe1e3
Author: anuruddhal <[email protected]>
Authored: Tue May 19 19:58:09 2015 +0530
Committer: anuruddhal <[email protected]>
Committed: Tue May 19 19:58:09 2015 +0530

----------------------------------------------------------------------
 .../services/impl/AutoscalerServiceImpl.java    | 25 ++++++++++++++++----
 .../common/client/AutoscalerServiceClient.java  |  4 ++--
 .../rest/endpoint/api/StratosApiV41.java        |  5 ++++
 .../rest/endpoint/api/StratosApiV41Utils.java   |  3 ++-
 4 files changed, 29 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/e6566f3b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index 8edf8e0..8c553e1 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -808,7 +808,7 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
 
     @Override
     public boolean addApplicationPolicy(ApplicationPolicy applicationPolicy)
-            throws RemoteException, 
InvalidApplicationPolicyException,ApplicationPolicyAlreadyExistsException {
+            throws RemoteException, InvalidApplicationPolicyException, 
ApplicationPolicyAlreadyExistsException {
 
         // validating application policy
         AutoscalerUtil.validateApplicationPolicy(applicationPolicy);
@@ -838,8 +838,23 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
     }
 
     @Override
-    public boolean removeApplicationPolicy(String applicationPolicyId) throws 
InvalidPolicyException {
-        
PolicyManager.getInstance().removeApplicationPolicy(applicationPolicyId);
+    public boolean removeApplicationPolicy(String applicationPolicyId) throws 
InvalidPolicyException, UnremovablePolicyException {
+
+        if (removableApplicationPolicy(applicationPolicyId)) {
+            return 
PolicyManager.getInstance().removeApplicationPolicy(applicationPolicyId);
+        } else {
+            throw new UnremovablePolicyException("This application policy 
cannot be removed, since it is used in " +
+                    "applications.");
+        }
+    }
+
+    private boolean removableApplicationPolicy(String applicationPolicyId) {
+
+        for (Application application : 
ApplicationHolder.getApplications().getApplications().values()) {
+            if 
(applicationPolicyId.equals(application.getApplicationPolicyId())) {
+                return false;
+            }
+        }
         return true;
     }
 
@@ -978,7 +993,7 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
         // deployment policy should contain at least one network partition 
reference
         if (null == deploymentPolicy.getNetworkPartitionRefs() || 
deploymentPolicy.getNetworkPartitionRefs().length == 0) {
             String msg = String.format("Deployment policy does not have any 
network partition references: " +
-                            "[deployment-policy-id] %s", deploymentPolicyId);
+                    "[deployment-policy-id] %s", deploymentPolicyId);
             log.error(msg);
             throw new InvalidDeploymentPolicyException(msg);
         }
@@ -999,7 +1014,7 @@ public class AutoscalerServiceImpl implements 
AutoscalerService {
                     .getNetworkPartition(networkPartitionId);
             if (networkPartition == null) {
                 String msg = String.format("Network partition is not found: 
[deployment-policy-id] %s " +
-                                "[network-partition-id] %s", 
deploymentPolicyId, networkPartitionId);
+                        "[network-partition-id] %s", deploymentPolicyId, 
networkPartitionId);
                 log.error(msg);
                 throw new InvalidDeploymentPolicyException(msg);
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/e6566f3b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
index f6a97e7..26a0824 100644
--- 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
+++ 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/client/AutoscalerServiceClient.java
@@ -119,7 +119,7 @@ public class AutoscalerServiceClient {
 
     public void addApplicationPolicy(ApplicationPolicy applicationPolicy)
             throws RemoteException,
-            AutoscalerServiceRemoteExceptionException, 
AutoscalerServiceInvalidApplicationPolicyExceptionException,AutoscalerServiceApplicationPolicyAlreadyExistsExceptionException
 {
+            AutoscalerServiceRemoteExceptionException, 
AutoscalerServiceInvalidApplicationPolicyExceptionException, 
AutoscalerServiceApplicationPolicyAlreadyExistsExceptionException {
         stub.addApplicationPolicy(applicationPolicy);
     }
 
@@ -138,7 +138,7 @@ public class AutoscalerServiceClient {
     }
 
     public void removeApplicationPolicy(String applicationPolicyId)
-            throws RemoteException, 
AutoscalerServiceInvalidPolicyExceptionException {
+            throws RemoteException, 
AutoscalerServiceInvalidPolicyExceptionException, 
AutoscalerServiceUnremovablePolicyExceptionException {
         stub.removeApplicationPolicy(applicationPolicyId);
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/e6566f3b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 5cbf30a..d4917d4 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -920,6 +920,11 @@ public class StratosApiV41 extends AbstractApi {
             return Response.status(Response.Status.BAD_REQUEST).entity(new 
ResponseMessageBean(
                     ResponseMessageBean.ERROR, backendErrorMessage))
                     .build();
+        } catch (AutoscalerServiceUnremovablePolicyExceptionException e) {
+            return Response.status(Response.Status.BAD_REQUEST).entity(new 
ResponseMessageBean(
+                    ResponseMessageBean.ERROR, "This application policy cannot 
be removed, since it is used in an " +
+                    "application"))
+                    .build();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/e6566f3b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index 35d2668..9b43144 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -25,6 +25,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.stub.*;
 import org.apache.stratos.autoscaler.stub.deployment.policy.ApplicationPolicy;
+import org.apache.stratos.autoscaler.stub.exception.UnremovablePolicyException;
 import org.apache.stratos.autoscaler.stub.pojo.ApplicationContext;
 import org.apache.stratos.autoscaler.stub.pojo.ServiceGroup;
 import org.apache.stratos.cloud.controller.stub.*;
@@ -775,7 +776,7 @@ public class StratosApiV41Utils {
      * @throws RestAPIException
      */
     public static void removeApplicationPolicy(String applicationPolicyId) 
throws RestAPIException,
-            AutoscalerServiceInvalidPolicyExceptionException {
+            AutoscalerServiceInvalidPolicyExceptionException, 
AutoscalerServiceUnremovablePolicyExceptionException {
 
         if (applicationPolicyId == null) {
             String msg = "Application policy bean id null";

Reply via email to