You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2014/12/15 19:17:21 UTC

[3/4] stratos git commit: Refining application deployment process

http://git-wip-us.apache.org/repos/asf/stratos/blob/fbcf3847/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 8a2f8a7..274dd8f 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
@@ -26,6 +26,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.stub.*;
 import org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.stub.pojo.ApplicationContext;
+import org.apache.stratos.autoscaler.stub.pojo.ApplicationContextStatus;
 import org.apache.stratos.cloud.controller.stub.*;
 import org.apache.stratos.cloud.controller.stub.domain.CartridgeConfig;
 import org.apache.stratos.cloud.controller.stub.domain.CartridgeInfo;
@@ -82,6 +83,7 @@ public class StratosApiV41Utils {
     public static final String DEVICE_NAME = "volume.device.name";
     public static final String VOLUME_ID = "volume.id";
     public static final String TENANT_RANGE_ALL = "*";
+    public static final String APPLICATION_STATUS_DEPLOYED = "Deployed";
 
     private static Log log = LogFactory.getLog(StratosApiV41Utils.class);
     private static CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager();
@@ -108,7 +110,7 @@ public class StratosApiV41Utils {
         }
         log.info("Successfully deployed cartridge: [type] " + cartridgeDefinitionBean.getType());
     }
-    
+
     public static void deleteCartridgeDefinition(String cartridgeType) throws RestAPIException {
 
         CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
@@ -185,11 +187,11 @@ public class StratosApiV41Utils {
             throw new RestAPIException(msg, e);
         }
     }
