You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ra...@apache.org on 2015/03/20 12:22:03 UTC

[5/6] stratos git commit: fixing an issue in cartridges/groups cache

http://git-wip-us.apache.org/repos/asf/stratos/blob/7ef55833/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 62f9fdd..6d2493a 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
@@ -36,6 +36,7 @@ import org.apache.stratos.cloud.controller.stub.domain.*;
 import org.apache.stratos.common.beans.PropertyBean;
 import org.apache.stratos.common.beans.application.ApplicationBean;
 import org.apache.stratos.common.beans.application.ApplicationNetworkPartitionIdListBean;
+import org.apache.stratos.common.beans.application.ComponentBean;
 import org.apache.stratos.common.beans.application.GroupBean;
 import org.apache.stratos.common.beans.application.GroupReferenceBean;
 import org.apache.stratos.common.beans.application.domain.mapping.ApplicationDomainMappingsBean;
@@ -95,15 +96,15 @@ public class StratosApiV41Utils {
     public static void addCartridge(CartridgeBean cartridgeDefinition) throws RestAPIException {
 
         try {
-            if (log.isDebugEnabled()) {
+            if(log.isDebugEnabled()) {
                 log.debug(String.format("Adding cartridge: [cartridge-type] %s ", cartridgeDefinition.getType()));
             }
 
-            CartridgeConfig cartridgeConfig = createCartridgeConfig(cartridgeDefinition);
+	        CartridgeConfig cartridgeConfig = createCartridgeConfig(cartridgeDefinition);
             CloudControllerServiceClient cloudControllerServiceClient = CloudControllerServiceClient.getInstance();
             cloudControllerServiceClient.addCartridge(cartridgeConfig);
 
-            if (log.isDebugEnabled()) {
+            if(log.isDebugEnabled()) {
                 log.debug(String.format("Successfully added cartridge: [cartridge-type] %s ", cartridgeDefinition.getType()));
             }
         } catch (Exception e) {
@@ -113,69 +114,69 @@ public class StratosApiV41Utils {
         }
     }
 
-    public static void updateCartridge(CartridgeBean cartridgeDefinition) throws RestAPIException {
-
-        try {
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Adding cartridge: [cartridge-type] %s ", cartridgeDefinition.getType()));
-            }
-
-            CartridgeConfig cartridgeConfig = createCartridgeConfig(cartridgeDefinition);
-            CloudControllerServiceClient cloudControllerServiceClient = CloudControllerServiceClient.getInstance();
-            cloudControllerServiceClient.updateCartridge(cartridgeConfig);
-
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Successfully update cartridge: [cartridge-type] %s ",
-                        cartridgeDefinition.getType()));
-            }
-        } catch (CloudControllerServiceCartridgeDefinitionNotExistsExceptionException e) {
-            String msg = "No cartridge definition exists with this definition.Please use the POST method to add the cartridge";
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        } catch (Exception e) {
-            String msg = "Could not update cartridge";
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        }
-    }
-
-    private static CartridgeConfig createCartridgeConfig(CartridgeBean cartridgeDefinition)
-            throws RestAPIException {
-        CartridgeConfig cartridgeConfig =
-                ObjectConverter.convertCartridgeBeanToStubCartridgeConfig(cartridgeDefinition);
-        if (cartridgeConfig == null) {
-            throw new RestAPIException("Could not read cartridge definition, cartridge deployment failed");
-        }
-        if (StringUtils.isEmpty(cartridgeConfig.getCategory())) {
-            throw new RestAPIException(String.format("Category is not specified in cartridge: [cartridge-type] %s",
-                    cartridgeConfig.getType()));
-        }
-        return cartridgeConfig;
-    }
-
-    public static void removeCartridge(String cartridgeType) throws RestAPIException {
+	public static void updateCartridge(CartridgeBean cartridgeDefinition) throws RestAPIException {
+
+		try {
+			if (log.isDebugEnabled()) {
+				log.debug(String.format("Adding cartridge: [cartridge-type] %s ", cartridgeDefinition.getType()));
+			}
+
+			CartridgeConfig cartridgeConfig = createCartridgeConfig(cartridgeDefinition);
+			CloudControllerServiceClient cloudControllerServiceClient = CloudControllerServiceClient.getInstance();
+			cloudControllerServiceClient.updateCartridge(cartridgeConfig);
+
+			if (log.isDebugEnabled()) {
+				log.debug(String.format("Successfully update cartridge: [cartridge-type] %s ",
+				                        cartridgeDefinition.getType()));
+			}
+		} catch (CloudControllerServiceCartridgeDefinitionNotExistsExceptionException e) {
+			String msg = "No cartridge definition exists with this definition.Please use the POST method to add the cartridge";
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		} catch (Exception e) {
+			String msg = "Could not update cartridge";
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		}
+	}
+
+	private static CartridgeConfig createCartridgeConfig(CartridgeBean cartridgeDefinition)
+			throws RestAPIException {
+		CartridgeConfig cartridgeConfig =
+				ObjectConverter.convertCartridgeBeanToStubCartridgeConfig(cartridgeDefinition);
+		if (cartridgeConfig == null) {
+			throw new RestAPIException("Could not read cartridge definition, cartridge deployment failed");
+		}
+		if (StringUtils.isEmpty(cartridgeConfig.getCategory())) {
+			throw new RestAPIException(String.format("Category is not specified in cartridge: [cartridge-type] %s",
+			                                         cartridgeConfig.getType()));
+		}
+		return cartridgeConfig;
+	}
+
+	public static void removeCartridge(String cartridgeType) throws RestAPIException {
 
         try {
-            if (log.isDebugEnabled()) {
+            if(log.isDebugEnabled()) {
                 log.debug(String.format("Removing cartridge: [cartridge-type] %s ", cartridgeType));
             }
 
             CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
-            if (cloudControllerServiceClient.getCartridgeInfo(cartridgeType) == null) {
+            if(cloudControllerServiceClient.getCartridgeInfo(cartridgeType) == null) {
                 throw new RuntimeException("Cartridge not found: [cartridge-type] " + cartridgeType);
             }
-
+            
             StratosManagerServiceClient smServiceClient = getStratosManagerServiceClient();
-
+            
             // Validate whether cartridge can be removed
-            if (!smServiceClient.canCartridgeBeRemoved(cartridgeType)) {
-                String message = "Cannot remove cartridge : [cartridge-type] " + cartridgeType + " since it is used in another cartridge group or an application";
+            if(!smServiceClient.canCartridgeBeRemoved(cartridgeType)) {
+            	String message = "Cannot remove cartridge : [cartridge-type] " + cartridgeType + " since it is used in another cartridge group or an application";
                 log.error(message);
                 throw new RestAPIException(message);
             }
             cloudControllerServiceClient.removeCartridge(cartridgeType);
 
-            if (log.isInfoEnabled()) {
+            if(log.isInfoEnabled()) {
                 log.info(String.format("Successfully removed cartridge: [cartridge-type] %s ", cartridgeType));
             }
         } catch (Exception e) {
@@ -186,38 +187,38 @@ public class StratosApiV41Utils {
     }
 
     public static List<CartridgeBean> getCartridgesByFilter(String filter, String criteria, ConfigurationContext configurationContext)
-            throws RestAPIException {
-        List<CartridgeBean> cartridges = null;
-
-        if (filter.equals("singleTenant")) {
-            cartridges = getAvailableCartridges(null, false, configurationContext);
-        } else if (filter.equals("multiTenant")) {
-            cartridges = getAvailableCartridges(null, true, configurationContext);
-        } else if (filter.equals("loadBalancer")) {
-            cartridges = getAvailableLbCartridges(false, configurationContext);
-        } else if (filter.equals("provider")) {
-            cartridges = getAvailableCartridgesByProvider(criteria, configurationContext);
-        }
-
-        return cartridges;
-    }
-
-    public static CartridgeBean getCartridgeByFilter(String filter, String cartridgeType, ConfigurationContext configurationContext)
-            throws RestAPIException {
-        List<CartridgeBean> cartridges = getCartridgesByFilter(filter, null, configurationContext);
-
-        for (CartridgeBean cartridge : cartridges) {
-            if (cartridge.getType().equals(cartridgeType)) {
-                return cartridge;
-            }
-        }
-        String msg = "Unavailable cartridge type: " + cartridgeType;
-        log.error(msg);
-        throw new RestAPIException(msg);
-    }
+			throws RestAPIException {
+		List<CartridgeBean> cartridges = null;
+
+		if (filter.equals("singleTenant")) {
+			cartridges = getAvailableCartridges(null, false, configurationContext);
+		} else if (filter.equals("multiTenant")) {
+			cartridges = getAvailableCartridges(null, true, configurationContext);
+		} else if (filter.equals("loadBalancer")) {
+			cartridges = getAvailableLbCartridges(false, configurationContext);
+		} else if (filter.equals("provider")) {
+			cartridges = getAvailableCartridgesByProvider(criteria, configurationContext);
+		}
+
+		return cartridges;
+	}
+
+	public static CartridgeBean getCartridgeByFilter(String filter, String cartridgeType, ConfigurationContext configurationContext)
+	throws RestAPIException {
+		List<CartridgeBean> cartridges = getCartridgesByFilter(filter, null, configurationContext);
+
+		for (CartridgeBean cartridge : cartridges) {
+			if (cartridge.getType().equals(cartridgeType)) {
+				return cartridge;
+			}
+		}
+		String msg = "Unavailable cartridge type: " + cartridgeType;
+		log.error(msg);
+		throw new RestAPIException(msg);
+	}
 
     private static List<CartridgeBean> getAvailableLbCartridges(Boolean multiTenant,
-                                                                ConfigurationContext configurationContext) throws RestAPIException {
+                                                    ConfigurationContext configurationContext) throws RestAPIException {
         List<CartridgeBean> cartridges = getAvailableCartridges(null, multiTenant,
                 configurationContext);
         List<CartridgeBean> lbCartridges = new ArrayList<CartridgeBean>();
@@ -229,85 +230,81 @@ public class StratosApiV41Utils {
         return lbCartridges;
     }
 
-    /**
-     * Get the available cartridges by provider
-     *
-     * @param provider             provide name
-     * @param configurationContext configuration context
-     * @return List of the cartridge definitions
-     * @throws RestAPIException
-     */
-    private static List<CartridgeBean> getAvailableCartridgesByProvider(String provider, ConfigurationContext configurationContext) throws RestAPIException {
-        List<CartridgeBean> cartridges = new ArrayList<CartridgeBean>();
-
-        if (log.isDebugEnabled()) {
-            log.debug("Reading cartridges: [provider-name] " + provider);
-        }
-
-        try {
-            String[] availableCartridges = CloudControllerServiceClient.getInstance().getRegisteredCartridges();
-
-            if (availableCartridges != null) {
-                for (String cartridgeType : availableCartridges) {
-                    CartridgeInfo cartridgeInfo = null;
-                    try {
-                        cartridgeInfo = CloudControllerServiceClient.getInstance().getCartridgeInfo(cartridgeType);
-                    } catch (Exception e) {
-                        if (log.isWarnEnabled()) {
-                            log.warn("Error when calling getCartridgeInfo for " + cartridgeType + ", Error: "
-                                    + e.getMessage());
-                        }
-                    }
-                    if (cartridgeInfo == null) {
-                        // This cannot happen. But continue
-                        if (log.isDebugEnabled()) {
-                            log.debug("Cartridge Info not found: " + cartridgeType);
-                        }
-                        continue;
-                    }
-
-
-                    if (!cartridgeInfo.getProvider().equals(provider)) {
-                        continue;
-                    }
+	/**
+	 * Get the available cartridges by provider
+	 * @param provider provide name
+	 * @param configurationContext configuration context
+	 * @return List of the cartridge definitions
+	 * @throws RestAPIException
+	 */
+	private static List<CartridgeBean> getAvailableCartridgesByProvider(String provider, ConfigurationContext configurationContext) throws RestAPIException {
+		List<CartridgeBean> cartridges = new ArrayList<CartridgeBean>();
+
+		if (log.isDebugEnabled()) {
+			log.debug("Reading cartridges: [provider-name] " + provider );
+		}
+
+		try {
+			String[] availableCartridges = CloudControllerServiceClient.getInstance().getRegisteredCartridges();
+
+			if (availableCartridges != null) {
+				for (String cartridgeType : availableCartridges) {
+					CartridgeInfo cartridgeInfo = null;
+					try {
+						cartridgeInfo = CloudControllerServiceClient.getInstance().getCartridgeInfo(cartridgeType);
+					} catch (Exception e) {
+						if (log.isWarnEnabled()) {
+							log.warn("Error when calling getCartridgeInfo for " + cartridgeType + ", Error: "
+							         + e.getMessage());
+						}
+					}
+					if (cartridgeInfo == null) {
+						// This cannot happen. But continue
+						if (log.isDebugEnabled()) {
+							log.debug("Cartridge Info not found: " + cartridgeType);
+						}
+						continue;
+					}
+
+
+					if (!cartridgeInfo.getProvider().equals(provider)) {
+						continue;
+					}
 
                     CartridgeBean cartridge = convertCartridgeToCartridgeDefinitionBean(cartridgeInfo);
-                    cartridges.add(cartridge);
-                }
-            } else {
-                if (log.isDebugEnabled()) {
-                    log.debug("There are no available cartridges");
-                }
-            }
-        } catch (AxisFault axisFault) {
-            String errorMsg = String.format(
-                    "Error while getting CloudControllerServiceClient instance to connect to the Cloud Controller. " +
-                            "Cause: %s ", axisFault.getMessage());
-            log.error(errorMsg, axisFault);
-            throw new RestAPIException(errorMsg, axisFault);
-        } catch (RemoteException e) {
-            String errorMsg =
-                    String.format("Error while getting cartridge information for provider %s  Cause: %s ", provider,
-                            e.getMessage());
-            log.error(errorMsg, e);
-            throw new RestAPIException(errorMsg, e);
-        }
-
-        if (log.isDebugEnabled()) {
-            log.debug("Returning available cartridges " + cartridges.size());
-        }
-
-        return cartridges;
-    }
-
-    public static List<CartridgeBean> getAvailableCartridges(String cartridgeSearchString, Boolean multiTenant,
-                                                             ConfigurationContext configurationContext)
-            throws RestAPIException {
+					cartridges.add(cartridge);
+				}
+			} else {
+				if (log.isDebugEnabled()) {
+					log.debug("There are no available cartridges");
+				}
+			}
+		} catch (AxisFault axisFault) {
+			String errorMsg = String.format(
+					"Error while getting CloudControllerServiceClient instance to connect to the Cloud Controller. " +
+					"Cause: %s ", axisFault.getMessage());
+			log.error(errorMsg, axisFault);
+			throw new RestAPIException(errorMsg, axisFault);
+		} catch (RemoteException e) {
+			String errorMsg =
+					String.format("Error while getting cartridge information for provider %s  Cause: %s ", provider,
+					              e.getMessage());
+			log.error(errorMsg, e);
+			throw new RestAPIException(errorMsg, e);
+		}
+
+		if (log.isDebugEnabled()) {
+			log.debug("Returning available cartridges " + cartridges.size());
+		}
+
+		return cartridges;
+    }
+
+    public static List<CartridgeBean> getAvailableCartridges(String cartridgeSearchString, Boolean multiTenant, ConfigurationContext configurationContext) throws RestAPIException {
         List<CartridgeBean> cartridges = new ArrayList<CartridgeBean>();
 
         if (log.isDebugEnabled()) {
-            log.debug("Getting available cartridges. Search String: " + cartridgeSearchString + ", Multi-Tenant: "
-                    + multiTenant);
+            log.debug("Getting available cartridges. Search String: " + cartridgeSearchString + ", Multi-Tenant: " + multiTenant);
         }
 
         boolean allowMultipleSubscription = new Boolean(
@@ -389,7 +386,7 @@ public class StratosApiV41Utils {
     public static CartridgeBean getCartridge(String cartridgeType) throws RestAPIException {
         try {
             CartridgeInfo cartridgeInfo = CloudControllerServiceClient.getInstance().getCartridgeInfo(cartridgeType);
-            if (cartridgeInfo == null) {
+            if(cartridgeInfo == null) {
                 return null;
             }
             return convertCartridgeToCartridgeDefinitionBean(cartridgeInfo);
@@ -404,22 +401,24 @@ public class StratosApiV41Utils {
         }
     }
 
-    public static CartridgeBean getCartridgeForValidate(String cartridgeType) throws RestAPIException {
-        try {
-            CartridgeInfo cartridgeInfo = CloudControllerServiceClient.getInstance().getCartridgeInfo(cartridgeType);
-            if (cartridgeInfo == null) {
-                return null;
-            }
-            return convertCartridgeToCartridgeDefinitionBean(cartridgeInfo);
-        } catch (CloudControllerServiceCartridgeNotFoundExceptionException e) {
-            return null;
-        } catch (RemoteException e) {
-            String message = e.getMessage();
-            log.error(message, e);
-            throw new RestAPIException(message, e);
-        }
+	public static CartridgeBean getCartridgeForValidate(String cartridgeType) throws RestAPIException {
+		try {
+			CartridgeInfo cartridgeInfo = CloudControllerServiceClient.getInstance().getCartridgeInfo(cartridgeType);
+			if (cartridgeInfo == null) {
+				return null;
+			}
+			return convertCartridgeToCartridgeDefinitionBean(cartridgeInfo);
+		}
+		catch(CloudControllerServiceCartridgeNotFoundExceptionException e){
+			return null;
+		}
+		catch (RemoteException e) {
+			String message = e.getMessage();
+			log.error(message, e);
+			throw new RestAPIException(message, e);
+		}
 
-    }
+	}
 
     private static CartridgeBean convertCartridgeToCartridgeDefinitionBean(CartridgeInfo cartridgeInfo) {
         CartridgeBean cartridge = new CartridgeBean();
@@ -431,11 +430,36 @@ public class StratosApiV41Utils {
         cartridge.setDescription(cartridgeInfo.getDescription());
         cartridge.setVersion(cartridgeInfo.getVersion());
         cartridge.setMultiTenant(cartridgeInfo.getMultiTenant());
+        cartridge.setPersistence(convertPersistenceToPersistenceBean(cartridgeInfo.getPersistence()));
         cartridge.setLoadBalancingIPType(cartridgeInfo.getLoadBalancingIPType());
         cartridge.setMetadataKeys(cartridgeInfo.getMetadataKeys());
         return cartridge;
     }
 
+    private static PersistenceBean convertPersistenceToPersistenceBean(Persistence persistence) {
+        if(persistence == null) {
+            return null;
+        }
+
+        PersistenceBean persistenceBean = new PersistenceBean();
+        persistenceBean.setRequired(persistence.isPersistenceRequiredSpecified());
+        persistenceBean.setVolume(convertVolumesToVolumeBeans(persistence.getVolumes()));
+        return persistenceBean;
+    }
+
+    private static List<VolumeBean> convertVolumesToVolumeBeans(Volume[] volumes) {
+        List<VolumeBean> list = new ArrayList<VolumeBean>();
+        for(Volume volume : volumes) {
+            VolumeBean volumeBean = new VolumeBean();
+            volumeBean.setId(volume.getId());
+            volumeBean.setDevice(volume.getDevice());
+            volumeBean.setSize(String.valueOf(volume.getSize()));
+            volumeBean.setSnapshotId(volume.getSnapshotId());
+            list.add(volumeBean);
+        }
+        return list;
+    }
+
     private static boolean isAlreadySubscribed(String cartridgeType, int tenantId) {
         return false;
     }
@@ -497,7 +521,7 @@ public class StratosApiV41Utils {
             throw new RestAPIException(errorMsg, axisFault);
         }
     }
-
+    
     private static StratosManagerServiceClient getStratosManagerServiceClient() throws RestAPIException {
         try {
             return StratosManagerServiceClient.getInstance();
@@ -535,104 +559,104 @@ public class StratosApiV41Utils {
             }
         }
     }
-
+    
     public static void addApplicationPolicy(ApplicationPolicyBean applicationPolicyBean) throws RestAPIException {
-
-        if (applicationPolicyBean == null) {
-            String msg = "Application policy bean is null";
-            log.error(msg);
-            throw new RestAPIException(msg);
-        }
-
-        AutoscalerServiceClient serviceClient = getAutoscalerServiceClient();
-        try {
-            ApplicationPolicy applicationPolicy = ObjectConverter.convertApplicationPolicyBeanToStubAppPolicy(applicationPolicyBean);
-            if (applicationPolicy == null) {
-                String msg = "Application policy is null";
-                log.error(msg);
-                throw new RestAPIException(msg);
-            }
-            serviceClient.addApplicationPolicy(applicationPolicy);
-        } catch (RemoteException e) {
-            String msg = "Could not add application policy" + e.getLocalizedMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
-            String msg = "Could not add application policy. Invalid policy. " + e.getLocalizedMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        } catch (AutoscalerServiceRemoteExceptionException e) {
-            String msg = "Could not add application policy" + e.getLocalizedMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        } catch (AutoscalerServiceInvalidApplicationPolicyExceptionException e) {
-            String msg = "Could not add application policy. Invalid application policy. " + e.getLocalizedMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        }
-    }
-
+    	
+		if (applicationPolicyBean == null) {
+			String msg = "Application policy bean is null";
+			log.error(msg);
+			throw new RestAPIException(msg);
+		}
+    	
+    	AutoscalerServiceClient serviceClient = getAutoscalerServiceClient();
+    	try {
+			ApplicationPolicy applicationPolicy = ObjectConverter.convertApplicationPolicyBeanToStubAppPolicy(applicationPolicyBean);
+			if (applicationPolicy == null) {
+				String msg = "Application policy is null";
+				log.error(msg);
+				throw new RestAPIException(msg);
+			}
+			serviceClient.addApplicationPolicy(applicationPolicy);
+		} catch (RemoteException e) {
+			String msg = "Could not add application policy" + e.getLocalizedMessage();
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		} catch (AutoscalerServiceInvalidPolicyExceptionException e) {
+			String msg = "Could not add application policy. Invalid policy. " + e.getLocalizedMessage();
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		} catch (AutoscalerServiceRemoteExceptionException e) {
+			String msg = "Could not add application policy" + e.getLocalizedMessage();
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		} catch (AutoscalerServiceInvalidApplicationPolicyExceptionException e) {
+			String msg = "Could not add application policy. Invalid application policy. " + e.getLocalizedMessage();
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		}
+    }
+    
     public static void updateApplicationPolicy(ApplicationPolicyBean applicationPolicyBean) throws RestAPIException {
 
         log.info(String.format("Updating application policy: [id] %s", applicationPolicyBean.getId()));
 
         AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
         if (autoscalerServiceClient != null) {
-
-            ApplicationPolicy applicationPolicy = ObjectConverter.convertApplicationPolicyBeanToStubAppPolicy(applicationPolicyBean);
+        	
+        	ApplicationPolicy applicationPolicy = ObjectConverter.convertApplicationPolicyBeanToStubAppPolicy(applicationPolicyBean);
 
             try {
-                autoscalerServiceClient.updateApplicationPolicy(applicationPolicy);
-            } catch (RemoteException e) {
-                String msg = "Could not update application policy" + e.getLocalizedMessage();
-                log.error(msg, e);
-                throw new RestAPIException(msg);
-            } catch (AutoscalerServiceApplicatioinPolicyNotExistsExceptionException e) {
-                String msg = "Could not update application policy. Application policy not exists" + e.getLocalizedMessage();
-                log.error(msg, e);
-                throw new RestAPIException(msg);
-            } catch (AutoscalerServiceRemoteExceptionException e) {
-                String msg = "Could not update application policy" + e.getLocalizedMessage();
-                log.error(msg, e);
-                throw new RestAPIException(msg);
-            } catch (AutoscalerServiceInvalidApplicationPolicyExceptionException e) {
-                String msg = "Could not update application policy. Invalid application policy" + e.getLocalizedMessage();
-                log.error(msg, e);
-                throw new RestAPIException(msg);
-            }
-        }
-    }
-
+				autoscalerServiceClient.updateApplicationPolicy(applicationPolicy);
+			} catch (RemoteException e) {
+				String msg = "Could not update application policy" + e.getLocalizedMessage();
+				log.error(msg, e);
+				throw new RestAPIException(msg);
+			} catch (AutoscalerServiceApplicatioinPolicyNotExistsExceptionException e) {
+				String msg = "Could not update application policy. Application policy not exists" + e.getLocalizedMessage();
+				log.error(msg, e);
+				throw new RestAPIException(msg);
+			} catch (AutoscalerServiceRemoteExceptionException e) {
+				String msg = "Could not update application policy" + e.getLocalizedMessage();
+				log.error(msg, e);
+				throw new RestAPIException(msg);
+			} catch (AutoscalerServiceInvalidApplicationPolicyExceptionException e) {
+				String msg = "Could not update application policy. Invalid application policy" + e.getLocalizedMessage();
+				log.error(msg, e);
+				throw new RestAPIException(msg);
+			}
+        }
+    }
+    
     public static ApplicationPolicyBean[] getApplicationPolicies() throws RestAPIException {
 
-        ApplicationPolicy[] applicationPolicies = null;
+    	ApplicationPolicy[] applicationPolicies = null;
         AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
         if (autoscalerServiceClient != null) {
             try {
-                applicationPolicies = autoscalerServiceClient.getApplicationPolicies();
-            } catch (RemoteException e) {
-                String msg = "Could not get application policies" + e.getLocalizedMessage();
-                log.error(msg, e);
-                throw new RestAPIException(msg);
-            }
+				applicationPolicies = autoscalerServiceClient.getApplicationPolicies();
+			} catch (RemoteException e) {
+				String msg = "Could not get application policies" + e.getLocalizedMessage();
+				log.error(msg, e);
+				throw new RestAPIException(msg);
+			}
         }
         return ObjectConverter.convertASStubApplicationPoliciesToApplicationPolicies(applicationPolicies);
     }
-
+    
     public static ApplicationPolicyBean getApplicationPolicy(String applicationPolicyId) throws RestAPIException {
-
-        if (applicationPolicyId == null) {
-            String msg = "Application policy bean id null";
-            log.error(msg);
-            throw new RestAPIException(msg);
-        }
-
-        if (StringUtils.isBlank(applicationPolicyId)) {
-            String msg = "Application policy id is empty";
-            log.error(msg);
-            throw new RestAPIException(msg);
-        }
-
+    	
+		if (applicationPolicyId == null) {
+			String msg = "Application policy bean id null";
+			log.error(msg);
+			throw new RestAPIException(msg);
+		}
+    	
+    	if (StringUtils.isBlank(applicationPolicyId)) {
+			String msg = "Application policy id is empty";
+			log.error(msg);
+			throw new RestAPIException(msg);
+    	}
+    	
         try {
             AutoscalerServiceClient serviceClient = AutoscalerServiceClient.getInstance();
             ApplicationPolicy applicationPolicy = serviceClient.getApplicationPolicy(applicationPolicyId);
@@ -643,33 +667,33 @@ public class StratosApiV41Utils {
             throw new RuntimeException(message, e);
         }
     }
-
+    
     public static void removeApplicationPolicy(String applicationPolicyId) throws RestAPIException {
-
-        if (applicationPolicyId == null) {
-            String msg = "Application policy bean id null";
-            log.error(msg);
-            throw new RestAPIException(msg);
-        }
-
-        if (StringUtils.isBlank(applicationPolicyId)) {
-            String msg = "Application policy id is empty";
-            log.error(msg);
-            throw new RestAPIException(msg);
-        }
-
-        AutoscalerServiceClient serviceClient = getAutoscalerServiceClient();
-        try {
-            serviceClient.removeApplicationPolicy(applicationPolicyId);
-        } catch (RemoteException e) {
-            String msg = "Could not remove application policy. " + e.getLocalizedMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
-            String msg = "Could not update application policy. " + e.getLocalizedMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        }
+    	
+		if (applicationPolicyId == null) {
+			String msg = "Application policy bean id null";
+			log.error(msg);
+			throw new RestAPIException(msg);
+		}
+    	
+    	if (StringUtils.isBlank(applicationPolicyId)) {
+			String msg = "Application policy id is empty";
+			log.error(msg);
+			throw new RestAPIException(msg);
+    	}
+    	
+    	AutoscalerServiceClient serviceClient = getAutoscalerServiceClient();
+    	try {
+			serviceClient.removeApplicationPolicy(applicationPolicyId);
+		} catch (RemoteException e) {
+			String msg = "Could not remove application policy. " + e.getLocalizedMessage();
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		} catch (AutoscalerServiceInvalidPolicyExceptionException e) {
+			String msg = "Could not update application policy. " + e.getLocalizedMessage();
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		}
     }
 
     public static void updateAutoscalingPolicy(AutoscalePolicyBean autoscalePolicyBean) throws RestAPIException {
@@ -695,25 +719,25 @@ public class StratosApiV41Utils {
         }
     }
 
-    public static void removeAutoscalingPolicy(String autoscalePolicyId) throws RestAPIException {
+	public static void removeAutoscalingPolicy(String autoscalePolicyId) throws RestAPIException {
 
-        log.info(String.format("Removing autoscaling policy: [id] %s", autoscalePolicyId));
+		log.info(String.format("Removing autoscaling policy: [id] %s", autoscalePolicyId));
 
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
+		AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
+		if (autoscalerServiceClient != null) {
 
-            try {
-                autoscalerServiceClient.removeAutoscalingPolicy(autoscalePolicyId);
-            } catch (RemoteException e) {
-                log.error(e.getMessage(), e);
-                throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoscalerServiceInvalidPolicyExceptionException e) {
-                String message = e.getFaultMessage().getInvalidPolicyException().getMessage();
-                log.error(message, e);
-                throw new RestAPIException(message, e);
-            }
-        }
-    }
+		    try {
+				autoscalerServiceClient.removeAutoscalingPolicy(autoscalePolicyId);
+			} catch (RemoteException e) {
+				log.error(e.getMessage(), e);
+				throw new RestAPIException(e.getMessage(), e);
+			} catch (AutoscalerServiceInvalidPolicyExceptionException e) {
+				String message = e.getFaultMessage().getInvalidPolicyException().getMessage();
+				log.error(message, e);
+				throw new RestAPIException(message, e);
+			}
+		}
+	}
 
     public static AutoscalePolicyBean[] getAutoScalePolicies() throws RestAPIException {
 
@@ -771,20 +795,20 @@ public class StratosApiV41Utils {
             if (serviceGroupDefinition == null) {
                 throw new RuntimeException("Service Group definition is null");
             }
-
-            List<String> cartridgeTypes = null;
+            
+            List<String> cartridgeTypes = new ArrayList<String>();
             String[] cartridgeNames = null;
             List<String> groupNames = null;
             String[] cartridgeGroupNames = null;
 
             // if any cartridges are specified in the group, they should be already deployed
             if (serviceGroupDefinition.getCartridges() != null) {
-
+            	
                 if (log.isDebugEnabled()) {
                     log.debug("checking cartridges in cartridge group " + serviceGroupDefinition.getName());
                 }
 
-                cartridgeTypes = serviceGroupDefinition.getCartridges();
+                findCartridgesInGroupBean(serviceGroupDefinition, cartridgeTypes);
 
                 Set<String> duplicates = findDuplicates(cartridgeTypes);
                 if (duplicates.size() > 0) {
@@ -799,9 +823,9 @@ public class StratosApiV41Utils {
                 }
 
                 CloudControllerServiceClient ccServiceClient = getCloudControllerServiceClient();
-
+                
                 cartridgeNames = new String[cartridgeTypes.size()];
-                int i = 0;
+                int i=0;
                 for (String cartridgeType : cartridgeTypes) {
                     try {
                         if (ccServiceClient.getCartridgeInfo(cartridgeType) == null) {
@@ -809,8 +833,8 @@ public class StratosApiV41Utils {
                             log.error("invalid cartridge found in cartridge group " + cartridgeType);
                             throw new RestAPIException("No Cartridge Definition found with type " + cartridgeType);
                         } else {
-                            cartridgeNames[i] = cartridgeType;
-                            i++;
+                        	cartridgeNames[i] = cartridgeType;
+                        	i++;
                         }
                     } catch (RemoteException e) {
                         throw new RestAPIException(e);
@@ -829,7 +853,7 @@ public class StratosApiV41Utils {
                 List<GroupBean> groupDefinitions = serviceGroupDefinition.getGroups();
                 groupNames = new ArrayList<String>();
                 cartridgeGroupNames = new String[groupDefinitions.size()];
-                int i = 0;
+                int i=0;
                 for (GroupBean groupList : groupDefinitions) {
                     groupNames.add(groupList.getName());
                     cartridgeGroupNames[i] = groupList.getName();
@@ -847,25 +871,22 @@ public class StratosApiV41Utils {
                         log.debug("duplicate subGroups defined: " + buf.toString());
                     }
                     throw new RestAPIException("Invalid Service Group definition, duplicate subGroups defined:" + buf.toString());
-                }
+                } 
             }
 
             ServiceGroup serviceGroup = ObjectConverter.convertServiceGroupDefinitionToASStubServiceGroup(serviceGroupDefinition);
 
             AutoscalerServiceClient asServiceClient = getAutoscalerServiceClient();
             asServiceClient.addServiceGroup(serviceGroup);
-
+            
             // Add cartridge group elements to SM cache - done after service group has been added
             StratosManagerServiceClient smServiceClient = getStratosManagerServiceClient();
-            if (cartridgeTypes != null) {
-                smServiceClient.addUsedCartridgesInCartridgeGroups(serviceGroupDefinition.getName(), cartridgeNames);
+            if(cartridgeTypes != null) {
+            	smServiceClient.addUsedCartridgesInCartridgeGroups(serviceGroupDefinition.getName(), cartridgeNames);
             }
-            if (groupNames != null) {
-                smServiceClient.addUsedCartridgeGroupsInCartridgeSubGroups(serviceGroupDefinition.getName(), cartridgeGroupNames);
-            }
-
+            
         } catch (Exception e) {
-            String message = "Could not add cartridge group:" + e.getMessage();
+            String message = "Could not add cartridge group";
             log.error(message, e);
             throw new RestAPIException(message, e);
         }
@@ -943,63 +964,85 @@ public class StratosApiV41Utils {
             if (log.isDebugEnabled()) {
                 log.debug("Removing cartridge group: [name] " + name);
             }
-
+            
             AutoscalerServiceClient asServiceClient = getAutoscalerServiceClient();
             StratosManagerServiceClient smServiceClient = getStratosManagerServiceClient();
-
+            
             // Check whether cartridge group exists
-            if (asServiceClient.getServiceGroup(name) == null) {
-                String message = "Cartridge group: [group-name] " + name + " cannot be removed since it does not exist";
+            if(asServiceClient.getServiceGroup(name) == null) {
+            	String message = "Cartridge group: [group-name] " + name + " cannot be removed since it does not exist";
                 log.error(message);
                 throw new RestAPIException(message);
             }
-
+            
             // Validate whether cartridge group can be removed
-            if (!smServiceClient.canCartirdgeGroupBeRemoved(name)) {
-                String message = "Cannot remove cartridge group: [group-name] " + name + " since it is used in another " +
-                        "cartridge group or an application";
+            if(!smServiceClient.canCartirdgeGroupBeRemoved(name)) {
+            	String message = "Cannot remove cartridge group: [group-name] " + name + " since it is used in another cartridge group or an application";
                 log.error(message);
                 throw new RestAPIException(message);
             }
-
+            
             ServiceGroup serviceGroup = asServiceClient.getServiceGroup(name);
-
+            
             asServiceClient.undeployServiceGroupDefinition(name);
-
-            // Remove the dependent cartridges and cartridge groups from Stratos Manager cache - done after service group
-            // has been removed
+            
+            // Remove the dependent cartridges and cartridge groups from Stratos Manager cache - done after service group has been removed
             if (serviceGroup.getCartridges() != null) {
-                String[] cartridgeNames = serviceGroup.getCartridges();
-                smServiceClient.removeUsedCartridgesInCartridgeGroups(name, cartridgeNames);
-            }
-
-            if (serviceGroup.getGroups() != null) {
-                ServiceGroup[] cartridgeGroups = serviceGroup.getGroups();
-                String[] cartridgeGroupNames = new String[cartridgeGroups.length];
-                int i = 0;
-                for (ServiceGroup cartridgeGroup : cartridgeGroups) {
-                    if (cartridgeGroup != null) {
-                        cartridgeGroupNames[i] = cartridgeGroup.getName();
-                        i++;
-                    } else {
-                        break;
-                    }
-                }
-                smServiceClient.removeUsedCartridgeGroupsInCartridgeSubGroups(name, cartridgeGroupNames);
+            	List<String> cartridgeList = new ArrayList<String>();
+            	findCartridgesInServiceGroup(serviceGroup, cartridgeList);
+            	String[] cartridgeNames = cartridgeList.toArray(new String[cartridgeList.size()]);
+            	smServiceClient.removeUsedCartridgesInCartridgeGroups(name, cartridgeNames);
             }
-
+            
         } catch (Exception e) {
             throw new RestAPIException(e);
         }
 
         log.info("Successfully removed the cartridge group: [group-name] " + name);
     }
+    
+    private static void findCartridgesInServiceGroup(ServiceGroup serviceGroup, List<String> cartridges) {
+    	
+    	if (serviceGroup == null || cartridges == null) {
+			return;
+		}
+    	
+    	for (String cartridge : serviceGroup.getCartridges()) {
+    		if (!cartridges.contains(cartridge)) {
+    			cartridges.add(cartridge);
+			}
+		}
+    	
+    	if (serviceGroup.getGroups() != null) {
+			for (ServiceGroup seGroup : serviceGroup.getGroups()) {
+				findCartridgesInServiceGroup(seGroup, cartridges);
+			}
+		}
+    }
+    
+    private static void findCartridgesInGroupBean(GroupBean groupBean, List<String> cartridges) {
+    	
+    	if (groupBean == null || cartridges == null) {
+			return;
+		}
+    	
+    	for (String cartridge : groupBean.getCartridges()) {
+    		if (!cartridges.contains(cartridge)) {
+    			cartridges.add(cartridge);
+			}
+		}
+    	
+    	if (groupBean.getGroups() != null) {
+			for (GroupBean seGroup : groupBean.getGroups()) {
+				findCartridgesInGroupBean(seGroup, cartridges);
+			}
+		}
+    }
 
     // Util methods for Applications
 
     /**
      * Verify the existence of the application and add it.
-     *
      * @param appDefinition
      * @param ctxt
      * @param userName
@@ -1007,14 +1050,14 @@ public class StratosApiV41Utils {
      * @throws RestAPIException
      */
     public static void addApplication(ApplicationBean appDefinition, ConfigurationContext ctxt,
-                                      String userName, String tenantDomain)
+                                                   String userName, String tenantDomain)
             throws RestAPIException {
 
-        if (StringUtils.isBlank(appDefinition.getApplicationId())) {
-            String message = "Please specify the application name";
-            log.error(message);
-            throw new RestAPIException(message);
-        }
+	    if (StringUtils.isBlank(appDefinition.getApplicationId())) {
+		    String message = "Please specify the application name";
+		    log.error(message);
+		    throw new RestAPIException(message);
+	    }
         // check if an application with same id already exists
         try {
             if (AutoscalerServiceClient.getInstance().getApplication(appDefinition.getApplicationId()) != null) {
@@ -1025,10 +1068,9 @@ public class StratosApiV41Utils {
             throw new RestAPIException("Could not read application", e);
         }
 
-        validateApplication(appDefinition);
+	    validateApplication(appDefinition);
 
-        ApplicationContext applicationContext = ObjectConverter.convertApplicationDefinitionToStubApplicationContext(
-                appDefinition);
+        ApplicationContext applicationContext = ObjectConverter.convertApplicationDefinitionToStubApplicationContext(appDefinition);
         applicationContext.setTenantId(ApplicationManagementUtil.getTenantId(ctxt));
         applicationContext.setTenantDomain(tenantDomain);
         applicationContext.setTenantAdminUsername(userName);
@@ -1046,60 +1088,89 @@ public class StratosApiV41Utils {
 
         try {
             AutoscalerServiceClient.getInstance().addApplication(applicationContext);
-
-            // Add application elements to SM cache - done after application has been added
-            String[] cartridgeNames;
-            String[] cartridgeGroupNames;
-
+            
+            List<String> usedCartridges = new ArrayList<String>();
+            List<String> usedCartridgeGroups = new ArrayList<String>();
+            findCartridgesAndGroupsInApplication(appDefinition, usedCartridges, usedCartridgeGroups);
             StratosManagerServiceClient smServiceClient = getStratosManagerServiceClient();
-
-            List<CartridgeReferenceBean> cartridges = appDefinition.getComponents().getCartridges();
-            if (cartridges != null) {
-                cartridgeNames = new String[cartridges.size()];
-                int i = 0;
-                for (CartridgeReferenceBean cartridge : cartridges) {
-                    cartridgeNames[i] = cartridge.getType();
-                    i++;
-                }
-
-                smServiceClient.addUsedCartridgesInApplications(appDefinition.getApplicationId(), cartridgeNames);
-            }
-
-            List<GroupReferenceBean> cartridgeGroups = appDefinition.getComponents().getGroups();
-            if (cartridgeGroups != null) {
-                cartridgeGroupNames = new String[cartridgeGroups.size()];
-                int i = 0;
-                for (GroupReferenceBean cartridgeGroup : cartridgeGroups) {
-                    cartridgeGroupNames[i] = cartridgeGroup.getName();
-                    i++;
-                }
-
-                smServiceClient.addUsedCartridgeGroupsInApplications(appDefinition.getApplicationId(), cartridgeGroupNames);
-            }
-
+            smServiceClient.addUsedCartridgesInApplications(appDefinition.getApplicationId(), usedCartridges.toArray(new String[usedCartridges.size()]));
+            smServiceClient.addUsedCartridgeGroupsInApplications(appDefinition.getApplicationId(), usedCartridgeGroups.toArray(new String[usedCartridgeGroups.size()]));
+            
         } catch (AutoscalerServiceApplicationDefinitionExceptionException e) {
             throw new RestAPIException(e);
         } catch (RemoteException e) {
             throw new RestAPIException(e);
         }
     }
-
-    private static void validateApplication(ApplicationBean appDefinition) throws RestAPIException {
-
-        if (StringUtils.isBlank(appDefinition.getAlias())) {
-            String message = "Please specify the application alias";
-            log.error(message);
-            throw new RestAPIException(message);
-        }
-    }
-
-    /**
-     * Deploy application with an application policy.
-     *
-     * @param applicationId
-     * @param applicationPolicyId
-     * @throws RestAPIException
-     */
+    
+    private static void findCartridgesAndGroupsInApplication(ApplicationBean applicationBean, List<String> cartridges, List<String> cartridgeGroups) {
+    	
+    	if (applicationBean == null || applicationBean.getComponents() == null) {
+			return;
+		}
+    	
+    	ComponentBean componentBean = applicationBean.getComponents();
+    	
+    	List<GroupReferenceBean> groupReferenceBeans = componentBean.getGroups();
+    	if (groupReferenceBeans != null) {
+    		for (GroupReferenceBean groupReferenceBean : groupReferenceBeans) {
+    			findCartridgesAndGroupsInCartridgeGroup(groupReferenceBean, cartridges, cartridgeGroups);
+			}
+		}
+    	
+    	List<CartridgeReferenceBean> cartridgeReferenceBeans = componentBean.getCartridges();
+    	findCartridgeNamesInCartridges(cartridgeReferenceBeans, cartridges);
+    }
+    
+    private static void findCartridgesAndGroupsInCartridgeGroup(GroupReferenceBean groupReferenceBean, List<String> cartridges, List<String> cartridgeGroups) {
+    	
+    	if (groupReferenceBean == null || cartridgeGroups == null) {
+			return;
+		}
+    	
+    	if (!cartridgeGroups.contains(groupReferenceBean.getName())) {
+    		cartridgeGroups.add(groupReferenceBean.getName());
+		}
+    	
+    	if (groupReferenceBean.getGroups() != null) {
+			for (GroupReferenceBean grReferenceBean : groupReferenceBean.getGroups()) {
+				findCartridgesAndGroupsInCartridgeGroup(grReferenceBean, cartridges, cartridgeGroups);
+				findCartridgeNamesInCartridges(groupReferenceBean.getCartridges(), cartridges);
+			}
+		}
+    	
+    	findCartridgeNamesInCartridges(groupReferenceBean.getCartridges(), cartridges);
+    }
+    
+    private static void findCartridgeNamesInCartridges(List<CartridgeReferenceBean> cartridgeReferenceBeans, List<String> cartridges) {
+    	
+    	if (cartridgeReferenceBeans == null || cartridges == null) {
+			return;
+		}
+    	
+    	for (CartridgeReferenceBean cartridgeReferenceBean : cartridgeReferenceBeans) {
+    		if (cartridgeReferenceBean != null && !cartridges.contains(cartridgeReferenceBean.getType())) {
+    			cartridges.add(cartridgeReferenceBean.getType());
+    		}
+    	}
+    }
+    
+	private static void validateApplication(ApplicationBean appDefinition) throws RestAPIException {
+
+		if(StringUtils.isBlank(appDefinition.getAlias())){
+			String message ="Please specify the application alias";
+			log.error(message);
+			throw new RestAPIException(message);
+		}
+	}
+
+	/**
+	 * Deploy application with an application policy.
+	 * 
+	 * @param applicationId
+	 * @param applicationPolicyId
+	 * @throws RestAPIException
+	 */
     public static void deployApplication(String applicationId, String applicationPolicyId)
             throws RestAPIException {
 
@@ -1111,12 +1182,12 @@ public class StratosApiV41Utils {
             AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
             ApplicationContext application = autoscalerServiceClient.getApplication(applicationId);
 
-            if (StringUtils.isBlank(applicationId)) {
-                String message = "Please specify the application id of the application";
-                log.error(message);
-                throw new RestAPIException(message);
-            }
-            if (application == null) {
+	        if (StringUtils.isBlank(applicationId)) {
+		        String message ="Please specify the application id of the application";
+		        log.error(message);
+		        throw new RestAPIException(message);
+	        }
+            if(application == null) {
                 String message = String.format("Application is not found: [application-id] %s", applicationId);
                 log.error(message);
                 throw new RestAPIException(message);
@@ -1126,31 +1197,26 @@ public class StratosApiV41Utils {
                 log.error(message);
                 throw new RestAPIException(message);
             }
-            if (applicationPolicyId == null) {
+            if(applicationPolicyId == null) {
                 String message = String.format("Application policy id is not found: [application-policy-id] %s", applicationPolicyId);
                 log.error(message);
                 throw new RestAPIException(message);
             }
             if (StringUtils.isBlank(applicationPolicyId)) {
                 String message = String.format("Application policy id cannot be null : [application-policy-id] %s. "
-                        + "Are you passing application policy?", applicationPolicyId);
+                		+ "Are you passing application policy?", applicationPolicyId);
                 log.error(message);
                 throw new RestAPIException(message);
-            }
+			}
 
             ApplicationBean applicationBean = getApplication(applicationId);
             int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
             if (applicationBean.isMultiTenant() && (tenantId != -1234)) {
-                String message = String.format("Multi-tenant applications can only be deployed by super tenant: " +
-                        "[application-id] %s", applicationId);
+                String message = String.format("Multi-tenant applications can only be deployed by super tenant: [application-id] %s", applicationId);
                 log.error(message);
                 throw new RestAPIException(message);
             }
 
-//            ApplicationPolicy ccStubApplicationPolicy = ObjectConverter.convertApplicationPolicyBeanToStubAppPolicy(applicationPolicy);
-            // setting the application id since application-policy.json doesn't have this attribute explicitly
-            // reason is deployApplication() api path is containing the application id
-//            ccStubApplicationPolicy.setApplicationId(applicationId);
             autoscalerServiceClient.deployApplication(applicationId, applicationPolicyId);
             if (log.isInfoEnabled()) {
                 log.info(String.format("Application deployed successfully: [application-id] %s", applicationId));
@@ -1168,7 +1234,7 @@ public class StratosApiV41Utils {
             throw new RestAPIException(message, e);
         }
     }
-
+    
     public static ApplicationNetworkPartitionIdListBean getApplicationNetworkPartitions(String applicationId) {
         try {
             AutoscalerServiceClient serviceClient = AutoscalerServiceClient.getInstance();
@@ -1183,63 +1249,39 @@ public class StratosApiV41Utils {
         }
     }
 
-    /**
-     * Validate deployment policy
-     *
-     * @param deploymentPolicy
-     */
-    private static void validateDeploymentPolicy(DeploymentPolicyBean deploymentPolicy) throws RestAPIException {
-        if (StringUtils.isBlank(deploymentPolicy.getId())) {
-            String message = "No deployment policy id specify with the policy";
-            log.error(message);
-            throw new RestAPIException(message);
-        }
-        if (deploymentPolicy.getNetworkPartitions().size() == 0) {
-            String message = "No network partitions specify with the policy";
-            log.error(message);
-            throw new RestAPIException(message);
-        }
+	/**
+	 * Validate deployment policy
+	 * @param deploymentPolicy
+	 */
+	private static void validateDeploymentPolicy(DeploymentPolicyBean deploymentPolicy) throws RestAPIException {
+		if(StringUtils.isBlank(deploymentPolicy.getId())){
+			String message = "No deployment policy id specify with the policy";
+			log.error(message);
+			throw new RestAPIException(message);
+		}
+		if(deploymentPolicy.getNetworkPartitions().size()==0){
+			String message="No network partitions specify with the policy";
+			log.error(message);
+			throw new RestAPIException(message);
+		}
 
-    }
+	}
 
-    public static void removeApplication(String applicationId) throws RestAPIException {
+	public static void removeApplication(String applicationId) throws RestAPIException {
 
         try {
-            AutoscalerServiceClient asServiceClient = getAutoscalerServiceClient();
-
-            ApplicationBean application = ObjectConverter.convertStubApplicationContextToApplicationDefinition(
-                    asServiceClient.getApplication(applicationId));
-            asServiceClient.deleteApplication(applicationId);
-
-            // Remove application elements in SM cache - done after deleting
-            String[] cartridgeNames;
-            String[] cartridgeGroupNames;
+        	AutoscalerServiceClient asServiceClient = getAutoscalerServiceClient();
+        	
+        	ApplicationBean application = ObjectConverter.convertStubApplicationContextToApplicationDefinition(asServiceClient.getApplication(applicationId));
+        	asServiceClient.deleteApplication(applicationId);
+            
+            List<String> usedCartridges = new ArrayList<String>();
+            List<String> usedCartridgeGroups = new ArrayList<String>();
+            findCartridgesAndGroupsInApplication(application, usedCartridges, usedCartridgeGroups);
             StratosManagerServiceClient smServiceClient = getStratosManagerServiceClient();
-
-            List<CartridgeReferenceBean> cartridges = application.getComponents().getCartridges();
-            if (cartridges != null) {
-                cartridgeNames = new String[cartridges.size()];
-                int i = 0;
-                for (CartridgeReferenceBean cartridge : cartridges) {
-                    cartridgeNames[i] = cartridge.getType();
-                    i++;
-                }
-
-                smServiceClient.removeUsedCartridgesInApplications(application.getApplicationId(), cartridgeNames);
-            }
-
-            List<GroupReferenceBean> cartridgeGroups = application.getComponents().getGroups();
-            if (cartridgeGroups != null) {
-                cartridgeGroupNames = new String[cartridgeGroups.size()];
-                int i = 0;
-                for (GroupReferenceBean cartridgeGroup : cartridgeGroups) {
-                    cartridgeGroupNames[i] = cartridgeGroup.getName();
-                    i++;
-                }
-
-                smServiceClient.removeUsedCartridgeGroupsInApplications(application.getApplicationId(), cartridgeGroupNames);
-            }
-
+            smServiceClient.removeUsedCartridgesInApplications(application.getApplicationId(), usedCartridges.toArray(new String[usedCartridges.size()]));
+            smServiceClient.removeUsedCartridgeGroupsInApplications(application.getApplicationId(), usedCartridgeGroups.toArray(new String[usedCartridgeGroups.size()]));
+            
         } catch (RemoteException e) {
             String message = "Could not delete application: [application-id] " + applicationId;
             log.error(message, e);
@@ -1262,9 +1304,9 @@ public class StratosApiV41Utils {
         try {
             List<ApplicationBean> applicationDefinitions = new ArrayList<ApplicationBean>();
             ApplicationContext[] applicationContexts = AutoscalerServiceClient.getInstance().getApplications();
-            if (applicationContexts != null) {
+            if(applicationContexts != null) {
                 for (ApplicationContext applicationContext : applicationContexts) {
-                    if (applicationContext != null) {
+                    if(applicationContext != null) {
                         ApplicationBean applicationDefinition =
                                 ObjectConverter.convertStubApplicationContextToApplicationDefinition(applicationContext);
                         applicationDefinitions.add(applicationDefinition);
@@ -1284,7 +1326,7 @@ public class StratosApiV41Utils {
         if (autoscalerServiceClient != null) {
             try {
                 ApplicationContext application = autoscalerServiceClient.getApplication(applicationId);
-                if (application == null) {
+                if(application == null) {
                     String message = String.format("Application is not found: [application-id] %s", applicationId);
                     log.error(message);
                     throw new RestAPIException(message);
@@ -1307,7 +1349,7 @@ public class StratosApiV41Utils {
             }
         }
     }
-
+    
     public static ApplicationInfoBean[] getApplicationRuntimes() {
         List<ApplicationInfoBean> applicationBeanList = new ArrayList<ApplicationInfoBean>();
         try {
@@ -1315,7 +1357,7 @@ public class StratosApiV41Utils {
             ApplicationInfoBean applicationInfoBean;
             for (Application application : ApplicationManager.getApplications().getApplications().values()) {
                 applicationInfoBean = ObjectConverter.convertApplicationToApplicationBean(application);
-                for (ApplicationInstanceBean instanceBean : applicationInfoBean.getApplicationInstances()) {
+                for(ApplicationInstanceBean instanceBean : applicationInfoBean.getApplicationInstances()) {
                     addClustersInstancesToApplicationInstanceBean(instanceBean, application);
                     addGroupsInstancesToApplicationInstanceBean(instanceBean, application);
                 }
@@ -1337,7 +1379,7 @@ public class StratosApiV41Utils {
                 return null;
             }
             applicationBean = ObjectConverter.convertApplicationToApplicationInstanceBean(application);
-            for (ApplicationInstanceBean instanceBean : applicationBean.getApplicationInstances()) {
+            for(ApplicationInstanceBean instanceBean : applicationBean.getApplicationInstances()) {
                 addClustersInstancesToApplicationInstanceBean(instanceBean, application);
                 addGroupsInstancesToApplicationInstanceBean(instanceBean, application);
             }
@@ -1347,15 +1389,14 @@ public class StratosApiV41Utils {
         }
         return applicationBean;
     }
-
     private static void addGroupsInstancesToApplicationInstanceBean(ApplicationInstanceBean applicationInstanceBean,
                                                                     Application application) {
         Collection<Group> groups = application.getGroups();
-        if (groups != null && !groups.isEmpty()) {
+        if(groups != null && !groups.isEmpty()) {
             for (Group group : groups) {
                 List<GroupInstanceBean> groupInstanceBeans = ObjectConverter.convertGroupToGroupInstancesBean(
                         applicationInstanceBean.getInstanceId(), group);
-                for (GroupInstanceBean groupInstanceBean : groupInstanceBeans) {
+                for(GroupInstanceBean groupInstanceBean : groupInstanceBeans) {
                     setSubGroupInstances(group, groupInstanceBean);
                     applicationInstanceBean.getGroupInstances().add(groupInstanceBean);
                 }
@@ -1369,7 +1410,7 @@ public class StratosApiV41Utils {
             Application application) {
 
         Map<String, ClusterDataHolder> topLevelClusterDataMap = application.getClusterDataMap();
-        if (topLevelClusterDataMap != null) {
+        if(topLevelClusterDataMap != null) {
             for (Map.Entry<String, ClusterDataHolder> entry : topLevelClusterDataMap.entrySet()) {
                 ClusterDataHolder clusterDataHolder = entry.getValue();
                 String clusterId = clusterDataHolder.getClusterId();
@@ -1380,9 +1421,9 @@ public class StratosApiV41Utils {
                     applicationInstanceBean.getClusterInstances().add(ObjectConverter.
                             convertClusterToClusterInstanceBean(applicationInstanceBean.getInstanceId(),
                                     cluster, entry.getKey()));
-                } finally {
-                    TopologyManager.releaseReadLockForCluster(serviceType, clusterId);
-                }
+	            } finally {
+		            TopologyManager.releaseReadLockForCluster(serviceType, clusterId);
+	            }
             }
         }
     }
@@ -1391,7 +1432,7 @@ public class StratosApiV41Utils {
             GroupInstanceBean groupInstanceBean,
             Group group) {
         Map<String, ClusterDataHolder> topLevelClusterDataMap = group.getClusterDataMap();
-        if (topLevelClusterDataMap != null && !topLevelClusterDataMap.isEmpty()) {
+        if(topLevelClusterDataMap != null && !topLevelClusterDataMap.isEmpty()) {
             for (Map.Entry<String, ClusterDataHolder> entry : topLevelClusterDataMap.entrySet()) {
                 ClusterDataHolder clusterDataHolder = entry.getValue();
                 String clusterId = clusterDataHolder.getClusterId();
@@ -1413,12 +1454,12 @@ public class StratosApiV41Utils {
     private static void setSubGroupInstances(Group group, GroupInstanceBean groupInstanceBean) {
         Collection<Group> subgroups = group.getGroups();
         addClustersInstancesToGroupInstanceBean(groupInstanceBean, group);
-        if (subgroups != null && !subgroups.isEmpty()) {
+        if(subgroups != null && !subgroups.isEmpty()) {
             for (Group subGroup : subgroups) {
                 List<GroupInstanceBean> groupInstanceBeans = ObjectConverter.
                         convertGroupToGroupInstancesBean(groupInstanceBean.getInstanceId(),
                                 subGroup);
-                for (GroupInstanceBean groupInstanceBean1 : groupInstanceBeans) {
+                for(GroupInstanceBean groupInstanceBean1 : groupInstanceBeans) {
                     setSubGroupInstances(subGroup, groupInstanceBean1);
                     groupInstanceBean.getGroupInstances().add(groupInstanceBean1);
                 }
@@ -1429,7 +1470,7 @@ public class StratosApiV41Utils {
     }
 
     // Util methods for Kubernetes clusters
-
+    
     public static boolean addKubernetesCluster(KubernetesClusterBean kubernetesClusterBean) throws RestAPIException {
 
         CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
@@ -1645,40 +1686,38 @@ public class StratosApiV41Utils {
         return false;
     }
 
-    public static void addApplicationSignUp(String applicationId, ApplicationSignUpBean applicationSignUpBean)
-            throws RestAPIException {
-        if (StringUtils.isBlank(applicationId)) {
+    public static void addApplicationSignUp(String applicationId, ApplicationSignUpBean applicationSignUpBean) throws RestAPIException {
+        if(StringUtils.isBlank(applicationId)) {
             throw new RestAPIException("Application id is null");
         }
 
         ApplicationBean applicationBean = getApplication(applicationId);
         Application application = ApplicationManager.getApplications().getApplication(applicationId);
 
-        if ((applicationBean == null) || (application == null)) {
+        if((applicationBean == null) || (application == null)) {
             throw new RestAPIException("Application not found: [application-id] " + applicationId);
         }
 
-        if (!APPLICATION_STATUS_DEPLOYED.equals(applicationBean.getStatus())) {
+        if(!APPLICATION_STATUS_DEPLOYED.equals(applicationBean.getStatus())) {
             throw new RestAPIException("Application has not been deployed: [application-id] " + applicationId);
         }
 
-        if (!applicationBean.isMultiTenant()) {
+        if(!applicationBean.isMultiTenant()) {
             throw new RestAPIException("Application signups cannot be added to single-tenant applications");
         }
 
-        if (applicationSignUpBean == null) {
+        if(applicationSignUpBean == null) {
             throw new RestAPIException("Application signup is null");
         }
 
         try {
-            if (log.isInfoEnabled()) {
+            if(log.isInfoEnabled()) {
                 log.info(String.format("Adding applicationBean signup: [application-id] %s", applicationId));
             }
 
             int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
 
-            ApplicationSignUp applicationSignUp = ObjectConverter.convertApplicationSignUpBeanToStubApplicationSignUp(
-                    applicationSignUpBean);
+            ApplicationSignUp applicationSignUp = ObjectConverter.convertApplicationSignUpBeanToStubApplicationSignUp(applicationSignUpBean);
             applicationSignUp.setApplicationId(applicationId);
             applicationSignUp.setTenantId(tenantId);
             List<String> clusterIds = findApplicationClusterIds(application);
@@ -1691,13 +1730,13 @@ public class StratosApiV41Utils {
             StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
             serviceClient.addApplicationSignUp(applicationSignUp);
 
-            if (log.isInfoEnabled()) {
+            if(log.isInfoEnabled()) {
                 log.info(String.format("Application signup added successfully: [application-id] %s [tenant-id] %d",
                         applicationId, tenantId));
             }
 
             serviceClient.notifyArtifactUpdatedEventForSignUp(applicationId, tenantId);
-            if (log.isInfoEnabled()) {
+            if(log.isInfoEnabled()) {
                 log.info(String.format("Artifact updated event sent: [application-id] %s [tenant-id] %d",
                         applicationId, tenantId));
             }
@@ -1710,13 +1749,12 @@ public class StratosApiV41Utils {
 
     /**
      * Find application cluster ids.
-     *
      * @param application
      * @return
      */
     private static List<String> findApplicationClusterIds(Application application) {
         List<String> clusterIds = new ArrayList<String>();
-        for (ClusterDataHolder clusterDataHolder : application.getClusterDataRecursively()) {
+        for(ClusterDataHolder clusterDataHolder : application.getClusterDataRecursively()) {
             clusterIds.add(clusterDataHolder.getClusterId());
         }
         return clusterIds;
@@ -1724,7 +1762,6 @@ public class StratosApiV41Utils {
 
     /**
      * Encrypt artifact repository passwords.
-     *
      * @param applicationSignUp
      * @param applicationKey
      */
@@ -1748,16 +1785,16 @@ public class StratosApiV41Utils {
     }
 
     public static ApplicationSignUpBean getApplicationSignUp(String applicationId) throws RestAPIException {
-        if (StringUtils.isBlank(applicationId)) {
+        if(StringUtils.isBlank(applicationId)) {
             throw new RestAPIException("Application id is null");
         }
 
         ApplicationBean application = getApplication(applicationId);
-        if (application == null) {
+        if(application == null) {
             throw new RestAPIException("Application does not exist: [application-id] " + applicationId);
         }
 
-        if (!application.isMultiTenant()) {
+        if(!application.isMultiTenant()) {
             throw new RestAPIException("Application singups not available for single-tenant applications");
         }
 
@@ -1766,7 +1803,7 @@ public class StratosApiV41Utils {
         try {
             StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
             ApplicationSignUp applicationSignUp = serviceClient.getApplicationSignUp(applicationId, tenantId);
-            if (applicationSignUp != null) {
+            if(applicationSignUp != null) {
                 return ObjectConverter.convertStubApplicationSignUpToApplicationSignUpBean(applicationSignUp);
             }
             return null;
@@ -1779,16 +1816,16 @@ public class StratosApiV41Utils {
     }
 
     public static void removeApplicationSignUp(String applicationId) throws RestAPIException {
-        if (StringUtils.isBlank(applicationId)) {
+        if(StringUtils.isBlank(applicationId)) {
             throw new RestAPIException("Application id is null");
         }
 
         ApplicationBean application = getApplication(applicationId);
-        if (application == null) {
+        if(application == null) {
             throw new RestAPIException("Application does not exist: [application-id] " + applicationId);
         }
 
-        if (!application.isMultiTenant()) {
+        if(!application.isMultiTenant()) {
             throw new RestAPIException("Application singups not available for single-tenant applications");
         }
 
@@ -1798,7 +1835,7 @@ public class StratosApiV41Utils {
             StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
             serviceClient.removeApplicationSignUp(applicationId, tenantId);
 
-            if (log.isInfoEnabled()) {
+            if(log.isInfoEnabled()) {
                 log.info(String.format("Application signup removed successfully: [application-id] %s" +
                         "[tenant-id] %d", applicationId, tenantId));
             }
@@ -1811,16 +1848,16 @@ public class StratosApiV41Utils {
     }
 
     public static List<ApplicationSignUpBean> getApplicationSignUps(String applicationId) throws RestAPIException {
-        if (StringUtils.isBlank(applicationId)) {
+        if(StringUtils.isBlank(applicationId)) {
             throw new RestAPIException("Application id is null");
         }
 
         ApplicationBean application = getApplication(applicationId);
-        if (application == null) {
+        if(application == null) {
             throw new RestAPIException("Application does not exist: [application-id] " + applicationId);
         }
 
-        if (!application.isMultiTenant()) {
+        if(!application.isMultiTenant()) {
             throw new RestAPIException("Application singups not available for single-tenant applications");
         }
 
@@ -1828,9 +1865,9 @@ public class StratosApiV41Utils {
             List<ApplicationSignUpBean> applicationSignUpBeans = new ArrayList<ApplicationSignUpBean>();
             StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
             ApplicationSignUp[] applicationSignUps = serviceClient.getApplicationSignUps(applicationId);
-            if (applicationSignUps != null) {
-                for (ApplicationSignUp applicationSignUp : applicationSignUps) {
-                    if (applicationSignUp != null) {
+            if(applicationSignUps != null) {
+                for(ApplicationSignUp applicationSignUp : applicationSignUps) {
+                    if(applicationSignUp != null) {
                         ApplicationSignUpBean applicationSignUpBean =
                                 ObjectConverter.convertStubApplicationSignUpToApplicationSignUpBean(applicationSignUp);
                         applicationSignUpBeans.add(applicationSignUpBean);
@@ -1846,29 +1883,26 @@ public class StratosApiV41Utils {
     }
 
     public static void addApplicationDomainMappings(String applicationId,
-                                                    ApplicationDomainMappingsBean domainMapppingsBean)
-            throws RestAPIException {
+                                                    ApplicationDomainMappingsBean domainMapppingsBean) throws RestAPIException {
 
         try {
             int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
-            if (domainMapppingsBean.getDomainMappings() != null) {
+            if(domainMapppingsBean.getDomainMappings() != null) {
                 StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
 
-                for (DomainMappingBean domainMappingBean : domainMapppingsBean.getDomainMappings()) {
-                    ClusterDataHolder clusterDataHolder = findClusterDataHolder(applicationId,
-                            domainMappingBean.getCartridgeAlias());
+                for(DomainMappingBean domainMappingBean : domainMapppingsBean.getDomainMappings()) {
+                    ClusterDataHolder clusterDataHolder = findClusterDataHolder(applicationId, domainMappingBean.getCartridgeAlias());
 
-                    DomainMapping domainMapping = ObjectConverter.convertDomainMappingBeanToStubDomainMapping(
-                            domainMappingBean);
+                    DomainMapping domainMapping = ObjectConverter.convertDomainMappingBeanToStubDomainMapping(domainMappingBean);
                     domainMapping.setApplicationId(applicationId);
                     domainMapping.setTenantId(tenantId);
                     domainMapping.setServiceName(clusterDataHolder.getServiceType());
                     domainMapping.setClusterId(clusterDataHolder.getClusterId());
                     serviceClient.addDomainMapping(domainMapping);
 
-                    if (log.isInfoEnabled()) {
+                    if(log.isInfoEnabled()) {
                         log.info(String.format("Domain mapping added: [application-id] %s [tenant-id] %d " +
-                                        "[domain-name] %s [context-path] %s", applicationId, tenantId,
+                                "[domain-name] %s [context-path] %s", applicationId, tenantId,
                                 domainMapping.getDomainName(), domainMapping.getContextPath()));
                     }
                 }
@@ -1882,12 +1916,12 @@ public class StratosApiV41Utils {
 
     private static ClusterDataHolder findClusterDataHolder(String applicationId, String cartridgeAlias) {
         Application application = ApplicationManager.getApplications().getApplication(applicationId);
-        if (application == null) {
+        if(application == null) {
             throw new RuntimeException(String.format("Application not found: [application-id] %s", applicationId));
         }
 
         ClusterDataHolder clusterDataHolder = application.getClusterData(cartridgeAlias);
-        if (clusterDataHolder == null) {
+        if(clusterDataHolder == null) {
             throw new RuntimeException(String.format("Cluster data not found for cartridge alias: [application-id] %s " +
                     "[cartridge-alias] %s", applicationId, cartridgeAlias));
         }
@@ -1901,12 +1935,12 @@ public class StratosApiV41Utils {
         try {
             int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
             StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
-            if (domainMapppingsBean.getDomainMappings() != null) {
+            if(domainMapppingsBean.getDomainMappings() != null) {
 
-                for (DomainMappingBean domainMappingBean : domainMapppingsBean.getDomainMappings()) {
+                for(DomainMappingBean domainMappingBean : domainMapppingsBean.getDomainMappings()) {
                     serviceClient.removeDomainMapping(applicationId, tenantId, domainMappingBean.getDomainName());
 
-                    if (log.isInfoEnabled()) {
+                    if(log.isInfoEnabled()) {
                         log.info(String.format("Domain mapping removed: [application-id] %s [tenant-id] %d " +
                                         "[domain-name] %s", applicationId, tenantId,
                                 domainMappingBean.getDomainName()));
@@ -1926,9 +1960,9 @@ public class StratosApiV41Utils {
             List<DomainMappingBean> domainMappingsBeans = new ArrayList<DomainMappingBean>();
             StratosManagerServiceClient serviceClient = StratosManagerServiceClient.getInstance();
             DomainMapping[] domainMappings = serviceClient.getDomainMappings(applicationId, tenantId);
-            if (domainMappings != null) {
-                for (DomainMapping domainMapping : domainMappings) {
-                    if (domainMapping != null) {
+            if(domainMappings != null) {
+                for(DomainMapping domainMapping : domainMappings) {
+                    if(domainMapping != null) {
                         DomainMappingBean domainMappingBean = ObjectConverter.convertStubDomainMappingToDomainMappingBean(domainMapping);
                         domainMappingsBeans.add(domainMappingBean);
                     }
@@ -1945,8 +1979,7 @@ public class StratosApiV41Utils {
     public static void addNetworkPartition(NetworkPartitionBean networkPartitionBean) {
         try {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
-            serviceClient.addNetworkPartition(ObjectConverter.convertNetworkPartitionToCCStubNetworkPartition(
-                    networkPartitionBean));
+            serviceClient.addNetworkPartition(ObjectConverter.convertNetworkPartitionToCCStubNetworkPartition(networkPartitionBean));
         } catch (Exception e) {
             String message = "Could not add network partition";
             log.error(message);
@@ -1957,8 +1990,7 @@ public class StratosApiV41Utils {
     public static NetworkPartitionBean[] getNetworkPartitions() {
         try {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
-            org.apache.stratos.cloud.controller.stub.domain.NetworkPartition[] networkPartitions
-                    = serviceClient.getNetworkPartitions();
+            org.apache.stratos.cloud.controller.stub.domain.NetworkPartition[] networkPartitions = serviceClient.getNetworkPartitions();
             return ObjectConverter.convertCCStubNetworkPartitionsToNetworkPartitions(networkPartitions);
         } catch (Exception e) {
             String message = "Could not get network partitions";
@@ -1972,8 +2004,7 @@ public class StratosApiV41Utils {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
             serviceClient.removeNetworkPartition(networkPartitionId);
         } catch (Exception e) {
-            String message = String.format("Could not remove network partition: [network-partition-id] %s",
-                    networkPartitionId);
+            String message = String.format("Could not remove network partition: [network-partition-id] %s", networkPartitionId);
             log.error(message);
             throw new RuntimeException(message, e);
         }
@@ -1982,8 +2013,7 @@ public class StratosApiV41Utils {
     public static NetworkPartitionBean getNetworkPartition(String networkPartitionId) {
         try {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
-            org.apache.stratos.cloud.controller.stub.domain.NetworkPartition networkPartition
-                    = serviceClient.getNetworkPartition(networkPartitionId);
+            org.apache.stratos.cloud.controller.stub.domain.NetworkPartition networkPartition = serviceClient.getNetworkPartition(networkPartitionId);
             return ObjectConverter.convertCCStubNetworkPartitionToNetworkPartition(networkPartition);
         } catch (Exception e) {
             String message = String.format("Could not get network partition: [network-partition-id] %s", networkPartitionId);
@@ -1997,7 +2027,7 @@ public class StratosApiV41Utils {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
             serviceClient.updateNetworkPartition(ObjectConverter.
                     convertNetworkPartitionToCCStubNetworkPartition(networkPartition));
-        } catch (Exception e) {
+        }catch (Exception e) {
             String message = String.format("Could not update network partition: [network-partition-id] %s,",
                     networkPartition.getId());
             log.error(message);
@@ -2005,70 +2035,68 @@ public class StratosApiV41Utils {
         }
     }
 
-    /**
-     * Add deployment policy
-     *
-     * @param deployementPolicyDefinitionBean DeploymentPolicyBean
-     */
-    public static void addDeploymentPolicy(DeploymentPolicyBean deployementPolicyDefinitionBean)
-            throws RestAPIException {
-        try {
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Adding deployment policy: [deployment-policy-id] %s ",
-                        deployementPolicyDefinitionBean.getId()));
-            }
-
-            DeploymentPolicy deploymentPolicy =
-
-                    ObjectConverter.convetToCCDeploymentPolicy(deployementPolicyDefinitionBean);
-            CloudControllerServiceClient cloudControllerServiceClient = CloudControllerServiceClient.getInstance();
-            cloudControllerServiceClient.addDeploymentPolicy(deploymentPolicy);
-
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Successfully added deploymentPolicy: [deployment-policy-id] %s ",
-                        deployementPolicyDefinitionBean.getId()));
-            }
-        } catch (CloudControllerServiceDeploymentPolicyAlreadyExistsExceptionException e) {
-            String msg =
-                    "Deployment policy already exist [Deployment-policy-id]" + deployementPolicyDefinitionBean.getId();
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        } catch (Exception e) {
-            String msg = "Could not add deployment policy";
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        }
-    }
-
-    /**
-     * Get deployment policy by deployment policy id
-     *
-     * @param deploymentPolicyID deployment policy id
-     * @return {@link DeploymentPolicyBean}
-     */
-    public static DeploymentPolicyBean getDeployementPolicy(String deploymentPolicyID) throws RestAPIException {
-
-        DeploymentPolicyBean deploymentPolicy = null;
-        try {
-            CloudControllerServiceClient cloudControllerServiceClient = CloudControllerServiceClient.getInstance();
-            deploymentPolicy = ObjectConverter
-                    .convetCCStubDeploymentPolicytoDeploymentPolicy(cloudControllerServiceClient.getDeploymentPolicy
-                            (deploymentPolicyID));
-        } catch (Exception e) {
-            String msg = "Could not find deployment policy deployment-policy-id " + deploymentPolicyID;
-            log.error(msg, e);
-            throw new RestAPIException(msg);
-        }
-
-        return deploymentPolicy;
-    }
-
-    /**
-     * Get deployment policies
-     *
-     * @return array of {@link DeploymentPolicyBean}
-     */
-    public static DeploymentPolicyBean[] getDeployementPolicies() {
+	/**
+	 * Add deployment policy
+	 *
+	 * @param deployementPolicyDefinitionBean DeploymentPolicyBean
+	 */
+	public static void addDeploymentPolicy(DeploymentPolicyBean deployementPolicyDefinitionBean)
+			throws RestAPIException {
+		try {
+			if (log.isDebugEnabled()) {
+				log.debug(String.format("Adding deployment policy: [deployment-policy-id] %s ",
+				                        deployementPolicyDefinitionBean.getId()));
+			}
+
+			DeploymentPolicy deploymentPolicy =
+
+					ObjectConverter.convetToCCDeploymentPolicy(deployementPolicyDefinitionBean);
+			CloudControllerServiceClient cloudControllerServiceClient = CloudControllerServiceClient.getInstance();
+			cloudControllerServiceClient.addDeploymentPolicy(deploymentPolicy);
+
+			if (log.isDebugEnabled()) {
+				log.debug(String.format("Successfully added deploymentPolicy: [deployment-policy-id] %s ",
+				                        deployementPolicyDefinitionBean.getId()));
+			}
+		} catch (CloudControllerServiceDeploymentPolicyAlreadyExistsExceptionException e) {
+			String msg =
+					"Deployment policy already exist [Deployment-policy-id]" + deployementPolicyDefinitionBean.getId();
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		} catch (Exception e) {
+			String msg = "Could not add deployment policy";
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		}
+	}
+
+	/**
+	 * Get deployment policy by deployment policy id
+	 * @param deploymentPolicyID deployment policy id
+	 * @return {@link DeploymentPolicyBean}
+	 */
+	public static DeploymentPolicyBean getDeployementPolicy(String deploymentPolicyID) throws RestAPIException {
+
+		DeploymentPolicyBean deploymentPolicy = null;
+		try {
+			CloudControllerServiceClient cloudControllerServiceClient = CloudControllerServiceClient.getInstance();
+			deploymentPolicy = ObjectConverter
+					.convetCCStubDeploymentPolicytoDeploymentPolicy(cloudControllerServiceClient.getDeploymentPolicy
+							(deploymentPolicyID));
+		} catch (Exception e) {
+			String msg = "Could not find deployment policy deployment-policy-id " + deploymentPolicyID;
+			log.error(msg, e);
+			throw new RestAPIException(msg);
+		}
+
+		return deploymentPolicy;
+	}
+	
+	/**
+	 * Get deployment policies
+	 * @return array of {@link DeploymentPolicyBean}
+	 */
+	public static DeploymentPolicyBean[] getDeployementPolicies() {
         try {
             CloudControllerServiceClient serviceClient = CloudControllerServiceClient.getInstance();
             DeploymentPolicy[] deploymentPolicies = serviceClient.getDeploymentPolicies();
@@ -2080,56 +2108,55 @@ public class StratosApiV41Utils {
         }
     }
 
-    /**
-     * Update deployement policy
-     *
-     * @param deploymentPolicyDefinitionBean DeploymentPolicyBean
-     * @throws RestAPIException
-     */
-    public static void updateDeploymentPolicy(DeploymentPolicyBean deploymentPolicyDefinitionBean)
-            throws RestAPIException {
-        try {
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Adding deployment policy: [deployment-policy-id] %s ",
-                        deploymentPolicyDefinitionBean.getId()));
-            }
-
-            DeploymentPolicy deploymentPolicy =
-                    ObjectConverter.convetToCCDeploymentPolicy(deploy

<TRUNCATED>