-    
+
     public static List<CartridgeDefinitionBean> getCartridgesByFilter(String filter, String criteria, ConfigurationContext configurationContext)
 			throws RestAPIException {
 		List<CartridgeDefinitionBean> cartridges = null;
-		
+
 		if (filter.equals("singleTenant")) {
 			cartridges = getAvailableCartridges(null, false, configurationContext);
 		} else if (filter.equals("multiTenant")) {
@@ -199,14 +201,14 @@ public class StratosApiV41Utils {
 		} else if (filter.equals("provider")) {
 			cartridges = getAvailableCartridgesByProvider(criteria, configurationContext);
 		}
-		
+
 		return cartridges;
 	}
-	
+
 	public static CartridgeDefinitionBean getCartridgeByFilter(String filter, String cartridgeType, ConfigurationContext configurationContext)
 	throws RestAPIException {
 		List<CartridgeDefinitionBean> cartridges = getCartridgesByFilter(filter, null, configurationContext);
-		
+
 		for (CartridgeDefinitionBean cartridge : cartridges) {
 			if (cartridge.getType().equals(cartridgeType)) {
 				return cartridge;
@@ -216,7 +218,7 @@ public class StratosApiV41Utils {
 		log.error(msg);
 		throw new RestAPIException(msg);
 	}
-    
+
     private static List<CartridgeDefinitionBean> getAvailableLbCartridges(Boolean multiTenant,
                                                     ConfigurationContext configurationContext) throws RestAPIException {
         List<CartridgeDefinitionBean> cartridges = getAvailableCartridges(null, multiTenant,
@@ -496,9 +498,9 @@ public class StratosApiV41Utils {
         }
         return true;
     }
-    	
+
     // Util methods to get the service clients
-    
+
     private static CloudControllerServiceClient getCloudControllerServiceClient() throws RestAPIException {
 
         try {
@@ -610,28 +612,8 @@ public class StratosApiV41Utils {
 
         return PojoConverter.populateAutoscalePojo(autoscalePolicy);
     }
-    
-    // Util methods for Deployment policies
-    
-    public static org.apache.stratos.common.beans.autoscaler.policy.deployment.DeploymentPolicy[]
-    getDeploymentPolicies() throws RestAPIException {
-
-        DeploymentPolicy[] deploymentPolicies = null;
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
-            try {
-                deploymentPolicies = autoscalerServiceClient.getDeploymentPolicies();
-            } catch (RemoteException e) {
-                String errorMsg = "Error getting available deployment policies. Cause : " + e.getMessage();
-                log.error(errorMsg, e);
-                throw new RestAPIException(errorMsg, e);
-            }
-        }
-
-
-        return PojoConverter.populateDeploymentPolicyPojos(deploymentPolicies);
-    }
 
+    // Util methods for Deployment policies
     public static org.apache.stratos.common.beans.autoscaler.policy.deployment.DeploymentPolicy
     getDeploymentPolicy(String deploymentPolicyId) throws RestAPIException {
 
@@ -677,7 +659,7 @@ public class StratosApiV41Utils {
 
         return PojoConverter.populatePartitionGroupPojos(partitionGroups);
     }
-    
+
     // Util methods for services and subscriptions
 
     public static List<Cartridge> getSubscriptions(String cartridgeSearchString, String serviceGroup, ConfigurationContext configurationContext) throws RestAPIException {
@@ -756,7 +738,7 @@ public class StratosApiV41Utils {
 
         return cartridges;
     }
-    
+
     private static Cartridge getCartridgeFromSubscription(CartridgeSubscription subscription) throws RestAPIException {
 
         if (subscription == null) {
@@ -824,9 +806,9 @@ public class StratosApiV41Utils {
     public static CartridgeSubscription getCartridgeSubscription(String alias, ConfigurationContext configurationContext) {
         return CartridgeSubscriptionManager.getCartridgeSubscription(ApplicationManagementUtil.getTenantId(configurationContext), alias);
     }
-       
+
     // Util methods for clusters
-    
+
     public static org.apache.stratos.common.beans.topology.Cluster[] getClustersForTenant(ConfigurationContext configurationContext) {
 
         Set<Cluster> clusterSet = TopologyClusterInformationModel.getInstance().getClusters(ApplicationManagementUtil.
@@ -887,7 +869,7 @@ public class StratosApiV41Utils {
     }
 
     // Util methods for service groups
-    
+
     public static void createServiceGroupDefinition(ServiceGroupDefinition serviceGroupDefinition) throws RestAPIException {
 
         try {
@@ -944,27 +926,29 @@ public class StratosApiV41Utils {
 
     // Util methods for Applications
 
-    public static void createApplicationDefinition(ApplicationDefinition appDefinition, ConfigurationContext ctxt,
+    /**
+     * Verify the existence of the application and add it.
+     * @param appDefinition
+     * @param ctxt
+     * @param userName
+     * @param tenantDomain
+     * @throws RestAPIException
+     */
+    public static void addApplication(ApplicationDefinition appDefinition, ConfigurationContext ctxt,
                                                    String userName, String tenantDomain)
             throws RestAPIException {
 
         // check if an application with same id already exists
-        // check if application with same appId / tenant already exists
-        CartridgeSubscriptionManager subscriptionMgr = new CartridgeSubscriptionManager();
-        int tenantId = ApplicationManagementUtil.getTenantId(ctxt);
-        String appId = appDefinition.getApplicationId();
-
         try {
-            if (subscriptionMgr.getApplicationSubscription(appId, tenantId) != null) {
-                String msg = "Duplicate application appId: " + appId + " for tenant " + tenantId;
+            if (AutoscalerServiceClient.getServiceClient().getApplication(appDefinition.getApplicationId()) != null) {
+                String msg = "Application already exists: [application-id]" + appDefinition.getApplicationId();
                 throw new RestAPIException(msg);
             }
-        } catch (ApplicationSubscriptionException e1) {
-            throw new RestAPIException(e1);
+        } catch (RemoteException e) {
+            throw new RestAPIException("Could not read application", e);
         }
 
-        ApplicationContext applicationContext =
-                PojoConverter.convertApplicationBeanToApplicationContext(appDefinition);
+        ApplicationContext applicationContext = PojoConverter.convertApplicationDefinitionToApplicationContext(appDefinition);
         applicationContext.setTenantId(ApplicationManagementUtil.getTenantId(ctxt));
         applicationContext.setTenantDomain(tenantDomain);
         applicationContext.setTeantAdminUsername(userName);
@@ -981,7 +965,7 @@ public class StratosApiV41Utils {
         }
 
         try {
-            AutoscalerServiceClient.getServiceClient().deployApplication(applicationContext);
+            AutoscalerServiceClient.getServiceClient().addApplication(applicationContext);
         } catch (AutoScalerServiceApplicationDefinitionExceptionException e) {
             throw new RestAPIException(e);
         } catch (RemoteException e) {
@@ -991,38 +975,60 @@ public class StratosApiV41Utils {
 
     /**
      * Deploy application with a deployment policy.
-     * @param deploymentPolicyBean
+     *
+     * @param applicationId
+     * @param deploymentPolicy
      * @throws RestAPIException
      */
     public static void deployApplication(
-            org.apache.stratos.common.beans.autoscaler.policy.deployment.DeploymentPolicy deploymentPolicyBean)
+            String applicationId,
+            org.apache.stratos.common.beans.autoscaler.policy.deployment.DeploymentPolicy deploymentPolicy)
             throws RestAPIException {
 
-        if (log.isInfoEnabled()) {
-            log.info(String.format("Starting to deploy application: [application-id] %s",
-                    deploymentPolicyBean.getApplicationId()));
-        }
+        try {
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Starting to deploy application: [application-id] %s", applicationId));
+            }
 
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
+            AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
+            ApplicationContext application = autoscalerServiceClient.getApplication(applicationId);
+            if(application == null) {
+                String message = String.format("Application is not found: [application-id] %s", applicationId);
+                log.error(message);
+                throw new RestAPIException(message);
+            }
+            if ((application != null) && (application.getStatus().equals(APPLICATION_STATUS_DEPLOYED))) {
+                String message = String.format("Application is already deployed: [application-id] %s", applicationId);
+                log.error(message);
+                throw new RestAPIException(message);
+            }
 
-            org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy deploymentPolicy =
-                    PojoConverter.convetToASDeploymentPolicyPojo(deploymentPolicyBean);
+            if (!applicationId.equals(deploymentPolicy.getApplicationPolicy().getApplicationId())) {
+                String message = String.format("Application id %s does not match with the deployment policy",
+                        applicationId);
+                log.error(message);
+                throw new RestAPIException(message);
+            }
 
-            try {
-                autoscalerServiceClient.deployDeploymentPolicy(deploymentPolicy);
-                if(log.isInfoEnabled()) {
-                    log.info(String.format("Application deployed successfully: [application-id] %s [deployment-policy-id] %s",
-                            deploymentPolicy.getApplicationId(), deploymentPolicy.getApplicationId()));
-                }
-            } 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);
+            org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy stubDeploymentPolicy =
+                    PojoConverter.convetToASDeploymentPolicyPojo(deploymentPolicy);
+
+            autoscalerServiceClient.deployApplication(applicationId, stubDeploymentPolicy);
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Application deployed successfully: [application-id] %s [deployment-policy-id] %s",
+                        stubDeploymentPolicy.getApplicationId(), stubDeploymentPolicy.getId()));
             }
+        } 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);
+        } catch (AutoScalerServiceApplicationDefinitionExceptionException e) {
+            String message = e.getMessage();
+            log.error(message, e);
+            throw new RestAPIException(message, e);
         }
     }
 
@@ -1035,34 +1041,62 @@ public class StratosApiV41Utils {
         }
     }
 
-    public static void removeApplicationDefinition(String appId, ConfigurationContext ctxt,
-                                         String userName, String tenantDomain) throws RestAPIException {
+    public static void deleteApplication(String applicationId) throws RestAPIException {
 
         try {
-            int tenantId = ApplicationManagementUtil.getTenantId(ctxt);
-            AutoscalerServiceClient.getServiceClient().undeployApplication(appId, tenantId, tenantDomain);
+            AutoscalerServiceClient.getServiceClient().deleteApplication(applicationId);
+        } catch (RemoteException e) {
+            String message = "Could not delete application: [application-id] " + applicationId;
+            log.error(message, e);
+            throw new RestAPIException(message, e);
+        }
+    }
 
+    public static ApplicationDefinition getApplication(String applicationId) throws RestAPIException {
+        try {
+            return PojoConverter.convertApplicationContextToApplicationDefinition(
+                    AutoscalerServiceClient.getServiceClient().getApplication(applicationId));
         } catch (RemoteException e) {
-            throw new RestAPIException(e);
-        } catch (AutoScalerServiceApplicationDefinitionExceptionException e) {
-            throw new RestAPIException(e);
+            String message = "Could not read application: [application-id] " + applicationId;
+            log.error(message, e);
+            throw new RestAPIException(message, e);
         }
+    }
 
+    public static List<ApplicationDefinition> getApplications() throws RestAPIException {
+        try {
+            List<ApplicationDefinition> applicationDefinitions = new ArrayList<ApplicationDefinition>();
+            ApplicationContext[] applicationContexts = AutoscalerServiceClient.getServiceClient().getApplications();
+            for(ApplicationContext applicationContext : applicationContexts) {
+                ApplicationDefinition applicationDefinition =
+                        PojoConverter.convertApplicationContextToApplicationDefinition(applicationContext);
+            }
+            return applicationDefinitions;
+        } catch (RemoteException e) {
+            String message = "Could not read applications";
+            log.error(message, e);
+            throw new RestAPIException(message, e);
+        }
     }
 
     public static void undeployApplication(String applicationId) throws RestAPIException {
         AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
         if (autoscalerServiceClient != null) {
             try {
-                autoscalerServiceClient.unDeployDeploymentPolicy(applicationId);
+                autoscalerServiceClient.undeployApplication(applicationId);
             } catch (RemoteException e) {
-                log.error("Error while unDeploying the Deployment Policy for  " + applicationId);
-                throw new RestAPIException(e);
+                String message = "Could not undeploy application: [application-id] " + applicationId;
+                log.error(message, e);
+                throw new RestAPIException(message, e);
+            } catch (AutoScalerServiceApplicationDefinitionExceptionException e) {
+                String message = "Could not undeploy application: [application-id] " + applicationId;
+                log.error(message, e);
+                throw new RestAPIException(message, e);
             }
         }
     }
     
-    public static ApplicationBean[] getApplications() {
+    public static ApplicationBean[] getApplicationRuntimes() {
         List<ApplicationBean> applicationBeanList = new ArrayList<ApplicationBean>();
         try {
             ApplicationManager.acquireReadLockForApplications();
@@ -1080,7 +1114,7 @@ public class StratosApiV41Utils {
         return applicationBeanList.toArray(new ApplicationBean[applicationBeanList.size()]);
     }
 
-    public static ApplicationBean getApplication(String applicationId) {
+    public static ApplicationBean getApplicationRuntime(String applicationId) {
         ApplicationBean applicationBean = null;
         try {
             ApplicationManager.acquireReadLockForApplication(applicationId);

http://git-wip-us.apache.org/repos/asf/stratos/blob/fbcf3847/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/PojoConverter.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/PojoConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/PojoConverter.java
index ec4ef53..6c45c58 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/PojoConverter.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/PojoConverter.java
@@ -47,10 +47,7 @@ import org.apache.stratos.cloud.controller.stub.domain.ServiceGroup;
 import org.apache.stratos.cloud.controller.stub.domain.Volume;
 import org.apache.stratos.common.Properties;
 import org.apache.stratos.common.Property;
-import org.apache.stratos.manager.composite.application.beans.ApplicationDefinition;
-import org.apache.stratos.manager.composite.application.beans.CartridgeDefinition;
-import org.apache.stratos.manager.composite.application.beans.GroupDefinition;
-import org.apache.stratos.manager.composite.application.beans.SubscribableInfo;
+import org.apache.stratos.manager.composite.application.beans.*;
 import org.apache.stratos.manager.deploy.service.Service;
 import org.apache.stratos.manager.grouping.definitions.DependencyDefinitions;
 import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
@@ -1060,7 +1057,7 @@ public class PojoConverter {
         return portRangeBean;
     }
 
-    public static ApplicationContext convertApplicationBeanToApplicationContext(ApplicationDefinition compositeAppDefinition) {
+    public static ApplicationContext convertApplicationDefinitionToApplicationContext(ApplicationDefinition compositeAppDefinition) {
 
         org.apache.stratos.autoscaler.stub.pojo.ApplicationContext applicationContext =
                 new org.apache.stratos.autoscaler.stub.pojo.ApplicationContext();
@@ -1075,25 +1072,133 @@ public class PojoConverter {
                       
             // top level Groups
             if (compositeAppDefinition.getComponents().getGroups() != null) {
-                componentContext.setGroupContexts(getgroupContextArrayFromGroupDefinitions(compositeAppDefinition.getComponents().getGroups()));
+                componentContext.setGroupContexts(
+                        convertGroupDefinitionsToGroupContexts(compositeAppDefinition.getComponents().getGroups()));
             }
             // top level dependency information
             if (compositeAppDefinition.getComponents().getDependencies() != null) {
-                componentContext.setDependencyContext(getDependencyContextFromDependencyDefinition(compositeAppDefinition.getComponents().getDependencies()));
+                componentContext.setDependencyContext(
+                        convertDependencyDefinitionsToDependencyContexts(compositeAppDefinition.getComponents().getDependencies()));
             }
             // top level cartridge context information
             if (compositeAppDefinition.getComponents().getCartridges() != null) {
-                componentContext.setCartridgeContexts(getCartridgeContextArrayFromCartridgeDefinition(compositeAppDefinition.getComponents().getCartridges()));
+                componentContext.setCartridgeContexts(
+                        convertCartridgeDefinitionsToCartridgeContexts(compositeAppDefinition.getComponents().getCartridges()));
             }
-
             applicationContext.setComponents(componentContext);
         }
-
-        
         return applicationContext;
     }
 
-    private static CartridgeContext[] getCartridgeContextArrayFromCartridgeDefinition(
+    public static ApplicationDefinition convertApplicationContextToApplicationDefinition(ApplicationContext applicationContext) {
+        ApplicationDefinition applicationDefinition = new ApplicationDefinition();
+        applicationDefinition.setApplicationId(applicationContext.getApplicationId());
+        applicationDefinition.setAlias(applicationContext.getAlias());
+
+        // convert and set components
+        if (applicationContext.getComponents() != null) {
+            // top level Groups
+            if (applicationContext.getComponents().getGroupContexts() != null) {
+                applicationDefinition.getComponents().setGroups(
+                        convertGroupContextsToGroupDefinitions(applicationContext.getComponents().getGroupContexts()));
+            }
+            // top level dependency information
+            if (applicationContext.getComponents().getDependencyContext() != null) {
+                applicationDefinition.getComponents().setDependencies(
+                        convertDependencyContextsToDependencyDefinitions(applicationContext.getComponents().getDependencyContext()));
+            }
+            // top level cartridge context information
+            if (applicationContext.getComponents().getCartridgeContexts() != null) {
+                applicationDefinition.getComponents().setCartridges(
+                        convertCartridgeContextsToCartridgeDefinitions(applicationContext.getComponents().getCartridgeContexts()));
+            }
+        }
+        return applicationDefinition;
+    }
+
+    private static List<GroupDefinition> convertGroupContextsToGroupDefinitions(GroupContext[] groupContexts) {
+        List<GroupDefinition> groupDefinitions = new ArrayList<GroupDefinition>();
+        for(GroupContext groupContext : groupContexts) {
+            GroupDefinition groupDefinition = new GroupDefinition();
+            groupDefinition.setAlias(groupContext.getAlias());
+            groupDefinition.setGroupMaxInstances(groupContext.getGroupMaxInstances());
+            groupDefinition.setGroupMinInstances(groupContext.getGroupMinInstances());
+            groupDefinition.setGroupScalingEnabled(groupContext.getGroupScalingEnabled());
+            groupDefinition.setName(groupContext.getName());
+            groupDefinition.setGroups(convertGroupContextsToGroupDefinitions(groupContext.getGroupContexts()));
+            groupDefinition.setCartridges(convertCartridgeContextsToCartridgeDefinitions(
+                    groupContext.getCartridgeContexts()));
+            groupDefinitions.add(groupDefinition);
+        }
+        return groupDefinitions;
+    }
+
+    private static DependencyDefinitions convertDependencyContextsToDependencyDefinitions(DependencyContext dependencyContext) {
+        DependencyDefinitions dependencyDefinitions = new DependencyDefinitions();
+        dependencyDefinitions.setTerminationBehaviour(dependencyContext.getTerminationBehaviour());
+
+            if(dependencyContext.getStartupOrdersContexts() != null) {
+                List<String> startupOrders = new ArrayList<String>();
+                for(String item : dependencyContext.getStartupOrdersContexts()) {
+                    startupOrders.add(item);
+                }
+                dependencyDefinitions.setStartupOrders(startupOrders);
+            }
+            if (dependencyContext.getScalingDependents() != null) {
+                List<String> scalingDependents = new ArrayList<String>();
+                for(String item : dependencyContext.getScalingDependents()) {
+                    scalingDependents.add(item);
+                }
+                dependencyDefinitions.setScalingDependants(scalingDependents);
+            }
+        return dependencyDefinitions;
+    }
+
+    private static List<CartridgeDefinition> convertCartridgeContextsToCartridgeDefinitions(CartridgeContext[] cartridgeContexts) {
+        List<CartridgeDefinition> cartridgeDefinitions = new ArrayList<CartridgeDefinition>();
+        for(CartridgeContext cartridgeContext : cartridgeContexts) {
+            CartridgeDefinition cartridgeDefinition = new CartridgeDefinition();
+            cartridgeDefinition.setType(cartridgeContext.getType());
+            cartridgeDefinition.setCartridgeMin(cartridgeContext.getCartridgeMin());
+            cartridgeDefinition.setCartridgeMax(cartridgeContext.getCartridgeMax());
+            cartridgeDefinition.setSubscribableInfo(convertSubscribableInfoContextToSubscribableInfo(cartridgeContext.getSubscribableInfoContext()));
+            cartridgeDefinitions.add(cartridgeDefinition);
+        }
+        return cartridgeDefinitions;
+    }
+
+    private static SubscribableInfo convertSubscribableInfoContextToSubscribableInfo(
+            SubscribableInfoContext subscribableInfoContext) {
+        SubscribableInfo subscribableInfo = new SubscribableInfo();
+        subscribableInfo.setAlias(subscribableInfoContext.getAlias());
+        subscribableInfo.setAutoscalingPolicy(subscribableInfoContext.getAutoscalingPolicy());
+        subscribableInfo.setDependencyAliases(subscribableInfoContext.getDependencyAliases());
+        subscribableInfo.setDeploymentPolicy(subscribableInfoContext.getDeploymentPolicy());
+        subscribableInfo.setMinMembers(subscribableInfoContext.getMinMembers());
+        subscribableInfo.setMaxMembers(subscribableInfoContext.getMaxMembers());
+        subscribableInfo.setPrivateRepo(subscribableInfoContext.getPrivateRepo());
+        subscribableInfo.setProperty(convertPropertiesToPropertyBeansList(subscribableInfoContext.getProperties()));
+        subscribableInfo.setRepoPassword(subscribableInfoContext.getRepoPassword());
+        subscribableInfo.setRepoUsername(subscribableInfoContext.getRepoUsername());
+        subscribableInfo.setRepoUrl(subscribableInfoContext.getRepoUrl());
+        return subscribableInfo;
+    }
+
+    private static List<org.apache.stratos.manager.composite.application.beans.PropertyBean>
+    convertPropertiesToPropertyBeansList(org.apache.stratos.autoscaler.stub.Properties properties) {
+        List<org.apache.stratos.manager.composite.application.beans.PropertyBean> propertyBeanList =
+                new ArrayList<org.apache.stratos.manager.composite.application.beans.PropertyBean>();
+        for(org.apache.stratos.autoscaler.stub.Property property : properties.getProperties()) {
+            org.apache.stratos.manager.composite.application.beans.PropertyBean propertyBean =
+                    new org.apache.stratos.manager.composite.application.beans.PropertyBean();
+            propertyBean.setName(property.getName());
+            propertyBean.setValue(property.getValue());
+            propertyBeanList.add(propertyBean);
+        }
+        return propertyBeanList;
+    }
+
+    private static CartridgeContext[] convertCartridgeDefinitionsToCartridgeContexts(
             List<CartridgeDefinition> cartridges) {
 
     	CartridgeContext[] cartridgeContextArray = new CartridgeContext[cartridges.size()];
@@ -1143,13 +1248,11 @@ public class PojoConverter {
     }
 
 	
-    private static DependencyContext getDependencyContextFromDependencyDefinition(DependencyDefinitions dependencyDefinitions) {
-
+    private static DependencyContext convertDependencyDefinitionsToDependencyContexts(DependencyDefinitions dependencyDefinitions) {
         DependencyContext dependencyContext = new DependencyContext();
         dependencyContext.setTerminationBehaviour(dependencyDefinitions.getTerminationBehaviour());
 
         if (dependencyDefinitions != null){
-
             if(dependencyDefinitions.getStartupOrders() != null) {
                 String[] startupOrders = new String[dependencyDefinitions.getStartupOrders().size()];
                 startupOrders = dependencyDefinitions.getStartupOrders().toArray(startupOrders);
@@ -1161,14 +1264,11 @@ public class PojoConverter {
                 dependencyContext.setScalingDependents(scalingDependents);
             }
         }
-
-
-
         return dependencyContext;
     }
 
     private static org.apache.stratos.autoscaler.stub.pojo.GroupContext[]
-    getgroupContextArrayFromGroupDefinitions(List<GroupDefinition> groupDefinitions) {
+    convertGroupDefinitionsToGroupContexts(List<GroupDefinition> groupDefinitions) {
 
         GroupContext[] groupContexts = new GroupContext[groupDefinitions.size()];
         int i = 0;
@@ -1182,10 +1282,10 @@ public class PojoConverter {
            
             // Groups
             if (groupDefinition.getGroups() != null) {
-                groupContext.setGroupContexts(getgroupContextArrayFromGroupDefinitions(groupDefinition.getGroups()));
+                groupContext.setGroupContexts(convertGroupDefinitionsToGroupContexts(groupDefinition.getGroups()));
             }
             
-            groupContext.setCartridgeContexts(getCartridgeContextArrayFromCartridgeDefinition(groupDefinition.getCartridges()));
+            groupContext.setCartridgeContexts(convertCartridgeDefinitionsToCartridgeContexts(groupDefinition.getCartridges()));
             groupContexts[i++] = groupContext;
         }
 
@@ -1200,6 +1300,8 @@ public class PojoConverter {
 
         ApplicationBean applicationBean = new ApplicationBean();
         applicationBean.setId(application.getUniqueIdentifier());
+        applicationBean.setName(application.getName());
+        applicationBean.setDescription(application.getDescription());
         applicationBean.setTenantDomain(application.getTenantDomain());
         applicationBean.setTenantAdminUsername(application.getTenantAdminUserName());
         applicationBean.setInstances(setApplicationInstances(application));