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

[1/8] stratos git commit: fixing group terminating calculation issue

Repository: stratos
Updated Branches:
  refs/heads/4.1.0-test 3606da285 -> 04900bbda


fixing group terminating calculation issue


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

Branch: refs/heads/4.1.0-test
Commit: e836eaaf9f3e18293292fd707384716a6157f7ef
Parents: 9157af8
Author: reka <rt...@gmail.com>
Authored: Wed Dec 10 00:21:56 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 10 00:21:56 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/applications/topic/ApplicationBuilder.java   | 3 ++-
 .../processor/group/GroupStatusTerminatedProcessor.java     | 3 ---
 .../processor/group/GroupStatusTerminatingProcessor.java    | 9 +++++----
 3 files changed, 7 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/e836eaaf/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
index 612a008..fc655b9 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
@@ -426,7 +426,8 @@ public class ApplicationBuilder {
             ApplicationHolder.persistApplication(application);
             ApplicationsEventPublisher.sendGroupInstanceCreatedEvent(appId, groupId, null);
         } else {
-            log.warn("Group state transition is not valid: [group-id] " + groupId + " [current-state] " + group.getStatus(null)
+            log.warn("Group state transition is not valid: [group-id] " + groupId +
+                    " [current-state] " + group.getStatus(null)
                     + "[requested-state] " + status);
         }
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/e836eaaf/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java
index 30ce94b..b365d71 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java
@@ -97,13 +97,10 @@ public class GroupStatusTerminatedProcessor extends GroupStatusProcessor {
                         ApplicationBuilder.handleApplicationInstanceTerminatedEvent(appId, instanceId);
                         return true;
                     } else if (component instanceof Group) {
-                        //send activation to the parent
-                        if (((Group) component).getStatus(null) != GroupStatus.Terminated) {
                             log.info("sending group terminated : " + component.getUniqueIdentifier());
                             ApplicationBuilder.handleGroupInstanceTerminatedEvent(appId,
                                     component.getUniqueIdentifier(), instanceId);
                             return true;
-                        }
                     }
                 }
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/e836eaaf/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java
index fb18275..2fe0cd4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java
@@ -94,17 +94,18 @@ public class GroupStatusTerminatingProcessor extends GroupStatusProcessor {
                                 getAllGroupInSameState(groups, GroupStatus.Terminating, instanceId)) {
                     //send the terminated event
                     if (component instanceof Application) {
-                        log.info("sending app terminated: " + appId);
+                        log.info("sending app terminating for [application] " + appId + " and for " +
+                                " [instance] " + instanceId);
                         ApplicationBuilder.handleApplicationInstanceTerminatedEvent(appId, instanceId);
                         return true;
                     } else if (component instanceof Group) {
                         //send activation to the parent
-                        if (((Group) component).getStatus(null) != GroupStatus.Terminated) {
-                            log.info("sending group terminated : " + component.getUniqueIdentifier());
+                            log.info("sending group terminating for [group] " +
+                                    component.getUniqueIdentifier() + " and for [instance] "
+                                    + instanceId);
                             ApplicationBuilder.handleGroupTerminatingEvent(appId,
                                     component.getUniqueIdentifier(), instanceId);
                             return true;
-                        }
                     }
                 }
             }


[6/8] stratos git commit: Merge branch '4.1.0-test' of https://git-wip-us.apache.org/repos/asf/stratos into 4.1.0-test

Posted by re...@apache.org.
Merge branch '4.1.0-test' of https://git-wip-us.apache.org/repos/asf/stratos into 4.1.0-test


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

Branch: refs/heads/4.1.0-test
Commit: 8073d2afaecf8701acb80e65a5542769b8289d0a
Parents: e836eaa 3606da2
Author: reka <rt...@gmail.com>
Authored: Wed Dec 10 10:38:16 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 10 10:38:16 2014 +0530

----------------------------------------------------------------------
 .../context/cluster/ClusterInstanceContext.java |  3 +++
 .../context/cluster/VMClusterContext.java       | 20 ++++++--------------
 .../partition/ClusterLevelPartitionContext.java |  1 -
 .../monitor/cluster/VMClusterMonitor.java       |  4 +++-
 .../stratos/autoscaler/util/AutoscalerUtil.java | 17 +++++++++++++++--
 5 files changed, 27 insertions(+), 18 deletions(-)
----------------------------------------------------------------------



[7/8] stratos git commit: This closes #144

Posted by re...@apache.org.
This closes #144

Merge branch 'api_test' of https://github.com/shirolk/stratos into 4.1.0-test


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

Branch: refs/heads/4.1.0-test
Commit: c87929da7dab4ebc9409d553ed116d16c86d79fb
Parents: 8073d2a baa034d
Author: reka <rt...@gmail.com>
Authored: Wed Dec 10 10:38:38 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 10 10:38:38 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   |   21 +-
 .../interfaces/AutoScalerServiceInterface.java  |    2 +
 .../manager/client/AutoscalerServiceClient.java |   11 +-
 .../rest/endpoint/api/StratosApiV40Utils.java   |    2 +-
 .../rest/endpoint/api/StratosApiV41.java        |  738 ++++----
 .../rest/endpoint/api/StratosApiV41Utils.java   | 1629 ++++++------------
 .../src/main/resources/AutoScalerService.wsdl   |   51 +
 7 files changed, 1074 insertions(+), 1380 deletions(-)
----------------------------------------------------------------------



[8/8] stratos git commit: fixing group status calculation

Posted by re...@apache.org.
fixing group status calculation


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

Branch: refs/heads/4.1.0-test
Commit: 04900bbda5dd1424ce631c0efd96a2715afdfb60
Parents: c87929d
Author: reka <rt...@gmail.com>
Authored: Wed Dec 10 10:49:07 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Wed Dec 10 10:49:07 2014 +0530

----------------------------------------------------------------------
 .../monitor/component/GroupMonitor.java         |  2 +-
 .../group/GroupStatusInActiveProcessor.java     |  2 +-
 .../processor/group/GroupStatusProcessor.java   | 37 +++++++++++++-------
 3 files changed, 26 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/04900bbd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index 92d48f6..8cd6263 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -205,7 +205,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
             }
             GroupInstance instance = (GroupInstance) this.instanceIdToInstanceMap.get(instanceId);
             if (instance != null) {
-                if (instance.getStatus() == GroupStatus.Terminating) {
+                if (instance.getStatus() == GroupStatus.Terminating || instance.getStatus() == GroupStatus.Terminated) {
                     ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
                             appId, instanceId);
                 } else {

http://git-wip-us.apache.org/repos/asf/stratos/blob/04900bbd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java
index 2bf761c..652e08c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java
@@ -158,7 +158,7 @@ public class GroupStatusInActiveProcessor extends GroupStatusProcessor {
         boolean groupStat = false;
         for (Group group : groups.values()) {
             GroupInstance context = group.getInstanceContexts(instanceId);
-            if (context.getStatus() == GroupStatus.Inactive) {
+            if (context != null && context.getStatus() == GroupStatus.Inactive) {
                 groupStat = true;
                 return groupStat;
             } else {

http://git-wip-us.apache.org/repos/asf/stratos/blob/04900bbd/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessor.java
index 66fb838..e1b762d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessor.java
@@ -66,20 +66,27 @@ public abstract class GroupStatusProcessor extends StatusProcessor {
             } else {
                 //Checking the minimum of the group instances to be satisfied
                 List<Instance> contexts = group.getInstanceContextsWithParentId(instanceId);
-                int minGroupInstances = group.getGroupMinInstances();
-                int sameStateInstances = 0;
-                for(Instance context1 : contexts) {
-                   if(((GroupInstance)context1).getStatus().equals(status)) {
-                       sameStateInstances++;
-                   }
-                }
-                if(sameStateInstances >= minGroupInstances) {
+                //if no instances found and requested status is terminated,
+                // then considering this group as terminated
+                if(context == null && contexts.isEmpty() && status == GroupStatus.Terminated) {
                     groupStat = true;
                 } else {
-                    groupStat = false;
-                    return groupStat;
+                    int minGroupInstances = group.getGroupMinInstances();
+                    int sameStateInstances = 0;
+                    for(Instance context1 : contexts) {
+                        if(((GroupInstance)context1).getStatus().equals(status)) {
+                            sameStateInstances++;
+                        }
+                    }
+                    if(sameStateInstances >= minGroupInstances) {
+                        groupStat = true;
+                    } else {
+                        groupStat = false;
+                        return groupStat;
+                    }
                 }
 
+
             }
         }
         return groupStat;
@@ -103,11 +110,15 @@ public abstract class GroupStatusProcessor extends StatusProcessor {
                 Service service = TopologyManager.getTopology().getService(serviceName);
                 Cluster cluster = service.getCluster(clusterId);
                 ClusterInstance context = cluster.getInstanceContexts(instanceId);
-                if (context.getStatus() == status) {
+                if (context != null && context.getStatus() == status) {
                     clusterStat = true;
                 } else {
-                    clusterStat = false;
-                    return clusterStat;
+                    if(status == ClusterStatus.Terminated) {
+                        clusterStat = true;
+                    } else {
+                        clusterStat = false;
+                        return clusterStat;
+                    }
                 }
             } finally {
                 TopologyManager.releaseReadLockForCluster(serviceName, clusterId);


[5/8] stratos git commit: Refactoring the REST api

Posted by re...@apache.org.
Refactoring the REST api


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

Branch: refs/heads/4.1.0-test
Commit: b0d91f7d320248e05aedd18ae568efd43007ccb6
Parents: 3606da2
Author: Shiro <sh...@wso2.com>
Authored: Tue Dec 9 15:30:09 2014 +0530
Committer: Shiro <sh...@wso2.com>
Committed: Wed Dec 10 10:09:40 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   |   21 +-
 .../interfaces/AutoScalerServiceInterface.java  |    2 +
 .../manager/client/AutoscalerServiceClient.java |   11 +-
 .../rest/endpoint/api/StratosApiV40Utils.java   |    2 +-
 .../rest/endpoint/api/StratosApiV41.java        |  591 +++++--
 .../rest/endpoint/api/StratosApiV41Utils.java   | 1674 +++++++++---------
 .../src/main/resources/AutoScalerService.wsdl   |   51 +
 7 files changed, 1330 insertions(+), 1022 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d91f7d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index 36edb03..ccb0e8d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -99,11 +99,16 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
         }
         return validPolicies.toArray(new DeploymentPolicy[0]);
     }
-
+    
     @Override
-    public String addDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws InvalidPolicyException {
-        String policyId = PolicyManager.getInstance().deployDeploymentPolicy(deploymentPolicy);
-        //Need to start the application Monitor after validation of the deployment policies.
+    public boolean deployDeploymentPolicy(DeploymentPolicy policy) {
+    	// Get the deployment policy
+    	DeploymentPolicy deploymentPolicy = this.getDeploymentPolicy(policy.getId());
+    	if (deploymentPolicy == null) {
+    		return false;
+    	}
+    	
+    	//Need to start the application Monitor after validation of the deployment policies.
         //FIXME add validation
         validateDeploymentPolicy(deploymentPolicy);
         //Check whether all the clusters are there
@@ -133,6 +138,14 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
         } else {
             log.info("The application Monitor has already been created for [Application] " + appId);
         }
+        //FIXME add proper return value when validation is done properly
+        return true;
+    }
+
+    @Override
+    public String addDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws InvalidPolicyException {
+        String policyId = PolicyManager.getInstance().deployDeploymentPolicy(deploymentPolicy);
+        
         return policyId;
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d91f7d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/interfaces/AutoScalerServiceInterface.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/interfaces/AutoScalerServiceInterface.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/interfaces/AutoScalerServiceInterface.java
index 84bda03..096450a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/interfaces/AutoScalerServiceInterface.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/interfaces/AutoScalerServiceInterface.java
@@ -35,6 +35,8 @@ public interface AutoScalerServiceInterface {
     public DeploymentPolicy[] getAllDeploymentPolicies();
 
     public String addDeploymentPolicy(DeploymentPolicy depPolicy) throws InvalidPolicyException;
+    
+    public boolean deployDeploymentPolicy(DeploymentPolicy deploymentPolicy);
 
     public boolean undeployDeploymentPolicy(String deploymentPolicyName);
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d91f7d/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/AutoscalerServiceClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/AutoscalerServiceClient.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/AutoscalerServiceClient.java
index 223058b..545dcf5 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/AutoscalerServiceClient.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/AutoscalerServiceClient.java
@@ -141,10 +141,17 @@ public class AutoscalerServiceClient {
         return deploymentPolicy;
     }
 
-    public String deployDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws RemoteException,
+    public String addDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws RemoteException,
+    AutoScalerServiceInvalidPolicyExceptionException {
+
+    	return stub.addDeploymentPolicy(deploymentPolicy);
+
+    }
+    
+    public boolean deployDeploymentPolicy(DeploymentPolicy deploymentPolicy) throws RemoteException,
             AutoScalerServiceInvalidPolicyExceptionException {
 
-        return stub.addDeploymentPolicy(deploymentPolicy);
+        return stub.deployDeploymentPolicy(deploymentPolicy);
 
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d91f7d/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV40Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV40Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV40Utils.java
index fb28910..495ac28 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV40Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV40Utils.java
@@ -238,7 +238,7 @@ public class StratosApiV40Utils {
             DeploymentPolicy deploymentPolicy = PojoConverter.convetToASDeploymentPolicyPojo(deploymentPolicyBean);
 
             try {
-                policyId = autoscalerServiceClient.deployDeploymentPolicy(deploymentPolicy);
+                policyId = autoscalerServiceClient.addDeploymentPolicy(deploymentPolicy);
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);

http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d91f7d/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 39244f6..3676660 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -92,6 +92,12 @@ public class StratosApiV41 extends AbstractApi {
     @Context
     UriInfo uriInfo;
 
+    /**
+     * This method is used by clients such as the CLI to verify the Stratos manager URL.
+     *
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/init")
     @AuthorizationAction("/permission/admin/restlogin")
@@ -125,21 +131,36 @@ public class StratosApiV41 extends AbstractApi {
         return Response.ok().header("WWW-Authenticate", "Basic").type(MediaType.APPLICATION_JSON).
                 entity(Utils.buildAuthenticationSuccessMessage(sessionId)).build();
     }
+    
+    // API methods for cartridges
 
+    /**
+     * Creates the cartridge definition.
+     *
+     * @param cartridgeDefinitionBean the cartridge definition bean
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @POST
     @Path("/cartridges")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/cartridgeDefinition")
-    public Response deployCartridgeDefinition(CartridgeDefinitionBean cartridgeDefinitionBean)
+    public Response createCartridgeDefinition(CartridgeDefinitionBean cartridgeDefinitionBean)
             throws RestAPIException {
-        StratosApiV41Utils.deployCartridge(cartridgeDefinitionBean, getConfigContext(), getUsername(),
+        StratosApiV41Utils.createCartridgeDefinition(cartridgeDefinitionBean, getConfigContext(), getUsername(),
                 getTenantDomain());
         URI url = uriInfo.getAbsolutePathBuilder().path(cartridgeDefinitionBean.type).build();
         return Response.created(url).build();
 
     }
 
+    /**
+     * Gets all available cartridges.
+     *
+     * @return the cartridges
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/cartridges")
     @Produces("application/json")
@@ -151,98 +172,93 @@ public class StratosApiV41 extends AbstractApi {
         rb.entity(cartridges.isEmpty() ? new Cartridge[0] : cartridges.toArray(new Cartridge[cartridges.size()]));
         return rb.build();
     }
-
-    @DELETE
-    @Path("/cartridges/{cartridgeType}")
-    @Produces("application/json")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/add/cartridgeDefinition")
-    public Response unDeployCartridgeDefinition(@PathParam("cartridgeType") String cartridgeType) throws RestAPIException {
-        StratosApiV41Utils.undeployCartridge(cartridgeType);
-        return Response.noContent().build();
-    }
-
-	@GET
-	@Path("/cartridges/{provider}")
-	@Produces("application/json")
-	@Consumes("application/json")
-	@AuthorizationAction("/permission/admin/manage/view/cartridge")
-	public Response getCartridgesByProvider(@PathParam("provider") String provider) throws RestAPIException {
-		List<Cartridge> cartridges = StratosApiV41Utils.getAvailableCartridgesByProvider(provider, getConfigContext());
-		ResponseBuilder rb = Response.ok();
-		rb.entity(cartridges.isEmpty() ? new Cartridge[0] : cartridges.toArray(new Cartridge[cartridges.size()]));
-		return rb.build();
-	}
-
-    @GET
-    @Path("/cartridges/singleTenant")
-    @Produces("application/json")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/view/cartridge")
-    public Response getSingleTenantCartridges() throws RestAPIException {
-        List<Cartridge> cartridges = StratosApiV41Utils.getAvailableCartridges(null, false, getConfigContext());
-        ResponseBuilder rb = Response.ok();
-        rb.entity(cartridges.isEmpty() ? new Cartridge[0] : cartridges.toArray(new Cartridge[cartridges.size()]));
-        return rb.build();
-    }
-
+    
+    /**
+     * Gets the cartridges by category.
+     *
+     * @param category the category
+     * @param criteria the criteria if required for further filtering
+     * @return the cartridges by category
+     * @throws RestAPIException the rest api exception
+     */
     @GET
-    @Path("/cartridges/multiTenant")
+    @Path("/cartridges/{category}")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/cartridge")
-    public Response getMultiTenantCartridges() throws RestAPIException {
-        List<Cartridge> cartridges = StratosApiV41Utils.getAvailableCartridges(null, true, getConfigContext());
+    public Response getCartridgesByCategory(@DefaultValue("") @PathParam("category") String category, @QueryParam("criteria") String criteria) throws RestAPIException {
+        List<Cartridge> cartridges = StratosApiV41Utils.getCartridgesByCategory(category, criteria, getConfigContext());
         ResponseBuilder rb = Response.ok();
         rb.entity(cartridges.isEmpty() ? new Cartridge[0] : cartridges.toArray(new Cartridge[cartridges.size()]));
         return rb.build();
     }
     
+    /**
+     * Gets a specific cartridge by category.
+     *
+     * @param category the category
+     * @param cartridgeType the cartridge type
+     * @return the cartridge by category
+     * @throws RestAPIException the rest api exception
+     */
     @GET
-    @Path("/cartridges/{cartridgeType}/deploymentPolicy")
-    @Produces("application/json")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/view/deploymentPolicy")
-    public Response getValidDeploymentPoliciesOfCartridge(@PathParam("cartridgeType") String cartridgeType)
-            throws RestAPIException {
-        return Response.ok().entity(StratosApiV41Utils.getDeploymentPolicies(cartridgeType)).build();
-    }
-    
-    @GET
-    @Path("/cartridges/{cartridgeType}/singleTenant")
+    @Path("/cartridges/{category}/{cartridgeType}")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/cartridge")
-    public Response getAvailableSingleTenantCartridge(@PathParam("cartridgeType") String cartridgeType)
-            throws RestAPIException {
+    public Response getCartridgeByCategory(@DefaultValue("") @PathParam("category") String category, @PathParam("cartridgeType") String cartridgeType) throws RestAPIException {
+        Cartridge cartridge = StratosApiV41Utils.getCartridgeByCategory(category, cartridgeType, getConfigContext());
         ResponseBuilder rb = Response.ok();
-        rb.entity(StratosApiV41Utils.getAvailableCartridgeInfo(cartridgeType, null, getConfigContext()));
+        rb.entity(cartridge);
         return rb.build();
     }
 
-    @GET
-    @Path("/cartridges/loadBalancer")
+    /**
+     * Deletes a cartridge definition.
+     *
+     * @param cartridgeType the cartridge type
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
+    @DELETE
+    @Path("/cartridges/{cartridgeType}")
     @Produces("application/json")
     @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/view/cartridge")
-    public Response getAvailableLbCartridges() throws RestAPIException {
-        List<Cartridge> lbCartridges = StratosApiV41Utils.getAvailableLbCartridges(false, getConfigContext());
-        return Response.ok().entity(lbCartridges.isEmpty() ? new Cartridge[0] : lbCartridges.toArray(new Cartridge[lbCartridges.size()])).build();
+    @AuthorizationAction("/permission/admin/manage/add/cartridgeDefinition")
+    public Response deleteCartridgeDefinition(@PathParam("cartridgeType") String cartridgeType) throws RestAPIException {
+        StratosApiV41Utils.deleteCartridgeDefinition(cartridgeType);
+        return Response.noContent().build();
     }
 
+    // API methods for service groups
+    
+    /**
+     * Creates the service group definition.
+     *
+     * @param serviceGroupDefinition the service group definition
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @POST
     @Path("/groups")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/monitor/tenants")
     @SuperTenantService(true)
-    public Response deployServiceGroupDefinition(ServiceGroupDefinition serviceGroupDefinition)
+    public Response createServiceGroupDefinition(ServiceGroupDefinition serviceGroupDefinition)
             throws RestAPIException {
-        StratosApiV41Utils.deployServiceGroupDefinition(serviceGroupDefinition);
+        StratosApiV41Utils.createServiceGroupDefinition(serviceGroupDefinition);
         URI url = uriInfo.getAbsolutePathBuilder().path(serviceGroupDefinition.getName()).build();
         return Response.created(url).build();
     }
 
+    /**
+     * Gets the service group definition.
+     *
+     * @param groupDefinitionName the group definition name
+     * @return the service group definition
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/groups/{groupDefinitionName}")
     @Produces("application/json")
@@ -261,6 +277,12 @@ public class StratosApiV41 extends AbstractApi {
         return rb.build();
     }
 
+    /**
+     * Gets all service groups created.
+     *
+     * @return the service groups
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/groups")
     @Produces("application/json")
@@ -279,73 +301,93 @@ public class StratosApiV41 extends AbstractApi {
         return rb.build();
     }
 
+    /**
+     * Delete service group definition.
+     *
+     * @param groupDefinitionName the group definition name
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @DELETE
     @Path("/groups/{groupDefinitionName}")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/monitor/tenants")
     @SuperTenantService(true)
-    public Response undeployServiceGroupDefinition(@PathParam("groupDefinitionName") String groupDefinitionName)
+    public Response deleteServiceGroupDefinition(@PathParam("groupDefinitionName") String groupDefinitionName)
             throws RestAPIException {
 
-        StratosApiV41Utils.undeployServiceGroupDefinition(groupDefinitionName);
+        StratosApiV41Utils.deleteServiceGroupDefinition(groupDefinitionName);
         return Response.noContent().build();
     }
 
-//    @GET
-//    @Path("/partitions")
-//    @Produces("application/json")
-//    @Consumes("application/json")
-//    @AuthorizationAction("/permission/admin/manage/view/partition")
-//    public Response getPartitions() throws RestAPIException {
-//        return Response.ok().entity(StratosApiV41Utils.getAvailablePartitions()).build();
-//    }
-
-//    @POST
-//    @Path("/partitions")
-//    @Produces("application/json")
-//    @Consumes("application/json")
-//    @AuthorizationAction("/permission/admin/manage/add/partition")
-//    public Response deployPartition(Partition partition)
-//            throws RestAPIException {
-//
-//        StratosApiV41Utils.deployPartition(partition);
-//        URI url = uriInfo.getAbsolutePathBuilder().path(partition.id).build();
-//        return Response.created(url).build();
-//    }
-//
-//    @GET
-//    @Path("/partitions/{partitionId}")
-//    @Produces("application/json")
-//    @Consumes("application/json")
-//    @AuthorizationAction("/permission/admin/manage/view/partition")
-//    public Response getPartition(@PathParam("partitionId") String partitionId) throws RestAPIException {
-//        return Response.ok().entity(StratosApiV41Utils.getPartition(partitionId)).build();
-//    }
-
+    // API methods for application deployments
+    
+    /**
+     * Deploy application.
+     *
+     * @param deploymentPolicy the deployment policy
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @POST
-    @Path("/deploymentPolicies")
+    @Path("/applicationDeployments")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/deploymentPolicy")
-    public Response deployDeploymentPolicyDefinition(DeploymentPolicy deploymentPolicy)
+    public Response deployApplication(DeploymentPolicy deploymentPolicy)
             throws RestAPIException {
-        //TODO change the name to deployApplication
-        String policyId = StratosApiV41Utils.deployDeploymentPolicy(deploymentPolicy);
-        URI url = uriInfo.getAbsolutePathBuilder().path(policyId).build();
-        return Response.created(url).build();
+        StratosApiV41Utils.deployApplication(deploymentPolicy);
+        //URI url = uriInfo.getAbsolutePathBuilder().path(policyId).build();
+        return Response.accepted().build();
     }
-
+    
+    /**
+     * Undeploy application.
+     *
+     * @param applicationId the application id
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @DELETE
-    @Path("/applications/{applicationId}")
+    @Path("/applicationDeployments/{applicationId}")
     @Produces("application/json")
     @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/add/cartridgeDefinition")
-    public Response unDeployApplication(@PathParam("applicationId") String applicationId) throws RestAPIException {
+    @AuthorizationAction("/permission/admin/manage/add/deploymentPolicy")
+    public Response undeployApplication(@PathParam("applicationId") String applicationId)
+            throws RestAPIException {
         StratosApiV41Utils.undeployApplication(applicationId);
-        return Response.noContent().build();
+        return Response.accepted().build();
     }
-
+    
+    // API methods for deployment policies
+    
+    /**
+     * Creates the deployment policy.
+     *
+     * @param deploymentPolicy the deployment policy
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
+    @POST
+    @Path("/deploymentPolicies")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/admin/manage/add/deploymentPolicy")
+    public Response createDeploymentPolicy(DeploymentPolicy deploymentPolicy)
+            throws RestAPIException {
+        String policyId = StratosApiV41Utils.createDeploymentPolicy(deploymentPolicy);
+        //URI url = uriInfo.getAbsolutePathBuilder().path(policyId).build();
+        return Response.accepted().build();
+    }
+    
+    /**
+     * Update deployment policy definition.
+     *
+     * @param deploymentPolicy the deployment policy
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @PUT
     @Path("/deploymentPolicies")
     @Produces("application/json")
@@ -358,6 +400,12 @@ public class StratosApiV41 extends AbstractApi {
         return Response.ok().build();
     }
 
+    /**
+     * Gets the deployment policies.
+     *
+     * @return the deployment policies
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/deploymentPolicies")
     @Produces("application/json")
@@ -367,6 +415,13 @@ public class StratosApiV41 extends AbstractApi {
         return Response.ok().entity(StratosApiV41Utils.getDeploymentPolicies()).build();
     }
 
+    /**
+     * Gets a specific deployment policy.
+     *
+     * @param deploymentPolicyId the deployment policy id
+     * @return the deployment policy
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/deploymentPolicies/{deploymentPolicyId}")
     @Produces("application/json")
@@ -377,6 +432,13 @@ public class StratosApiV41 extends AbstractApi {
         return Response.ok().entity(StratosApiV41Utils.getDeploymentPolicy(deploymentPolicyId)).build();
     }
 
+    /**
+     * Gets the partition groups for the deployment policy.
+     *
+     * @param deploymentPolicyId the deployment policy id
+     * @return the partition groups
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/deploymentPolicies/{deploymentPolicyId}/partitionGroup")
     @Produces("application/json")
@@ -386,7 +448,7 @@ public class StratosApiV41 extends AbstractApi {
             throws RestAPIException {
         return Response.ok().entity(StratosApiV41Utils.getPartitionGroups(deploymentPolicyId)).build();
     }
-
+    
 //    @GET
 //    @Path("/deploymentPolicies/{deploymentPolicyId}/partitionGroup/{partitionGroupId}")
 //    @Produces("application/json")
@@ -408,30 +470,69 @@ public class StratosApiV41 extends AbstractApi {
 //        return Response.ok().entity(StratosApiV41Utils.getPartitionsOfDeploymentPolicy(deploymentPolicyId)).build();
 //    }
 
+    // API methods for autoscaling policies
+    
+	/**
+	 * Gets the autoscaling policies.
+	 *
+	 * @return the autoscaling policies
+	 * @throws RestAPIException the rest api exception
+	 */
     @GET
-    @Path("/autoscalePolicies")
+    @Path("/autoscalingPolicies")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/autoscalingPolicy")
     public Response getAutoscalingPolicies() throws RestAPIException {
         return Response.ok().entity(StratosApiV41Utils.getAutoScalePolicies()).build();
     }
+    
+    /**
+     * Gets the autoscaling policy.
+     *
+     * @param autoscalePolicyId the autoscale policy id
+     * @return the autoscaling policy
+     * @throws RestAPIException the rest api exception
+     */
+    @GET
+    @Path("/autoscalingPolicies/{autoscalePolicyId}")
+    @Produces("application/json")
+    @Consumes("application/json")
+    @AuthorizationAction("/permission/admin/manage/view/autoscalingPolicy")
+    public Response getAutoscalingPolicy(@PathParam("autoscalePolicyId") String autoscalePolicyId)
+            throws RestAPIException {
+        return Response.ok().entity(StratosApiV41Utils.getAutoScalePolicy(autoscalePolicyId)).build();
+    }
 
+    /**
+     * Creates the autoscaling policy defintion.
+     *
+     * @param autoscalePolicy the autoscale policy
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @POST
-    @Path("/autoscalePolicies")
+    @Path("/autoscalingPolicies")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/autoscalingPolicy")
-    public Response deployAutoscalingPolicyDefintion(AutoscalePolicy autoscalePolicy)
+    public Response createAutoscalingPolicyDefintion(AutoscalePolicy autoscalePolicy)
             throws RestAPIException {
 
-        StratosApiV41Utils.deployAutoscalingPolicy(autoscalePolicy);
+        StratosApiV41Utils.createAutoscalingPolicy(autoscalePolicy);
         URI url = uriInfo.getAbsolutePathBuilder().path(autoscalePolicy.getId()).build();
         return Response.created(url).build();
     }
 
+    /**
+     * Update autoscaling policy defintion.
+     *
+     * @param autoscalePolicy the autoscale policy
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @PUT
-    @Path("/autoscalePolicies")
+    @Path("/autoscalingPolicies")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/autoscalingPolicy")
@@ -442,16 +543,25 @@ public class StratosApiV41 extends AbstractApi {
         return Response.ok().build();
     }
 
-    @GET
-    @Path("/autoscalePolicies/{autoscalePolicyId}")
+    // API methods for applications
+    
+    /* -- replaced above DELETE /applicationDeployments/{applicationId}
+    @DELETE
+    @Path("/applications/{applicationId}")
     @Produces("application/json")
     @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/view/autoscalingPolicy")
-    public Response getAutoscalingPolicy(@PathParam("autoscalePolicyId") String autoscalePolicyId)
-            throws RestAPIException {
-        return Response.ok().entity(StratosApiV41Utils.getAutoScalePolicy(autoscalePolicyId)).build();
-    }
-
+    @AuthorizationAction("/permission/admin/manage/add/cartridgeDefinition")
+    public Response unDeployApplication(@PathParam("applicationId") String applicationId) throws RestAPIException {
+        StratosApiV41Utils.undeployApplication(applicationId);
+        return Response.noContent().build();
+    }*/
+    
+    /**
+     * Gets details of all the applications.
+     *
+     * @return the applications
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/applications")
     @Consumes("application/json")
@@ -474,13 +584,12 @@ public class StratosApiV41 extends AbstractApi {
      * no application with given Id.
      * @throws RestAPIException is thrown in case of failure occurs.
      */
-
     @GET
     @Path("/applications/{applicationId}")
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/monitor/tenants")
-    public Response getApplicationInfo(@PathParam("applicationId") String applicationId) throws RestAPIException {
-        ApplicationBean application = StratosApiV41Utils.getApplicationInfo(applicationId);
+    public Response getApplication(@PathParam("applicationId") String applicationId) throws RestAPIException {
+        ApplicationBean application = StratosApiV41Utils.getApplication(applicationId);
         if (application == null) {
             return Response.status(Response.Status.NOT_FOUND).build();
         } else {
@@ -488,34 +597,35 @@ public class StratosApiV41 extends AbstractApi {
         }
     }
     
+    /**
+     * Creates the application definition.
+     *
+     * @param applicationDefinitionBean the application definition bean
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @POST
     @Path("/applications")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/monitor/tenants")
     @SuperTenantService(true)
-    public Response deployApplicationDefinition(ApplicationDefinition applicationDefinitionBean)
+    public Response createApplicationDefinition(ApplicationDefinition applicationDefinitionBean)
             throws RestAPIException {
-        StratosApiV41Utils.deployApplicationDefinition(applicationDefinitionBean, getConfigContext(),
+        StratosApiV41Utils.createApplicationDefinition(applicationDefinitionBean, getConfigContext(),
                 getUsername(), getTenantDomain());
         URI url = uriInfo.getAbsolutePathBuilder().path(applicationDefinitionBean.getApplicationId()).build();
         return Response.created(url).build();
     }
 
-//    @POST
-//    @Path("/applications")
-//    @Produces("application/json")
-//    @Consumes("application/json")
-//    @AuthorizationAction("/permission/protected/manage/monitor/tenants")
-//    @SuperTenantService(true)
-//    public Response createApplication (ApplicationDefinition applicationDefinitionBean)
-//            throws RestAPIException {
-//        StratosApiV41Utils.createApplication(applicationDefinitionBean);
-//        URI url = uriInfo.getAbsolutePathBuilder().path(applicationDefinitionBean.getApplicationId()).build();
-//        return Response.created(url).build();
-//    }
-
-    @DELETE
+    /**
+	 * Removes the application definition.
+	 *
+	 * @param applicationId the application id
+	 * @return the response
+	 * @throws RestAPIException the rest api exception
+	 */
+	@DELETE
     @Path("/applications/{applicationId}")
     @Produces("application/json")
     @Consumes("application/json")
@@ -523,11 +633,20 @@ public class StratosApiV41 extends AbstractApi {
     @SuperTenantService(true)
     public Response removeApplicationDefinition(@PathParam("applicationId") String applicationId)
             throws RestAPIException {
-        StratosApiV41Utils.removeApplication(applicationId, getConfigContext(), getUsername(),
+        StratosApiV41Utils.removeApplicationDefinition(applicationId, getConfigContext(), getUsername(),
                 getTenantDomain());
         return Response.noContent().build();
     }
+    
+    // API methods for subscriptions
 
+    /**
+     * Gets the subscriptions of application.
+     *
+     * @param applicationId the application id
+     * @return the subscriptions of application
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/subscriptions/{applicationId}")
     @Produces("application/json")
@@ -541,6 +660,13 @@ public class StratosApiV41 extends AbstractApi {
         return Response.ok().entity(subscriptions).build();
     }
     
+    /**
+     * Gets the subscribed cartridges of service group.
+     *
+     * @param serviceGroup the service group
+     * @return the subscribed cartridges of service group
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/subscriptions/cartridges/groups/{serviceGroup}")
     @Produces("application/json")
@@ -554,6 +680,7 @@ public class StratosApiV41 extends AbstractApi {
         return rb.build();
     }
 
+    /*
     @GET
     @Path("/subscriptions/{subscriptionAlias}/cartridges")
     @Produces("application/json")
@@ -641,7 +768,10 @@ public class StratosApiV41 extends AbstractApi {
         }
         return Response.noContent().build();
     }
+    */
 
+    // API methods for clusters
+    
     @GET
     @Path("/clusters")
     @Produces("application/json")
@@ -663,6 +793,7 @@ public class StratosApiV41 extends AbstractApi {
         return rb.build();
     }
 
+    /*
     @GET
     @Path("/clusters/{subscriptionAlias}")
     @Produces("application/json")
@@ -672,7 +803,7 @@ public class StratosApiV41 extends AbstractApi {
         ResponseBuilder rb = Response.ok();
         rb.entity(StratosApiV41Utils.getCluster(subscriptionAlias, getConfigContext()));
         return rb.build();
-    }
+    }*/
 
     @GET
     @Path("/clusters/{clusterId}")
@@ -700,6 +831,7 @@ public class StratosApiV41 extends AbstractApi {
         return Response.ok().entity(cluster).build();
     }
 
+    /*
     @GET
     @Path("/clusters/{subscriptionAlias}/loadBalancer")
     @Consumes("application/json")
@@ -717,8 +849,17 @@ public class StratosApiV41 extends AbstractApi {
             Response.fromResponse(getCluster(lbClusterId));
         }
         return Response.status(Response.Status.NOT_FOUND).build();
-    }
+    }*/
 
+    // API methods for tenants
+    
+    /**
+     * Adds the tenant.
+     *
+     * @param tenantInfoBean the tenant info bean
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @POST
     @Path("/tenants")
     @Consumes("application/json")
@@ -807,6 +948,13 @@ public class StratosApiV41 extends AbstractApi {
         return Response.created(url).build();
     }
 
+    /**
+     * Update tenant.
+     *
+     * @param tenantInfoBean the tenant info bean
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @PUT
     @Path("/tenants")
     @Consumes("application/json")
@@ -949,6 +1097,13 @@ public class StratosApiV41 extends AbstractApi {
         }
     }
     
+    /**
+     * Gets the tenant by domain.
+     *
+     * @param tenantDomain the tenant domain
+     * @return the tenant by domain
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/tenants/{tenantDomain}")
     @Consumes("application/json")
@@ -1009,6 +1164,13 @@ public class StratosApiV41 extends AbstractApi {
         return bean;
     }
 
+    /**
+     * Delete tenant.
+     *
+     * @param tenantDomain the tenant domain
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @DELETE
     @Path("/tenants/{tenantDomain}")
     @Consumes("application/json")
@@ -1043,6 +1205,12 @@ public class StratosApiV41 extends AbstractApi {
         return Response.noContent().build();
     }
 
+    /**
+     * Gets the tenants.
+     *
+     * @return the tenants
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/tenants")
     @Produces("application/json")
@@ -1079,6 +1247,13 @@ public class StratosApiV41 extends AbstractApi {
         return tenantList;
     }
 
+    /**
+     * Gets the partial search tenants.
+     *
+     * @param tenantDomain the tenant domain
+     * @return the partial search tenants
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/tenants/search/{tenantDomain}")
     @Consumes("application/json")
@@ -1117,6 +1292,13 @@ public class StratosApiV41 extends AbstractApi {
         return tenantList;
     }
 
+    /**
+     * Activate tenant.
+     *
+     * @param tenantDomain the tenant domain
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @POST
     @Path("/tenants/activate/{tenantDomain}")
     @Consumes("application/json")
@@ -1154,6 +1336,13 @@ public class StratosApiV41 extends AbstractApi {
         return Response.noContent().build();
     }
 
+    /**
+     * Deactivate tenant.
+     *
+     * @param tenantDomain the tenant domain
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @POST
     @Path("/tenants/deactivate/{tenantDomain}")
     @Consumes("application/json")
@@ -1192,6 +1381,8 @@ public class StratosApiV41 extends AbstractApi {
 
         return Response.noContent().build();
     }
+    
+    // API methods for repositories
    
     @POST
     @Path("/repo/notify")
@@ -1221,6 +1412,15 @@ public class StratosApiV41 extends AbstractApi {
         return Response.noContent().build();
     }
 
+    // API methods for users
+    
+    /**
+     * Adds the user.
+     *
+     * @param userInfoBean the user info bean
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @POST
     @Path("/users")
     @Consumes("application/json")
@@ -1241,6 +1441,13 @@ public class StratosApiV41 extends AbstractApi {
         return Response.created(url).build();
     }
 
+    /**
+     * Delete user.
+     *
+     * @param userName the user name
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @DELETE
     @Path("/users/{userName}")
     @Consumes("application/json")
@@ -1260,6 +1467,13 @@ public class StratosApiV41 extends AbstractApi {
         return Response.noContent().build();
     }
 
+    /**
+     * Update user.
+     *
+     * @param userInfoBean the user info bean
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @PUT
     @Path("/users")
     @Consumes("application/json")
@@ -1280,11 +1494,17 @@ public class StratosApiV41 extends AbstractApi {
         return Response.noContent().build();
     }
 
+    /**
+     * Gets the users.
+     *
+     * @return the users
+     * @throws RestAPIException the rest api exception
+     */
     @GET
     @Path("/users")
     @Produces("application/json")
     @AuthorizationAction("/permission/admin/manage/add/users")
-    public UserInfoBean[] listUsers() throws RestAPIException {
+    public UserInfoBean[] getUsers() throws RestAPIException {
 
         StratosUserManager stratosUserManager = new StratosUserManager();
         List<UserInfoBean> userList;
@@ -1322,9 +1542,18 @@ public class StratosApiV41 extends AbstractApi {
 
         return userStoreManager;
     }
+    
+    // API methods for Kubernetes clusters
 
+    /**
+     * Deploy kubernetes host cluster.
+     *
+     * @param kubernetesGroup the kubernetes group
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @POST
-    @Path("/kubernetesCluster")
+    @Path("/kubernetesClusters")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/kubernetes")
@@ -1335,8 +1564,16 @@ public class StratosApiV41 extends AbstractApi {
         return Response.created(url).build();
     }
 
+    /**
+     * Deploy kubernetes host.
+     *
+     * @param kubernetesClusterId the kubernetes cluster id
+     * @param kubernetesHost the kubernetes host
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @PUT
-    @Path("/kubernetesCluster/{kubernetesClusterId}/minion")
+    @Path("/kubernetesClusters/{kubernetesClusterId}/minion")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/kubernetes")
@@ -1348,8 +1585,15 @@ public class StratosApiV41 extends AbstractApi {
         return Response.created(url).build();
     }
 
+    /**
+     * Update kubernetes master.
+     *
+     * @param kubernetesMaster the kubernetes master
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @PUT
-    @Path("/kubernetesCluster/{kubernetesClusterId}/master")
+    @Path("/kubernetesClusters/{kubernetesClusterId}/master")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/kubernetes")
@@ -1379,8 +1623,14 @@ public class StratosApiV41 extends AbstractApi {
         }
     }
 
+    /**
+     * Gets the kubernetes host clusters.
+     *
+     * @return the kubernetes host clusters
+     * @throws RestAPIException the rest api exception
+     */
     @GET
-    @Path("/kubernetesCluster")
+    @Path("/kubernetesClusters")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/kubernetes")
@@ -1388,8 +1638,15 @@ public class StratosApiV41 extends AbstractApi {
         return Response.ok().entity(StratosApiV41Utils.getAvailableKubernetesGroups()).build();
     }
 
+    /**
+     * Gets the kubernetes host cluster.
+     *
+     * @param kubernetesClusterId the kubernetes cluster id
+     * @return the kubernetes host cluster
+     * @throws RestAPIException the rest api exception
+     */
     @GET
-    @Path("/kubernetesCluster/{kubernetesClusterId}")
+    @Path("/kubernetesClusters/{kubernetesClusterId}")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/kubernetes")
@@ -1401,8 +1658,15 @@ public class StratosApiV41 extends AbstractApi {
         }
     }
 
+    /**
+     * Gets the kubernetes hosts of kubernetes cluster.
+     *
+     * @param kubernetesClusterId the kubernetes cluster id
+     * @return the kubernetes hosts of kubernetes cluster
+     * @throws RestAPIException the rest api exception
+     */
     @GET
-    @Path("/kubernetesCluster/{kubernetesClusterId}/hosts")
+    @Path("/kubernetesClusters/{kubernetesClusterId}/hosts")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/kubernetes")
@@ -1414,8 +1678,15 @@ public class StratosApiV41 extends AbstractApi {
         }
     }
 
+    /**
+     * Gets the kubernetes master of kubernetes cluster.
+     *
+     * @param kubernetesClusterId the kubernetes cluster id
+     * @return the kubernetes master of kubernetes cluster
+     * @throws RestAPIException the rest api exception
+     */
     @GET
-    @Path("/kubernetesCluster/{kubernetesClusterId}/master")
+    @Path("/kubernetesClusters/{kubernetesClusterId}/master")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/kubernetes")
@@ -1427,8 +1698,15 @@ public class StratosApiV41 extends AbstractApi {
         }
     }
 
+    /**
+     * Un deploy kubernetes host cluster.
+     *
+     * @param kubernetesClusterId the kubernetes cluster id
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @DELETE
-    @Path("/kubernetesCluster/{kubernetesClusterId}")
+    @Path("/kubernetesClusters/{kubernetesClusterId}")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/kubernetes")
@@ -1441,8 +1719,15 @@ public class StratosApiV41 extends AbstractApi {
         return Response.noContent().build();
     }
 
+    /**
+     * Undeploy kubernetes host of kubernetes cluster.
+     *
+     * @param kubernetesHostId the kubernetes host id
+     * @return the response
+     * @throws RestAPIException the rest api exception
+     */
     @DELETE
-    @Path("/kubernetesCluster/{kubernetesClusterId}/hosts/{hostId}")
+    @Path("/kubernetesClusters/{kubernetesClusterId}/hosts/{hostId}")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/kubernetes")


[3/8] stratos git commit: Refactoring the REST api

Posted by re...@apache.org.
http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d91f7d/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoScalerService.wsdl
----------------------------------------------------------------------
diff --git a/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoScalerService.wsdl b/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoScalerService.wsdl
index 8c436b1..61c8faa 100644
--- a/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoScalerService.wsdl
+++ b/service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoScalerService.wsdl
@@ -455,6 +455,20 @@
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
+            <xs:element name="deployDeploymentPolicy">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" name="deploymentPolicy" nillable="true" type="ax28:DeploymentPolicy"/>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+            <xs:element name="deployDeploymentPolicyResponse">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" name="return" type="xs:boolean"/>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
             <xs:element name="deployApplicationDefinition">
                 <xs:complexType>
                     <xs:sequence>
@@ -591,6 +605,12 @@
     <wsdl:message name="getAutoscalingPolicyResponse">
         <wsdl:part name="parameters" element="ns:getAutoscalingPolicyResponse"/>
     </wsdl:message>
+    <wsdl:message name="deployDeploymentPolicyRequest">
+        <wsdl:part name="parameters" element="ns:deployDeploymentPolicy"/>
+    </wsdl:message>
+    <wsdl:message name="deployDeploymentPolicyResponse">
+        <wsdl:part name="parameters" element="ns:deployDeploymentPolicyResponse"/>
+    </wsdl:message>
     <wsdl:message name="updateAutoScalingPolicyRequest">
         <wsdl:part name="parameters" element="ns:updateAutoScalingPolicy"/>
     </wsdl:message>
@@ -688,6 +708,10 @@
             <wsdl:input message="ns:getAutoscalingPolicyRequest" wsaw:Action="urn:getAutoscalingPolicy"/>
             <wsdl:output message="ns:getAutoscalingPolicyResponse" wsaw:Action="urn:getAutoscalingPolicyResponse"/>
         </wsdl:operation>
+        <wsdl:operation name="deployDeploymentPolicy">
+            <wsdl:input message="ns:deployDeploymentPolicyRequest" wsaw:Action="urn:deployDeploymentPolicy"/>
+            <wsdl:output message="ns:deployDeploymentPolicyResponse" wsaw:Action="urn:deployDeploymentPolicyResponse"/>
+        </wsdl:operation>
         <wsdl:operation name="updateAutoScalingPolicy">
             <wsdl:input message="ns:updateAutoScalingPolicyRequest" wsaw:Action="urn:updateAutoScalingPolicy"/>
             <wsdl:output message="ns:updateAutoScalingPolicyResponse" wsaw:Action="urn:updateAutoScalingPolicyResponse"/>
@@ -857,6 +881,15 @@
                 <soap:fault use="literal" name="AutoScalerServiceInvalidPolicyException"/>
             </wsdl:fault>
         </wsdl:operation>
+        <wsdl:operation name="deployDeploymentPolicy">
+            <soap:operation soapAction="urn:deployDeploymentPolicy" style="document"/>
+            <wsdl:input>
+                <soap:body use="literal"/>
+            </wsdl:input>
+            <wsdl:output>
+                <soap:body use="literal"/>
+            </wsdl:output>
+        </wsdl:operation>
         <wsdl:operation name="addDeploymentPolicy">
             <soap:operation soapAction="urn:addDeploymentPolicy" style="document"/>
             <wsdl:input>
@@ -1055,6 +1088,15 @@
                 <soap12:fault use="literal" name="AutoScalerServiceInvalidPolicyException"/>
             </wsdl:fault>
         </wsdl:operation>
+        <wsdl:operation name="deployDeploymentPolicy">
+            <soap12:operation soapAction="urn:deployDeploymentPolicy" style="document"/>
+            <wsdl:input>
+                <soap12:body use="literal"/>
+            </wsdl:input>
+            <wsdl:output>
+                <soap12:body use="literal"/>
+            </wsdl:output>
+        </wsdl:operation>
         <wsdl:operation name="addDeploymentPolicy">
             <soap12:operation soapAction="urn:addDeploymentPolicy" style="document"/>
             <wsdl:input>
@@ -1235,6 +1277,15 @@
                 <mime:content type="text/xml" part="parameters"/>
             </wsdl:output>
         </wsdl:operation>
+        <wsdl:operation name="deployDeploymentPolicy">
+            <http:operation location="deployDeploymentPolicy"/>
+            <wsdl:input>
+                <mime:content type="text/xml" part="parameters"/>
+            </wsdl:input>
+            <wsdl:output>
+                <mime:content type="text/xml" part="parameters"/>
+            </wsdl:output>
+        </wsdl:operation>
         <wsdl:operation name="addDeploymentPolicy">
             <http:operation location="addDeploymentPolicy"/>
             <wsdl:input>


[4/8] stratos git commit: Refactoring the REST api

Posted by re...@apache.org.
http://git-wip-us.apache.org/repos/asf/stratos/blob/b0d91f7d/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 c377b08..4fdfb3c 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
@@ -98,7 +98,7 @@ public class StratosApiV41Utils {
     private static ServiceDeploymentManager serviceDeploymentManager = new ServiceDeploymentManager();
     private static PersistenceManager persistenceManager = new RegistryBasedPersistenceManager();
 
-    public static void deployCartridge(CartridgeDefinitionBean cartridgeDefinitionBean, ConfigurationContext ctxt,
+    public static void createCartridgeDefinition(CartridgeDefinitionBean cartridgeDefinitionBean, ConfigurationContext ctxt,
                                        String userName, String tenantDomain) throws RestAPIException {
 
         log.info("Starting to deploy a Cartridge [type] " + cartridgeDefinitionBean.type);
@@ -114,141 +114,8 @@ public class StratosApiV41Utils {
         }
         log.info("Successfully deployed Cartridge [type] " + cartridgeDefinitionBean.type);
     }
-
-    public static void createApplication (ApplicationDefinition appDefinition) throws RestAPIException {
-
-        try {
-            if (persistenceManager.getApplication(appDefinition.getApplicationId()) != null) {
-                String errorMsg = "Application Definition with id " + appDefinition.getApplicationId() +
-                        " already exists";
-                log.error(errorMsg);
-                throw new RestAPIException(errorMsg);
-            }
-        } catch (PersistenceManagerException e) {
-            throw new RestAPIException(e);
-        }
-
-        try {
-            persistenceManager.createApplication(appDefinition);
-        } catch (PersistenceManagerException e) {
-            throw new RestAPIException(e);
-        }
-    }
-
-    public static void deleteApplication (String appId) throws RestAPIException {
-
-        try {
-            persistenceManager.removeApplication(appId);
-        } catch (PersistenceManagerException e) {
-            throw new RestAPIException(e);
-        }
-    }
-
-    public static void deployApplicationDefinition(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;
-                throw new RestAPIException(msg);
-            }
-        } catch (ApplicationSubscriptionException e1) {
-            throw new RestAPIException(e1);
-        }
-
-        ApplicationContext applicationContext =
-                PojoConverter.convertApplicationBeanToApplicationContext(appDefinition);
-        applicationContext.setTenantId(ApplicationManagementUtil.getTenantId(ctxt));
-        applicationContext.setTenantDomain(tenantDomain);
-        applicationContext.setTeantAdminUsername(userName);
-
-        if (appDefinition.getProperty() != null) {
-            org.apache.stratos.autoscaler.stub.Properties properties = new org.apache.stratos.autoscaler.stub.Properties();
-            for (org.apache.stratos.manager.composite.application.beans.PropertyBean propertyBean : appDefinition.getProperty()) {
-                org.apache.stratos.autoscaler.stub.Property property = new org.apache.stratos.autoscaler.stub.Property();
-                property.setName(propertyBean.getName());
-                property.setValue(propertyBean.getValue());
-                properties.addProperties(property);
-            }
-            applicationContext.setProperties(properties);
-        }
-
-        try {
-            AutoscalerServiceClient.getServiceClient().deployApplication(applicationContext);
-        } catch (AutoScalerServiceApplicationDefinitionExceptionException e) {
-            throw new RestAPIException(e);
-        } catch (RemoteException e) {
-            throw new RestAPIException(e);
-        }
-    }
-
-    static ApplicationSubscription getApplicationSubscriptions(String appId, ConfigurationContext ctxt) throws RestAPIException {
-        CartridgeSubscriptionManager subscriptionMgr = new CartridgeSubscriptionManager();
-        try {
-            return subscriptionMgr.getApplicationSubscription(appId, ApplicationManagementUtil.getTenantId(ctxt));
-        } catch (ApplicationSubscriptionException e) {
-            throw new RestAPIException(e);
-        }
-    }
-
-    public static void removeApplication(String appId, ConfigurationContext ctxt,
-                                         String userName, String tenantDomain) throws RestAPIException {
-
-        try {
-            int tenantId = ApplicationManagementUtil.getTenantId(ctxt);
-            //CloudControllerServiceClient.getServiceClient().undeployApplicationDefinition(appId, tenantId, tenantDomain);
-            AutoscalerServiceClient.getServiceClient().undeployApplication(appId, tenantId, tenantDomain);
-
-        } catch (RemoteException e) {
-            throw new RestAPIException(e);
-        } catch (AutoScalerServiceApplicationDefinitionExceptionException e) {
-            throw new RestAPIException(e);
-        }
-
-    }
-
-    @SuppressWarnings("unused")
-    private static DeploymentPolicy[] intersection(
-            DeploymentPolicy[] cartridgeDepPolicies,
-            DeploymentPolicy[] lbCartridgeDepPolicies) {
-
-        List<DeploymentPolicy> commonPolicies =
-                new ArrayList<DeploymentPolicy>();
-        for (DeploymentPolicy policy1
-                : cartridgeDepPolicies) {
-            for (DeploymentPolicy policy2
-                    : lbCartridgeDepPolicies) {
-                if (policy1.equals(policy2)) {
-                    commonPolicies.add(policy1);
-                }
-            }
-
-        }
-        return commonPolicies.toArray(new DeploymentPolicy[0]);
-    }
-
-    public static void undeployApplication(String applicationId) throws RestAPIException {
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
-            try {
-                autoscalerServiceClient.unDeployDeploymentPolicy(applicationId);
-            } catch (RemoteException e) {
-                log.error("Error while unDeploying the Deployment Policy for  " + applicationId);
-                throw new RestAPIException(e);
-            }
-        }
-
-
-    }
-
-    public static void undeployCartridge(String cartridgeType) throws RestAPIException {
+    
+    public static void deleteCartridgeDefinition(String cartridgeType) throws RestAPIException {
 
         CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
         if (cloudControllerServiceClient != null) {
@@ -325,141 +192,324 @@ public class StratosApiV41Utils {
             throw new RestAPIException(msg, e);
         }
     }
-
-
-//    public static void deployPartition(Partition partitionBean) throws RestAPIException {
-//
-//        //log.info("***** " + cartridgeDefinitionBean.toString() + " *****");
-//
-//        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-//        if (autoscalerServiceClient != null) {
-//
-//            org.apache.stratos.cloud.controller.stub.deployment.partition.Partition partition =
-//                    PojoConverter.convertToCCPartitionPojo(partitionBean);
-//
-//            try {
-//                autoscalerServiceClient.deployPartition(partition);
-//            } catch (RemoteException e) {
-//                log.error(e.getMessage(), e);
-//                throw new RestAPIException(e.getMessage(), e);
-//            } catch (AutoScalerServiceInvalidPartitionExceptionException e) {
-//                String message = e.getFaultMessage().getInvalidPartitionException().getMessage();
-//                log.error(message, e);
-//                throw new RestAPIException(message, e);
-//            }
-//
-//        }
-//    }
-
-    public static void deployAutoscalingPolicy(AutoscalePolicy autoscalePolicyBean) throws RestAPIException {
-
-        log.info(String.format("Deploying autoscaling policy: [id] %s", autoscalePolicyBean.getId()));
-
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
-
-            org.apache.stratos.autoscaler.stub.autoscale.policy.AutoscalePolicy autoscalePolicy = PojoConverter.
-                    convertToCCAutoscalerPojo(autoscalePolicyBean);
-
-            try {
-                autoscalerServiceClient
-                        .deployAutoscalingPolicy(autoscalePolicy);
-            } 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 List<Cartridge> getCartridgesByCategory(String category, String criteria, ConfigurationContext configurationContext) 
+			throws RestAPIException {
+		List<Cartridge> cartridges = null;
+		
+		if (category.equals("singleTenant")) {
+			cartridges = getAvailableCartridges(null, false, configurationContext);
+		} else if (category.equals("multiTenant")) {
+			cartridges = getAvailableCartridges(null, true, configurationContext);
+		} else if (category.equals("loadBalancer")) {
+			cartridges = getAvailableLbCartridges(false, configurationContext);
+		} else if (category.equals("provider")) {
+			cartridges = getAvailableCartridgesByProvider(criteria, configurationContext);
+		}
+		
+		return cartridges;
+	}
+	
+	public static Cartridge getCartridgeByCategory(String category, String cartridgeType, ConfigurationContext configurationContext) 
+	throws RestAPIException {
+		List<Cartridge> cartridges = getCartridgesByCategory(category, null, configurationContext);
+		
+		for (Cartridge cartridge : cartridges) {
+			if (cartridge.getCartridgeType().equals(cartridgeType)) {
+				return cartridge;
+			}
+		}
+		String msg = "Unavailable cartridge type: " + cartridgeType;
+		log.error(msg);
+		throw new RestAPIException(msg);
+	}
+    
+	/*private static Cartridge getAvailableCartridgeInfo(String cartridgeType, Boolean multiTenant, ConfigurationContext configurationContext) throws RestAPIException {
+        List<Cartridge> cartridges = getAvailableCartridges(null, multiTenant, configurationContext);
+        for (Cartridge cartridge : cartridges) {
+            if (cartridge.getCartridgeType().equals(cartridgeType)) {
+                return cartridge;
             }
         }
-    }
-
-    public static void updateAutoscalingPolicy(AutoscalePolicy autoscalePolicyBean) throws RestAPIException {
-
-        log.info(String.format("Updating autoscaling policy: [id] %s", autoscalePolicyBean.getId()));
-
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
-
-            org.apache.stratos.autoscaler.stub.autoscale.policy.AutoscalePolicy autoscalePolicy = PojoConverter.
-                    convertToCCAutoscalerPojo(autoscalePolicyBean);
+        String msg = "Unavailable cartridge type: " + cartridgeType;
+        log.error(msg);
+        throw new RestAPIException(msg);
+    }*/
 
-            try {
-                autoscalerServiceClient.updateAutoscalingPolicy(autoscalePolicy);
-            } 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);
+    private static List<Cartridge> getAvailableLbCartridges(Boolean multiTenant,
+                                                    ConfigurationContext configurationContext) throws RestAPIException {
+        List<Cartridge> cartridges = getAvailableCartridges(null, multiTenant,
+                configurationContext);
+        List<Cartridge> lbCartridges = new ArrayList<Cartridge>();
+        for (Cartridge cartridge : cartridges) {
+            if (cartridge.isLoadBalancer()) {
+                lbCartridges.add(cartridge);
             }
         }
+
+		/*if(lbCartridges == null || lbCartridges.isEmpty()) {
+            String msg = "Load balancer Cartridges are not available.";
+	        log.error(msg);
+	        throw new RestAPIException(msg) ;
+		}*/
+        return lbCartridges;
     }
 
-    public static String deployDeploymentPolicy(
-            org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy deploymentPolicyBean)
-            throws RestAPIException {
+	private static List<Cartridge> getAvailableCartridgesByProvider(String provider, ConfigurationContext configurationContext) throws RestAPIException {
+		List<Cartridge> cartridges = new ArrayList<Cartridge>();
 
-        String policyId = null;
+		if (log.isDebugEnabled()) {
+			log.debug("Getting available cartridges. Privider name : " + provider );
+		}
 
-        if (log.isDebugEnabled()) {
-            log.debug("Starting to deploy a deployment policy of application: "
-                    + deploymentPolicyBean.applicationPolicy.applicationId);
-        }
+		boolean allowMultipleSubscription = new Boolean(
+				System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
 
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
+		try {
 
-            org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy deploymentPolicy =
-                    PojoConverter.convetToASDeploymentPolicyPojo(deploymentPolicyBean);
 
-            try {
-                policyId = autoscalerServiceClient.deployDeploymentPolicy(deploymentPolicy);
-            } 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);
-            }
+			String[] availableCartridges = CloudControllerServiceClient.getServiceClient().getRegisteredCartridges();
 
-            log.info(String.format("Deployed deployment policy: [id] %s", policyId));
-        }
-        
-        return policyId;
-    }
+			if (availableCartridges != null) {
+				for (String cartridgeType : availableCartridges) {
+					CartridgeInfo cartridgeInfo = null;
+					try {
+						cartridgeInfo = CloudControllerServiceClient.getServiceClient().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;
+					}
 
-    public static void updateDeploymentPolicy(
-            org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy deploymentPolicyBean)
-            throws RestAPIException {
 
-        //FIXME we do not have any use-case now?? - Nirmal
-//        log.info(String.format("Updating deployment policy: [id] %s", deploymentPolicyBean.id));
-//
-//        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-//        if (autoscalerServiceClient != null) {
-//
-//            org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy deploymentPolicy =
-//                    PojoConverter.convetToASDeploymentPolicyPojo(deploymentPolicyBean);
-//
-//
-//            try {
-//                autoscalerServiceClient.updateDeploymentPolicy(deploymentPolicy);
-//            } 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);
-//            }
-//        }
+					if (!cartridgeInfo.getProvider().equals(provider)) {
+						continue;
+					}
+
+					Cartridge cartridge = new Cartridge();
+					cartridge.setCartridgeType(cartridgeType);
+					cartridge.setProvider(cartridgeInfo.getProvider());
+					cartridge.setDisplayName(cartridgeInfo.getDisplayName());
+					cartridge.setDescription(cartridgeInfo.getDescription());
+					cartridge.setVersion(cartridgeInfo.getVersion());
+					cartridge.setMultiTenant(cartridgeInfo.getMultiTenant());
+					cartridge.setHostName(cartridgeInfo.getHostName());
+					cartridge.setDefaultAutoscalingPolicy(cartridgeInfo.getDefaultAutoscalingPolicy());
+					cartridge.setDefaultDeploymentPolicy(cartridgeInfo.getDefaultDeploymentPolicy());
+					//cartridge.setStatus(CartridgeConstants.NOT_SUBSCRIBED);
+					cartridge.setCartridgeAlias("-");
+					cartridge.setPersistence(cartridgeInfo.getPersistence());
+					cartridge.setServiceGroup(cartridgeInfo.getServiceGroup());
+
+					if (cartridgeInfo.getProperties() != null) {
+						for (org.apache.stratos.cloud.controller.stub.Property property : cartridgeInfo
+								.getProperties()) {
+							if (property.getName().equals("load.balancer")) {
+								cartridge.setLoadBalancer(true);
+							}
+						}
+					}
+					//cartridge.setActiveInstances(0);
+					cartridges.add(cartridge);
+				}
+			} else {
+				if (log.isDebugEnabled()) {
+					log.debug("There are no available cartridges");
+				}
+			}
+		} catch (Exception e) {
+			String msg = "Error while getting available cartridges. Cause: " + e.getMessage();
+			log.error(msg, e);
+			throw new RestAPIException(msg, e);
+		}
+
+		Collections.sort(cartridges);
+
+		if (log.isDebugEnabled()) {
+			log.debug("Returning available cartridges " + cartridges.size());
+		}
+
+		return cartridges;
     }
 
+    public static List<Cartridge> getAvailableCartridges(String cartridgeSearchString, Boolean multiTenant, ConfigurationContext configurationContext) throws RestAPIException {
+        List<Cartridge> cartridges = new ArrayList<Cartridge>();
+
+        if (log.isDebugEnabled()) {
+            log.debug("Getting available cartridges. Search String: " + cartridgeSearchString + ", Multi-Tenant: " + multiTenant);
+        }
+
+        boolean allowMultipleSubscription = new Boolean(
+                System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
+
+        try {
+            Pattern searchPattern = getSearchStringPattern(cartridgeSearchString);
+
+            String[] availableCartridges = CloudControllerServiceClient.getServiceClient().getRegisteredCartridges();
+
+            if (availableCartridges != null) {
+                for (String cartridgeType : availableCartridges) {
+                    CartridgeInfo cartridgeInfo = null;
+                    try {
+                        cartridgeInfo = CloudControllerServiceClient.getServiceClient().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 (multiTenant != null && !multiTenant && cartridgeInfo.getMultiTenant()) {
+                        // Need only Single-Tenant cartridges
+                        continue;
+                    } else if (multiTenant != null && multiTenant && !cartridgeInfo.getMultiTenant()) {
+                        // Need only Multi-Tenant cartridges
+                        continue;
+                    }
+
+                    if (!StratosApiV41Utils.cartridgeMatches(cartridgeInfo, searchPattern)) {
+                        continue;
+                    }
+
+                    Cartridge cartridge = new Cartridge();
+                    cartridge.setCartridgeType(cartridgeType);
+                    cartridge.setProvider(cartridgeInfo.getProvider());
+                    cartridge.setDisplayName(cartridgeInfo.getDisplayName());
+                    cartridge.setDescription(cartridgeInfo.getDescription());
+                    cartridge.setVersion(cartridgeInfo.getVersion());
+                    cartridge.setMultiTenant(cartridgeInfo.getMultiTenant());
+                    cartridge.setHostName(cartridgeInfo.getHostName());
+                    cartridge.setDefaultAutoscalingPolicy(cartridgeInfo.getDefaultAutoscalingPolicy());
+                    cartridge.setDefaultDeploymentPolicy(cartridgeInfo.getDefaultDeploymentPolicy());
+                    //cartridge.setStatus(CartridgeConstants.NOT_SUBSCRIBED);
+                    cartridge.setCartridgeAlias("-");
+                    cartridge.setPersistence(cartridgeInfo.getPersistence());
+                    cartridge.setServiceGroup(cartridgeInfo.getServiceGroup());
+
+                    if (cartridgeInfo.getProperties() != null) {
+                        for (org.apache.stratos.cloud.controller.stub.Property property : cartridgeInfo.getProperties()) {
+                            if (property.getName().equals("load.balancer")) {
+                                cartridge.setLoadBalancer(true);
+                            }
+                        }
+                    }
+                    //cartridge.setActiveInstances(0);
+                    cartridges.add(cartridge);
+
+
+                    if (cartridgeInfo.getMultiTenant() && !allowMultipleSubscription) {
+                        // If the cartridge is multi-tenant. We should not let users
+                        // createSubscription twice.
+                        if (isAlreadySubscribed(cartridgeType,
+                                ApplicationManagementUtil.getTenantId(configurationContext))) {
+                            if (log.isDebugEnabled()) {
+                                log.debug("Already subscribed to " + cartridgeType
+                                        + ". This multi-tenant cartridge will not be available to createSubscription");
+                            }
+                            //cartridge.setStatus(CartridgeConstants.SUBSCRIBED);
+                        }
+                    }
+                }
+            } else {
+                if (log.isDebugEnabled()) {
+                    log.debug("There are no available cartridges");
+                }
+            }
+        } catch (Exception e) {
+            String msg = "Error while getting available cartridges. Cause: " + e.getMessage();
+            log.error(msg, e);
+            throw new RestAPIException(msg, e);
+        }
+
+        Collections.sort(cartridges);
+
+        if (log.isDebugEnabled()) {
+            log.debug("Returning available cartridges " + cartridges.size());
+        }
+
+        return cartridges;
+    }
+
+    private static boolean isAlreadySubscribed(String cartridgeType,
+                                               int tenantId) {
+
+        Collection<CartridgeSubscription> subscriptionList = CartridgeSubscriptionManager.isCartridgeSubscribed(tenantId, cartridgeType);
+        if (subscriptionList == null || subscriptionList.isEmpty()) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    private static Pattern getSearchStringPattern(String searchString) {
+        if (log.isDebugEnabled()) {
+            log.debug("Creating search pattern for " + searchString);
+        }
+        if (searchString != null) {
+            // Copied from org.wso2.carbon.webapp.mgt.WebappAdmin.doesWebappSatisfySearchString(WebApplication, String)
+            String regex = searchString.toLowerCase().replace("..?", ".?").replace("..*", ".*").replaceAll("\\?", ".?")
+                    .replaceAll("\\*", ".*?");
+            if (log.isDebugEnabled()) {
+                log.debug("Created regex: " + regex + " for search string " + searchString);
+            }
+
+            Pattern pattern = Pattern.compile(regex);
+            return pattern;
+        }
+        return null;
+    }
+
+    private static boolean cartridgeMatches(CartridgeInfo cartridgeInfo, Pattern pattern) {
+        if (pattern != null) {
+            boolean matches = false;
+            if (cartridgeInfo.getDisplayName() != null) {
+                matches = pattern.matcher(cartridgeInfo.getDisplayName().toLowerCase()).find();
+            }
+            if (!matches && cartridgeInfo.getDescription() != null) {
+                matches = pattern.matcher(cartridgeInfo.getDescription().toLowerCase()).find();
+            }
+            return matches;
+        }
+        return true;
+    }
+
+    private static boolean cartridgeMatches(CartridgeInfo cartridgeInfo, CartridgeSubscription cartridgeSubscription, Pattern pattern) {
+        if (pattern != null) {
+            boolean matches = false;
+            if (cartridgeInfo.getDisplayName() != null) {
+                matches = pattern.matcher(cartridgeInfo.getDisplayName().toLowerCase()).find();
+            }
+            if (!matches && cartridgeInfo.getDescription() != null) {
+                matches = pattern.matcher(cartridgeInfo.getDescription().toLowerCase()).find();
+            }
+            if (!matches && cartridgeSubscription.getType() != null) {
+                matches = pattern.matcher(cartridgeSubscription.getType().toLowerCase()).find();
+            }
+            if (!matches && cartridgeSubscription.getAlias() != null) {
+                matches = pattern.matcher(cartridgeSubscription.getAlias().toLowerCase()).find();
+            }
+            return matches;
+        }
+        return true;
+    }
+    	
+    // Util methods to get the service clients
+    
     private static CloudControllerServiceClient getCloudControllerServiceClient() throws RestAPIException {
 
         try {
@@ -473,94 +523,66 @@ public class StratosApiV41Utils {
         }
     }
 
-//    public static Partition[] getAvailablePartitions() throws RestAPIException {
-//
-//        org.apache.stratos.cloud.controller.stub.deployment.partition.Partition[] partitions = null;
-//        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-//        if (autoscalerServiceClient != null) {
-//            try {
-//                partitions = autoscalerServiceClient.getAvailablePartitions();
-//
-//            } catch (RemoteException e) {
-//                String errorMsg = "Error while getting available partitions. Cause : " + e.getMessage();
-//                log.error(errorMsg, e);
-//                throw new RestAPIException(errorMsg, e);
-//            }
-//        }
-//
-//        return PojoConverter.populatePartitionPojos(partitions);
-//    }
-//
-//    public static Partition[] getPartitionsOfDeploymentPolicy(String deploymentPolicyId)
-//            throws RestAPIException {
-//
-//        org.apache.stratos.cloud.controller.stub.deployment.partition.Partition[] partitions = null;
-//        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-//        if (autoscalerServiceClient != null) {
-//            try {
-//                partitions =
-//                        autoscalerServiceClient.getPartitionsOfDeploymentPolicy(deploymentPolicyId);
-//
-//            } catch (RemoteException e) {
-//                String errorMsg = "Error while getting available partitions for deployment policy id " +
-//                        deploymentPolicyId + ". Cause: " + e.getMessage();
-//                log.error(errorMsg, e);
-//                throw new RestAPIException(errorMsg, e);
-//            }
-//        }
-//
-//        return PojoConverter.populatePartitionPojos(partitions);
-//    }
-//
-//    public static Partition[]
-//    getPartitionsOfGroup(String deploymentPolicyId, String groupId) throws RestAPIException {
-//
-//        org.apache.stratos.cloud.controller.stub.deployment.partition.Partition[] partitions = null;
-//        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-//        if (autoscalerServiceClient != null) {
-//            try {
-//                partitions =
-//                        autoscalerServiceClient.getPartitionsOfGroup(deploymentPolicyId, groupId);
-//
-//            } catch (RemoteException e) {
-//                String errorMsg = "Error while getting available partitions for deployment policy id " + deploymentPolicyId +
-//                        ", group id " + groupId + ". Cause: " + e.getMessage();
-//                log.error(errorMsg, e);
-//                throw new RestAPIException(errorMsg, e);
-//            }
-//        }
-//
-//        return PojoConverter.populatePartitionPojos(partitions);
-//    }
-//
-//    public static Partition getPartition(String partitionId) throws RestAPIException {
-//
-//        org.apache.stratos.cloud.controller.stub.deployment.partition.Partition partition = null;
-//        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-//        if (autoscalerServiceClient != null) {
-//            try {
-//                partition = autoscalerServiceClient.getPartition(partitionId);
-//
-//            } catch (RemoteException e) {
-//                String errorMsg = "Error while getting partition for id " + partitionId + ". Cause: " + e.getMessage();
-//                log.error(errorMsg, e);
-//                throw new RestAPIException(errorMsg, e);
-//            }
-//        }
-//
-//        return PojoConverter.populatePartitionPojo(partition);
-//    }
+    private static AutoscalerServiceClient getAutoscalerServiceClient() throws RestAPIException {
+
+        try {
+            return AutoscalerServiceClient.getServiceClient();
+
+        } catch (AxisFault axisFault) {
+            String errorMsg = "Error while getting AutoscalerServiceClient instance to connect to the "
+                    + "Autoscaler. Cause: " + axisFault.getMessage();
+            log.error(errorMsg, axisFault);
+            throw new RestAPIException(errorMsg, axisFault);
+        }
+    }
+
+    // Util methods for Autoscaling policies
+
+    public static void createAutoscalingPolicy(AutoscalePolicy autoscalePolicyBean) throws RestAPIException {
+
+        log.info(String.format("Deploying autoscaling policy: [id] %s", autoscalePolicyBean.getId()));
+
+        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
+        if (autoscalerServiceClient != null) {
+
+            org.apache.stratos.autoscaler.stub.autoscale.policy.AutoscalePolicy autoscalePolicy = PojoConverter.
+                    convertToCCAutoscalerPojo(autoscalePolicyBean);
+
+            try {
+                autoscalerServiceClient
+                        .deployAutoscalingPolicy(autoscalePolicy);
+            } 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 void updateAutoscalingPolicy(AutoscalePolicy autoscalePolicyBean) throws RestAPIException {
 
-    private static AutoscalerServiceClient getAutoscalerServiceClient() throws RestAPIException {
+        log.info(String.format("Updating autoscaling policy: [id] %s", autoscalePolicyBean.getId()));
 
-        try {
-            return AutoscalerServiceClient.getServiceClient();
+        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
+        if (autoscalerServiceClient != null) {
 
-        } catch (AxisFault axisFault) {
-            String errorMsg = "Error while getting AutoscalerServiceClient instance to connect to the "
-                    + "Autoscaler. Cause: " + axisFault.getMessage();
-            log.error(errorMsg, axisFault);
-            throw new RestAPIException(errorMsg, axisFault);
+            org.apache.stratos.autoscaler.stub.autoscale.policy.AutoscalePolicy autoscalePolicy = PojoConverter.
+                    convertToCCAutoscalerPojo(autoscalePolicyBean);
+
+            try {
+                autoscalerServiceClient.updateAutoscalingPolicy(autoscalePolicy);
+            } 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);
+            }
         }
     }
 
@@ -599,331 +621,163 @@ public class StratosApiV41Utils {
 
         return PojoConverter.populateAutoscalePojo(autoscalePolicy);
     }
+    
+    // Util methods for Deployment policies
+    
+    public static String createDeploymentPolicy(
+    		org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy deploymentPolicyBean)
+    	            throws RestAPIException {
+    	String policyId = null;
 
-    public static org.apache.stratos.rest.endpoint.bean.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);
-            }
+        if (log.isDebugEnabled()) {
+            log.debug("Starting to create a deployment policy of application: "
+                    + deploymentPolicyBean.applicationPolicy.applicationId);
         }
-
-
-        return PojoConverter.populateDeploymentPolicyPojos(deploymentPolicies);
-    }
-
-    public static org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy[]
-    getDeploymentPolicies(String cartridgeType) throws RestAPIException {
-
-        DeploymentPolicy[] deploymentPolicies = null;
+        
         AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
         if (autoscalerServiceClient != null) {
-            try {
-                deploymentPolicies = autoscalerServiceClient.getDeploymentPolicies(cartridgeType);
-
-            } catch (RemoteException e) {
-                String errorMsg = "Error while getting available deployment policies for cartridge type " +
-                        cartridgeType + ". Cause: " + e.getMessage();
-                log.error(errorMsg, e);
-                throw new RestAPIException(errorMsg, e);
-            }
-        }
-
-        if (deploymentPolicies.length == 0) {
-            String errorMsg = "Cannot find any matching deployment policy for Cartridge [type] " + cartridgeType;
-            log.error(errorMsg);
-            throw new RestAPIException(errorMsg);
-        }
-
-        return PojoConverter.populateDeploymentPolicyPojos(deploymentPolicies);
-    }
 
-    public static org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy
-    getDeploymentPolicy(String deploymentPolicyId) throws RestAPIException {
+            org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy deploymentPolicy =
+                    PojoConverter.convetToASDeploymentPolicyPojo(deploymentPolicyBean);
 
-        DeploymentPolicy deploymentPolicy = null;
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
             try {
-                deploymentPolicy = autoscalerServiceClient.getDeploymentPolicy(deploymentPolicyId);
-
+                policyId = autoscalerServiceClient.addDeploymentPolicy(deploymentPolicy);
             } catch (RemoteException e) {
-                String errorMsg = "Error while getting deployment policy with id " +
-                        deploymentPolicyId + ". Cause: " + e.getMessage();
-                log.error(errorMsg, e);
-                throw new RestAPIException(errorMsg, 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);
             }
-        }
 
-        if (deploymentPolicy == null) {
-            String errorMsg = "Cannot find a matching deployment policy for [id] " + deploymentPolicyId;
-            log.error(errorMsg);
-            throw new RestAPIException(errorMsg);
+            log.info(String.format("Created deployment policy: [id] %s", policyId));
         }
-
-        return PojoConverter.populateDeploymentPolicyPojo(deploymentPolicy);
+        
+        return policyId;
     }
-
-    public static ApplicationLevelNetworkPartition[] getPartitionGroups(String deploymentPolicyId)
+    
+    public static void updateDeploymentPolicy(
+            org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy deploymentPolicyBean)
             throws RestAPIException {
 
-        org.apache.stratos.autoscaler.stub.deployment.partition.ApplicationLevelNetworkPartition[] partitionGroups = null;
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
-            try {
-                partitionGroups = autoscalerServiceClient.getApplicationLevelNetworkPartition(deploymentPolicyId);
-
-            } catch (RemoteException e) {
-                String errorMsg = "Error getting available partition groups for deployment policy id "
-                        + deploymentPolicyId + ". Cause: " + e.getMessage();
-                log.error(errorMsg, e);
-                throw new RestAPIException(errorMsg, e);
-            }
-        }
-
-        return PojoConverter.populatePartitionGroupPojos(partitionGroups);
-    }
-
-    static Cartridge getAvailableCartridgeInfo(String cartridgeType, Boolean multiTenant, ConfigurationContext configurationContext) throws RestAPIException {
-        List<Cartridge> cartridges = getAvailableCartridges(null, multiTenant, configurationContext);
-        for (Cartridge cartridge : cartridges) {
-            if (cartridge.getCartridgeType().equals(cartridgeType)) {
-                return cartridge;
-            }
-        }
-        String msg = "Unavailable cartridge type: " + cartridgeType;
-        log.error(msg);
-        throw new RestAPIException(msg);
-    }
-
-    static List<Cartridge> getAvailableLbCartridges(Boolean multiTenant,
-                                                    ConfigurationContext configurationContext) throws RestAPIException {
-        List<Cartridge> cartridges = getAvailableCartridges(null, multiTenant,
-                configurationContext);
-        List<Cartridge> lbCartridges = new ArrayList<Cartridge>();
-        for (Cartridge cartridge : cartridges) {
-            if (cartridge.isLoadBalancer()) {
-                lbCartridges.add(cartridge);
-            }
-        }
-
-		/*if(lbCartridges == null || lbCartridges.isEmpty()) {
-            String msg = "Load balancer Cartridges are not available.";
-	        log.error(msg);
-	        throw new RestAPIException(msg) ;
-		}*/
-        return lbCartridges;
-    }
-
-	static List<Cartridge> getAvailableCartridgesByProvider(String provider, ConfigurationContext configurationContext) throws RestAPIException {
-		List<Cartridge> cartridges = new ArrayList<Cartridge>();
-
-		if (log.isDebugEnabled()) {
-			log.debug("Getting available cartridges. Privider name : " + provider );
-		}
-
-		boolean allowMultipleSubscription = new Boolean(
-				System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
-
-		try {
-
-
-			String[] availableCartridges = CloudControllerServiceClient.getServiceClient().getRegisteredCartridges();
-
-			if (availableCartridges != null) {
-				for (String cartridgeType : availableCartridges) {
-					CartridgeInfo cartridgeInfo = null;
-					try {
-						cartridgeInfo = CloudControllerServiceClient.getServiceClient().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;
-					}
-
-					Cartridge cartridge = new Cartridge();
-					cartridge.setCartridgeType(cartridgeType);
-					cartridge.setProvider(cartridgeInfo.getProvider());
-					cartridge.setDisplayName(cartridgeInfo.getDisplayName());
-					cartridge.setDescription(cartridgeInfo.getDescription());
-					cartridge.setVersion(cartridgeInfo.getVersion());
-					cartridge.setMultiTenant(cartridgeInfo.getMultiTenant());
-					cartridge.setHostName(cartridgeInfo.getHostName());
-					cartridge.setDefaultAutoscalingPolicy(cartridgeInfo.getDefaultAutoscalingPolicy());
-					cartridge.setDefaultDeploymentPolicy(cartridgeInfo.getDefaultDeploymentPolicy());
-					//cartridge.setStatus(CartridgeConstants.NOT_SUBSCRIBED);
-					cartridge.setCartridgeAlias("-");
-					cartridge.setPersistence(cartridgeInfo.getPersistence());
-					cartridge.setServiceGroup(cartridgeInfo.getServiceGroup());
-
-					if (cartridgeInfo.getProperties() != null) {
-						for (org.apache.stratos.cloud.controller.stub.Property property : cartridgeInfo
-								.getProperties()) {
-							if (property.getName().equals("load.balancer")) {
-								cartridge.setLoadBalancer(true);
-							}
-						}
-					}
-					//cartridge.setActiveInstances(0);
-					cartridges.add(cartridge);
-				}
-			} else {
-				if (log.isDebugEnabled()) {
-					log.debug("There are no available cartridges");
-				}
-			}
-		} catch (Exception e) {
-			String msg = "Error while getting available cartridges. Cause: " + e.getMessage();
-			log.error(msg, e);
-			throw new RestAPIException(msg, e);
-		}
-
-		Collections.sort(cartridges);
-
-		if (log.isDebugEnabled()) {
-			log.debug("Returning available cartridges " + cartridges.size());
-		}
-
-		return cartridges;
+        //FIXME we do not have any use-case now?? - Nirmal
+//        log.info(String.format("Updating deployment policy: [id] %s", deploymentPolicyBean.id));
+//
+//        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
+//        if (autoscalerServiceClient != null) {
+//
+//            org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy deploymentPolicy =
+//                    PojoConverter.convetToASDeploymentPolicyPojo(deploymentPolicyBean);
+//
+//
+//            try {
+//                autoscalerServiceClient.updateDeploymentPolicy(deploymentPolicy);
+//            } 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);
+//            }
+//        }
     }
 
-    static List<Cartridge> getAvailableCartridges(String cartridgeSearchString, Boolean multiTenant, ConfigurationContext configurationContext) throws RestAPIException {
-        List<Cartridge> cartridges = new ArrayList<Cartridge>();
+    public static org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy[]
+    getDeploymentPolicies() throws RestAPIException {
 
-        if (log.isDebugEnabled()) {
-            log.debug("Getting available cartridges. Search String: " + cartridgeSearchString + ", Multi-Tenant: " + multiTenant);
+        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);
+            }
         }
 
-        boolean allowMultipleSubscription = new Boolean(
-                System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
 
-        try {
-            Pattern searchPattern = getSearchStringPattern(cartridgeSearchString);
+        return PojoConverter.populateDeploymentPolicyPojos(deploymentPolicies);
+    }
 
-            String[] availableCartridges = CloudControllerServiceClient.getServiceClient().getRegisteredCartridges();
+    /*public static org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy[]
+    getDeploymentPolicies(String cartridgeType) throws RestAPIException {
 
-            if (availableCartridges != null) {
-                for (String cartridgeType : availableCartridges) {
-                    CartridgeInfo cartridgeInfo = null;
-                    try {
-                        cartridgeInfo = CloudControllerServiceClient.getServiceClient().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;
-                    }
+        DeploymentPolicy[] deploymentPolicies = null;
+        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
+        if (autoscalerServiceClient != null) {
+            try {
+                deploymentPolicies = autoscalerServiceClient.getDeploymentPolicies(cartridgeType);
 
-                    if (multiTenant != null && !multiTenant && cartridgeInfo.getMultiTenant()) {
-                        // Need only Single-Tenant cartridges
-                        continue;
-                    } else if (multiTenant != null && multiTenant && !cartridgeInfo.getMultiTenant()) {
-                        // Need only Multi-Tenant cartridges
-                        continue;
-                    }
+            } catch (RemoteException e) {
+                String errorMsg = "Error while getting available deployment policies for cartridge type " +
+                        cartridgeType + ". Cause: " + e.getMessage();
+                log.error(errorMsg, e);
+                throw new RestAPIException(errorMsg, e);
+            }
+        }
 
-                    if (!StratosApiV41Utils.cartridgeMatches(cartridgeInfo, searchPattern)) {
-                        continue;
-                    }
+        if (deploymentPolicies.length == 0) {
+            String errorMsg = "Cannot find any matching deployment policy for Cartridge [type] " + cartridgeType;
+            log.error(errorMsg);
+            throw new RestAPIException(errorMsg);
+        }
 
-                    Cartridge cartridge = new Cartridge();
-                    cartridge.setCartridgeType(cartridgeType);
-                    cartridge.setProvider(cartridgeInfo.getProvider());
-                    cartridge.setDisplayName(cartridgeInfo.getDisplayName());
-                    cartridge.setDescription(cartridgeInfo.getDescription());
-                    cartridge.setVersion(cartridgeInfo.getVersion());
-                    cartridge.setMultiTenant(cartridgeInfo.getMultiTenant());
-                    cartridge.setHostName(cartridgeInfo.getHostName());
-                    cartridge.setDefaultAutoscalingPolicy(cartridgeInfo.getDefaultAutoscalingPolicy());
-                    cartridge.setDefaultDeploymentPolicy(cartridgeInfo.getDefaultDeploymentPolicy());
-                    //cartridge.setStatus(CartridgeConstants.NOT_SUBSCRIBED);
-                    cartridge.setCartridgeAlias("-");
-                    cartridge.setPersistence(cartridgeInfo.getPersistence());
-                    cartridge.setServiceGroup(cartridgeInfo.getServiceGroup());
+        return PojoConverter.populateDeploymentPolicyPojos(deploymentPolicies);
+    }*/
 
-                    if (cartridgeInfo.getProperties() != null) {
-                        for (org.apache.stratos.cloud.controller.stub.Property property : cartridgeInfo.getProperties()) {
-                            if (property.getName().equals("load.balancer")) {
-                                cartridge.setLoadBalancer(true);
-                            }
-                        }
-                    }
-                    //cartridge.setActiveInstances(0);
-                    cartridges.add(cartridge);
+    public static org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy
+    getDeploymentPolicy(String deploymentPolicyId) throws RestAPIException {
 
+        DeploymentPolicy deploymentPolicy = null;
+        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
+        if (autoscalerServiceClient != null) {
+            try {
+                deploymentPolicy = autoscalerServiceClient.getDeploymentPolicy(deploymentPolicyId);
 
-                    if (cartridgeInfo.getMultiTenant() && !allowMultipleSubscription) {
-                        // If the cartridge is multi-tenant. We should not let users
-                        // createSubscription twice.
-                        if (isAlreadySubscribed(cartridgeType,
-                                ApplicationManagementUtil.getTenantId(configurationContext))) {
-                            if (log.isDebugEnabled()) {
-                                log.debug("Already subscribed to " + cartridgeType
-                                        + ". This multi-tenant cartridge will not be available to createSubscription");
-                            }
-                            //cartridge.setStatus(CartridgeConstants.SUBSCRIBED);
-                        }
-                    }
-                }
-            } else {
-                if (log.isDebugEnabled()) {
-                    log.debug("There are no available cartridges");
-                }
+            } catch (RemoteException e) {
+                String errorMsg = "Error while getting deployment policy with id " +
+                        deploymentPolicyId + ". Cause: " + e.getMessage();
+                log.error(errorMsg, e);
+                throw new RestAPIException(errorMsg, e);
             }
-        } catch (Exception e) {
-            String msg = "Error while getting available cartridges. Cause: " + e.getMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg, e);
         }
 
-        Collections.sort(cartridges);
-
-        if (log.isDebugEnabled()) {
-            log.debug("Returning available cartridges " + cartridges.size());
+        if (deploymentPolicy == null) {
+            String errorMsg = "Cannot find a matching deployment policy for [id] " + deploymentPolicyId;
+            log.error(errorMsg);
+            throw new RestAPIException(errorMsg);
         }
 
-        return cartridges;
+        return PojoConverter.populateDeploymentPolicyPojo(deploymentPolicy);
     }
 
-    private static boolean isAlreadySubscribed(String cartridgeType,
-                                               int tenantId) {
+    public static ApplicationLevelNetworkPartition[] getPartitionGroups(String deploymentPolicyId)
+            throws RestAPIException {
 
-        Collection<CartridgeSubscription> subscriptionList = CartridgeSubscriptionManager.isCartridgeSubscribed(tenantId, cartridgeType);
-        if (subscriptionList == null || subscriptionList.isEmpty()) {
-            return false;
-        } else {
-            return true;
+        org.apache.stratos.autoscaler.stub.deployment.partition.ApplicationLevelNetworkPartition[] partitionGroups = null;
+        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
+        if (autoscalerServiceClient != null) {
+            try {
+                partitionGroups = autoscalerServiceClient.getApplicationLevelNetworkPartition(deploymentPolicyId);
+
+            } catch (RemoteException e) {
+                String errorMsg = "Error getting available partition groups for deployment policy id "
+                        + deploymentPolicyId + ". Cause: " + e.getMessage();
+                log.error(errorMsg, e);
+                throw new RestAPIException(errorMsg, e);
+            }
         }
-    }
 
-    public static List<ServiceDefinitionBean> getdeployedServiceInformation() throws RestAPIException {
+        return PojoConverter.populatePartitionGroupPojos(partitionGroups);
+    }
+    
+    // Util methods for services and subscriptions
+    
+    /*public static List<ServiceDefinitionBean> getdeployedServiceInformation() throws RestAPIException {
 
         Collection<Service> services = null;
 
@@ -941,9 +795,9 @@ public class StratosApiV41Utils {
         }
 
         return null;
-    }
+    }*/
 
-    public static ServiceDefinitionBean getDeployedServiceInformation(String type) throws RestAPIException {
+    /*public static ServiceDefinitionBean getDeployedServiceInformation(String type) throws RestAPIException {
 
         Service service = null;
 
@@ -961,9 +815,9 @@ public class StratosApiV41Utils {
         } else {
             return PojoConverter.convertToServiceDefinitionBean(service);
         }
-    }
+    }*/
 
-    public static List<Cartridge> getActiveDeployedServiceInformation(ConfigurationContext configurationContext) throws RestAPIException {
+    /*public static List<Cartridge> getActiveDeployedServiceInformation(ConfigurationContext configurationContext) throws RestAPIException {
 
         Collection<Service> services = null;
 
@@ -1001,17 +855,16 @@ public class StratosApiV41Utils {
             }
         }
         
-		/*if (availableMultitenantCartridges.isEmpty()) {
-            String msg = "Cannot find any active deployed service for tenant [id] "+tenantId;
-			log.error(msg);
-			throw new RestAPIException(msg);
-		}*/
+//		if (availableMultitenantCartridges.isEmpty()) {
+//            String msg = "Cannot find any active deployed service for tenant [id] "+tenantId;
+//			log.error(msg);
+//			throw new RestAPIException(msg);
+//		}
 
         return availableMultitenantCartridges;
-    }
-
+    }*/
 
-    static List<Cartridge> getSubscriptions(String cartridgeSearchString, String serviceGroup, ConfigurationContext configurationContext) throws RestAPIException {
+    public static List<Cartridge> getSubscriptions(String cartridgeSearchString, String serviceGroup, ConfigurationContext configurationContext) throws RestAPIException {
         List<Cartridge> cartridges = new ArrayList<Cartridge>();
 
         if (log.isDebugEnabled()) {
@@ -1088,8 +941,7 @@ public class StratosApiV41Utils {
         return cartridges;
     }
 
-
-    static Cartridge getSubscription(String cartridgeAlias, ConfigurationContext configurationContext) throws RestAPIException {
+    /*static Cartridge getSubscription(String cartridgeAlias, ConfigurationContext configurationContext) throws RestAPIException {
 
         Cartridge cartridge = getCartridgeFromSubscription(CartridgeSubscriptionManager.getCartridgeSubscription(ApplicationManagementUtil.
                 getTenantId(configurationContext), cartridgeAlias));
@@ -1121,9 +973,9 @@ public class StratosApiV41Utils {
         cartridge.setStatus(cartridgeStatus);
         return cartridge;
 
-    }
+    }*/
 
-    static int getActiveInstances(String cartridgeType, String cartridgeAlias, ConfigurationContext configurationContext) throws RestAPIException {
+    /*static int getActiveInstances(String cartridgeType, String cartridgeAlias, ConfigurationContext configurationContext) throws RestAPIException {
         int noOfActiveInstances = 0;
         Cluster cluster = TopologyClusterInformationModel.getInstance().getCluster(ApplicationManagementUtil.getTenantId(configurationContext),
                 cartridgeAlias);
@@ -1140,7 +992,7 @@ public class StratosApiV41Utils {
             }
         }
         return noOfActiveInstances;
-    }
+    }*/
 
     private static Cartridge getCartridgeFromSubscription(CartridgeSubscription subscription) throws RestAPIException {
 
@@ -1206,63 +1058,11 @@ public class StratosApiV41Utils {
 
     }
 
-    static Pattern getSearchStringPattern(String searchString) {
-        if (log.isDebugEnabled()) {
-            log.debug("Creating search pattern for " + searchString);
-        }
-        if (searchString != null) {
-            // Copied from org.wso2.carbon.webapp.mgt.WebappAdmin.doesWebappSatisfySearchString(WebApplication, String)
-            String regex = searchString.toLowerCase().replace("..?", ".?").replace("..*", ".*").replaceAll("\\?", ".?")
-                    .replaceAll("\\*", ".*?");
-            if (log.isDebugEnabled()) {
-                log.debug("Created regex: " + regex + " for search string " + searchString);
-            }
-
-            Pattern pattern = Pattern.compile(regex);
-            return pattern;
-        }
-        return null;
-    }
-
-    static boolean cartridgeMatches(CartridgeInfo cartridgeInfo, Pattern pattern) {
-        if (pattern != null) {
-            boolean matches = false;
-            if (cartridgeInfo.getDisplayName() != null) {
-                matches = pattern.matcher(cartridgeInfo.getDisplayName().toLowerCase()).find();
-            }
-            if (!matches && cartridgeInfo.getDescription() != null) {
-                matches = pattern.matcher(cartridgeInfo.getDescription().toLowerCase()).find();
-            }
-            return matches;
-        }
-        return true;
-    }
-
-    static boolean cartridgeMatches(CartridgeInfo cartridgeInfo, CartridgeSubscription cartridgeSubscription, Pattern pattern) {
-        if (pattern != null) {
-            boolean matches = false;
-            if (cartridgeInfo.getDisplayName() != null) {
-                matches = pattern.matcher(cartridgeInfo.getDisplayName().toLowerCase()).find();
-            }
-            if (!matches && cartridgeInfo.getDescription() != null) {
-                matches = pattern.matcher(cartridgeInfo.getDescription().toLowerCase()).find();
-            }
-            if (!matches && cartridgeSubscription.getType() != null) {
-                matches = pattern.matcher(cartridgeSubscription.getType().toLowerCase()).find();
-            }
-            if (!matches && cartridgeSubscription.getAlias() != null) {
-                matches = pattern.matcher(cartridgeSubscription.getAlias().toLowerCase()).find();
-            }
-            return matches;
-        }
-        return true;
-    }
-
     public static CartridgeSubscription getCartridgeSubscription(String alias, ConfigurationContext configurationContext) {
         return CartridgeSubscriptionManager.getCartridgeSubscription(ApplicationManagementUtil.getTenantId(configurationContext), alias);
     }
 
-    static SubscriptionInfo subscribe(CartridgeInfoBean cartridgeInfoBean, ConfigurationContext configurationContext, String tenantUsername, String tenantDomain)
+    /*static SubscriptionInfo subscribe(CartridgeInfoBean cartridgeInfoBean, ConfigurationContext configurationContext, String tenantUsername, String tenantDomain)
             throws RestAPIException {
 
         SubscriptionData subscriptionData = new SubscriptionData();
@@ -1288,32 +1088,173 @@ public class StratosApiV41Utils {
             subscriptionData.setProperties(PojoConverter.getProperties(cartridgeInfoBean.getProperty()));
         }
 
-        /*
-        if (cartridgeInfoBean.isPersistanceRequired()) {
-        if (cartridgeInfoBean.getPersistence() != null) {
-            // Add persistence related properties to PersistenceContext
-            PersistenceContext persistenceContext = new PersistenceContext();
-            persistenceContext.setPersistanceRequiredProperty(IS_VOLUME_REQUIRED, String.valueOf(cartridgeInfoBean.isPersistanceRequired()));
-            persistenceContext.setSizeProperty(VOLUME_SIZE, cartridgeInfoBean.getSize());
-            persistenceContext.setDeleteOnTerminationProperty(SHOULD_DELETE_VOLUME, String.valueOf(cartridgeInfoBean.isRemoveOnTermination()));
-            if(cartridgeInfoBean.getVolumeId() != null) {
-                persistenceContext.setVolumeIdProperty(VOLUME_ID, String.valueOf(cartridgeInfoBean.getVolumeId()));
-            }
-            subscriptionData.setPersistanceCtxt(persistenceContext);
-        }
-        */
+        
+//        if (cartridgeInfoBean.isPersistanceRequired()) {
+//        if (cartridgeInfoBean.getPersistence() != null) {
+//            // Add persistence related properties to PersistenceContext
+//            PersistenceContext persistenceContext = new PersistenceContext();
+//            persistenceContext.setPersistanceRequiredProperty(IS_VOLUME_REQUIRED, String.valueOf(cartridgeInfoBean.isPersistanceRequired()));
+//            persistenceContext.setSizeProperty(VOLUME_SIZE, cartridgeInfoBean.getSize());
+//            persistenceContext.setDeleteOnTerminationProperty(SHOULD_DELETE_VOLUME, String.valueOf(cartridgeInfoBean.isRemoveOnTermination()));
+//            if(cartridgeInfoBean.getVolumeId() != null) {
+//                persistenceContext.setVolumeIdProperty(VOLUME_ID, String.valueOf(cartridgeInfoBean.getVolumeId()));
+//            }
+//            subscriptionData.setPersistanceCtxt(persistenceContext);
+//        }
+        
         //subscribe
         SubscriptionInfo subscriptionInfo = null;
         try {
             subscriptionInfo = CartridgeSubscriptionManager.subscribeToCartridgeWithProperties(subscriptionData);
         } catch (Exception e) {
-            throw new RestAPIException(e.getMessage(), e);
+            throw new RestAPIException(e.getMessage(), e);
+        }
+
+        return subscriptionInfo;
+    }*/
+
+    /*static void unsubscribe(String alias, String tenantDomain) throws RestAPIException {
+
+        try {
+            cartridgeSubsciptionManager.unsubscribeFromCartridge(tenantDomain, alias);
+
+        } catch (ADCException e) {
+            String msg = "Failed to unsubscribe from [alias] " + alias + ". Cause: " + e.getMessage();
+            log.error(msg, e);
+            throw new RestAPIException(msg, e);
+
+        } catch (NotSubscribedException e) {
+            log.error(e.getMessage(), e);
+            throw new RestAPIException(e.getMessage(), e);
+        }
+    }*/
+    
+    /**
+     * Super tenant will deploy multitenant service.
+     * <p/>
+     * get domain , subdomain as well..
+     *
+     * @param clusterDomain
+     * @param clusterSubdomain
+     */
+    /*static void deployService(String cartridgeType, String alias, String autoscalingPolicy, String deploymentPolicy,
+                              String tenantDomain, String tenantUsername, int tenantId, String clusterDomain, String clusterSubdomain, String tenantRange, boolean isPublic) throws RestAPIException {
+        log.info("Deploying service..");
+        try {
+            serviceDeploymentManager.deployService(cartridgeType, autoscalingPolicy, deploymentPolicy, tenantId, tenantRange, tenantDomain, tenantUsername, isPublic);
+
+        } catch (Exception e) {
+            String msg = String.format("Failed to deploy the Service [Cartridge type] %s [alias] %s . Cause: %s", cartridgeType, alias, e.getMessage());
+            log.error(msg, e);
+            throw new RestAPIException(msg, e);
+        }
+    }*/
+
+    /*static void undeployService(String serviceType) throws RestAPIException, ServiceDoesNotExistException {
+
+        try {
+            serviceDeploymentManager.undeployService(serviceType);
+        } catch (ServiceDoesNotExistException ex) {
+            throw ex;
+        } catch (Exception e) {
+            String msg = "Failed to undeploy service cluster definition of type " + serviceType + " Cause: " + e.getMessage();
+            log.error(msg, e);
+            throw new RestAPIException(msg, e);
         }
+    }*/
+    
+    /*public static void addSubscriptionDomains(ConfigurationContext configurationContext,
+            String subscriptionAlias,
+            SubscriptionDomainRequest request)
+	throws RestAPIException {
+		try {
+			int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
+			
+			for (org.apache.stratos.rest.endpoint.bean.subscription.domain.SubscriptionDomainBean subscriptionDomain : request.domains) {
+			boolean isDomainExists = isSubscriptionDomainExists(configurationContext, subscriptionAlias, subscriptionDomain.domainName);
+				if (isDomainExists) {
+					String message = "Subscription domain " + subscriptionDomain.domainName + " exists";
+					throw new RestAPIException(Status.INTERNAL_SERVER_ERROR, message);
+				}
+			}
+	
+			for (org.apache.stratos.rest.endpoint.bean.subscription.domain.SubscriptionDomainBean subscriptionDomain : request.domains) {
+		
+				CartridgeSubscriptionManager.addSubscriptionDomain(tenantId, subscriptionAlias,
+				subscriptionDomain.domainName, subscriptionDomain.applicationContext);
+			}
+		} catch (Exception e) {
+			log.error(e.getMessage(), e);
+			throw new RestAPIException(e.getMessage(), e);
+			}
+	}*/
 
-        return subscriptionInfo;
-    }
+	/*public static boolean isSubscriptionDomainExists(ConfigurationContext configurationContext,
+	                   String subscriptionAlias, String domain) throws RestAPIException {
+		try {
+			int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
+			SubscriptionDomainBean subscriptionDomain = PojoConverter.populateSubscriptionDomainPojo(CartridgeSubscriptionManager.getSubscriptionDomain(tenantId,
+					subscriptionAlias, domain));
+		
+			if (subscriptionDomain.domainName != null) {
+				return true;
+			} else {
+				return false;
+			}
+		} catch (Exception e) {
+			log.error(e.getMessage(), e);
+			throw new RestAPIException(e.getMessage(), e);
+		}
+	}*/
+	
+	/*public static List<SubscriptionDomainBean> getSubscriptionDomains(ConfigurationContext configurationContext,
+	                                    String subscriptionAlias) throws RestAPIException {
+		try {
+			int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
+			return PojoConverter.populateSubscriptionDomainPojos(CartridgeSubscriptionManager.getSubscriptionDomains(tenantId, subscriptionAlias));
+		} catch (Exception e) {
+			log.error(e.getMessage(), e);
+			throw new RestAPIException(e.getMessage(), e);
+		}
+	}*/
+
+	/*public static SubscriptionDomainBean getSubscriptionDomain(ConfigurationContext configurationContext,
+	                             String subscriptionAlias, String domain) throws RestAPIException {
+		try {
+			int tenantId = ApplicationManagementUtil
+			.getTenantId(configurationContext);
+			SubscriptionDomainBean subscriptionDomain = PojoConverter.populateSubscriptionDomainPojo(CartridgeSubscriptionManager.getSubscriptionDomain(tenantId,
+			subscriptionAlias, domain));
+			
+			if (subscriptionDomain == null) {
+				String message = "Could not find a subscription for [domain] " + domain + " and [alias] " + subscriptionAlias;
+				log.error(message);
+				throw new RestAPIException(Status.NOT_FOUND, message);
+			}
+			
+			return subscriptionDomain;
+		
+		} catch (Exception e) {
+			log.error(e.getMessage(), e);
+			throw new RestAPIException(e.getMessage(), e);
+		}
+	}*/
+
+	/*public static void removeSubscriptionDomain(ConfigurationContext configurationContext,
+	              String subscriptionAlias, String domain) throws RestAPIException, DomainMappingExistsException {
+		try {
+			int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
+				CartridgeSubscriptionManager.removeSubscriptionDomain(tenantId, subscriptionAlias, domain);
+		} catch (Exception e) {
+				log.error(e.getMessage(), e);
+				throw new RestAPIException(e.getMessage(), e);
+		}
 
-    public static org.apache.stratos.rest.endpoint.bean.topology.Cluster getCluster(String subscriptionAlias, ConfigurationContext configurationContext) throws RestAPIException {
+	}*/
+    
+    // Util methods for clusters
+    
+    /*public static org.apache.stratos.rest.endpoint.bean.topology.Cluster getCluster(String subscriptionAlias, ConfigurationContext configurationContext) throws RestAPIException {
 
         Cluster cluster = TopologyClusterInformationModel.getInstance().getCluster(ApplicationManagementUtil.getTenantId(configurationContext),
                 subscriptionAlias);
@@ -1322,7 +1263,7 @@ public class StratosApiV41Utils {
         } else {
             return PojoConverter.populateClusterPojos(cluster, null);
         }
-    }
+    }*/
 
     public static org.apache.stratos.rest.endpoint.bean.topology.Cluster[] getClustersForTenant(ConfigurationContext configurationContext) {
 
@@ -1357,7 +1298,7 @@ public class StratosApiV41Utils {
 
     }
 
-    public static org.apache.stratos.rest.endpoint.bean.topology.Cluster[] getClustersForCartridgeType(String cartridgeType) {
+    /*public static org.apache.stratos.rest.endpoint.bean.topology.Cluster[] getClustersForCartridgeType(String cartridgeType) {
 
         Set<Cluster> clusterSet = TopologyClusterInformationModel
                 .getInstance()
@@ -1371,7 +1312,7 @@ public class StratosApiV41Utils {
         arrCluster = clusters.toArray(arrCluster);
         return arrCluster;
 
-    }
+    }*/
 
     // return the cluster id for the lb. This is a temp fix.
     /*private static String subscribeToLb(String cartridgeType, String loadBalancedCartridgeType, String lbAlias,
@@ -1419,224 +1360,232 @@ public class StratosApiV41Utils {
         return cartridgeSubscription.getClusterDomain();
     } */
 
-    static void unsubscribe(String alias, String tenantDomain) throws RestAPIException {
+    // Util methods for repo actions
 
+    public static void getGitRepositoryNotification(Payload payload) throws RestAPIException {
         try {
-            cartridgeSubsciptionManager.unsubscribeFromCartridge(tenantDomain, alias);
 
-        } catch (ADCException e) {
-            String msg = "Failed to unsubscribe from [alias] " + alias + ". Cause: " + e.getMessage();
+            RepositoryNotification repoNotification = new RepositoryNotification();
+            repoNotification.updateRepository(payload.getRepository().getUrl());
+
+        } catch (Exception e) {
+            String msg = "Failed to get git repository notifications. Cause : " + e.getMessage();
             log.error(msg, e);
             throw new RestAPIException(msg, e);
-
-        } catch (NotSubscribedException e) {
-            log.error(e.getMessage(), e);
-            throw new RestAPIException(e.getMessage(), e);
         }
     }
 
-    /**
-     * Super tenant will deploy multitenant service.
-     * <p/>
-     * get domain , subdomain as well..
-     *
-     * @param clusterDomain
-     * @param clusterSubdomain
-     */
-    static void deployService(String cartridgeType, String alias, String autoscalingPolicy, String deploymentPolicy,
-                              String tenantDomain, String tenantUsername, int tenantId, String clusterDomain, String clusterSubdomain, String tenantRange, boolean isPublic) throws RestAPIException {
-        log.info("Deploying service..");
+    public static void synchronizeRepository(CartridgeSubscription cartridgeSubscription) throws RestAPIException {
         try {
-            serviceDeploymentManager.deployService(cartridgeType, autoscalingPolicy, deploymentPolicy, tenantId, tenantRange, tenantDomain, tenantUsername, isPublic);
-
+            RepositoryNotification repoNotification = new RepositoryNotification();
+            repoNotification.updateRepository(cartridgeSubscription);
         } catch (Exception e) {
-            String msg = String.format("Failed to deploy the Service [Cartridge type] %s [alias] %s . Cause: %s", cartridgeType, alias, e.getMessage());
+            String msg = "Failed to get git repository notifications. Cause : " + e.getMessage();
             log.error(msg, e);
             throw new RestAPIException(msg, e);
         }
     }
 
-    static void undeployService(String serviceType) throws RestAPIException, ServiceDoesNotExistException {
+    // Util methods for service groups
+    
+    public static void createServiceGroupDefinition(ServiceGroupDefinition serviceGroupDefinition) throws RestAPIException {
 
         try {
-            serviceDeploymentManager.undeployService(serviceType);
-        } catch (ServiceDoesNotExistException ex) {
-            throw ex;
-        } catch (Exception e) {
-            String msg = "Failed to undeploy service cluster definition of type " + serviceType + " Cause: " + e.getMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg, e);
+            serviceGropingManager.deployServiceGroupDefinition(serviceGroupDefinition);
+
+        } catch (InvalidServiceGroupException e) {
+            throw new RestAPIException(e);
+        } catch (ServiceGroupDefinitioException e) {
+            throw new RestAPIException(e);
+        } catch (ADCException e) {
+            throw new RestAPIException(e);
+        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException e) {
+            throw new RestAPIException(e);
         }
+
+        log.info("Successfully created the Service Group Definition with name " + serviceGroupDefinition.getName());
     }
 
-    static void getGitRepositoryNotification(Payload payload) throws RestAPIException {
-        try {
+    public static ServiceGroupDefinition getServiceGroupDefinition(String serviceGroupDefinitionName) throws RestAPIException {
 
-            RepositoryNotification repoNotification = new RepositoryNotification();
-            repoNotification.updateRepository(payload.getRepository().getUrl());
+        try {
+            return serviceGropingManager.getServiceGroupDefinition(serviceGroupDefinitionName);
 
-        } catch (Exception e) {
-            String msg = "Failed to get git repository notifications. Cause : " + e.getMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg, e);
+        } catch (ServiceGroupDefinitioException e) {
+            throw new RestAPIException(e);
+        } catch (ADCException e) {
+            throw new RestAPIException(e);
         }
     }
 
-    static void synchronizeRepository(CartridgeSubscription cartridgeSubscription) throws RestAPIException {
+    public static ServiceGroupDefinition[] getServiceGroupDefinitions() throws RestAPIException {
         try {
-            RepositoryNotification repoNotification = new RepositoryNotification();
-            repoNotification.updateRepository(cartridgeSubscription);
-        } catch (Exception e) {
-            String msg = "Failed to get git repository notifications. Cause : " + e.getMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg, e);
+            return serviceGropingManager.getServiceGroupDefinitions();
+        } catch (ADCException e) {
+            throw new RestAPIException(e);
+        } catch (ServiceGroupDefinitioException e) {
+            throw new RestAPIException(e);
         }
     }
 
-    public static void addSubscriptionDomains(ConfigurationContext configurationContext,
-                                              String subscriptionAlias,
-                                              SubscriptionDomainRequest request)
-            throws RestAPIException {
-        try {
-            int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
-
-            for (org.apache.stratos.rest.endpoint.bean.subscription.domain.SubscriptionDomainBean subscriptionDomain : request.domains) {
-                boolean isDomainExists = isSubscriptionDomainExists(configurationContext, subscriptionAlias, subscriptionDomain.domainName);
-                if (isDomainExists) {
-                    String message = "Subscription domain " + subscriptionDomain.domainName + " exists";
-                    throw new RestAPIException(Status.INTERNAL_SERVER_ERROR, message);
-                }
-            }
+    public static void deleteServiceGroupDefinition(String serviceGroupDefinitionName) throws RestAPIException {
 
-            for (org.apache.stratos.rest.endpoint.bean.subscription.domain.SubscriptionDomainBean subscriptionDomain : request.domains) {
+        try {
+            serviceGropingManager.undeployServiceGroupDefinition(serviceGroupDefinitionName);
 
-                CartridgeSubscriptionManager.addSubscriptionDomain(tenantId, subscriptionAlias,
-                        subscriptionDomain.domainName, subscriptionDomain.applicationContext);
-            }
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            throw new RestAPIException(e.getMessage(), e);
+        } catch (ServiceGroupDefinitioException e) {
+            throw new RestAPIException(e);
+        } catch (ADCException e) {
+            throw new RestAPIException(e);
         }
+
+        log.info("Successfully deleted the Service Group Definition with name " + serviceGroupDefinitionName);
     }
 
-    public static boolean isSubscriptionDomainExists(ConfigurationContext configurationContext,
-                                                     String subscriptionAlias, String domain) throws RestAPIException {
-        try {
-            int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
-            SubscriptionDomainBean subscriptionDomain = PojoConverter.populateSubscriptionDomainPojo(CartridgeSubscriptionManager.getSubscriptionDomain(tenantId,
-                    subscriptionAlias, domain));
+    // Util methods for Applications
 
-            if (subscriptionDomain.domainName != null) {
-                return true;
-            } else {
-                return false;
+    /*public static void createApplication (ApplicationDefinition appDefinition) throws RestAPIException {
+
+        try {
+            if (persistenceManager.getApplication(appDefinition.getApplicationId()) != null) {
+                String errorMsg = "Application Definition with id " + appDefinition.getApplicationId() +
+                        " already exists";
+                log.error(errorMsg);
+                throw new RestAPIException(errorMsg);
             }
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            throw new RestAPIException(e.getMessage(), e);
+        } catch (PersistenceManagerException e) {
+            throw new RestAPIException(e);
         }
 
-    }
-
-    public static List<SubscriptionDomainBean> getSubscriptionDomains(ConfigurationContext configurationContext,
-                                                                      String subscriptionAlias) throws RestAPIException {
         try {
-            int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
-            return PojoConverter.populateSubscriptionDomainPojos(CartridgeSubscriptionManager.getSubscriptionDomains(tenantId, subscriptionAlias));
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            throw new RestAPIException(e.getMessage(), e);
+            persistenceManager.createApplication(appDefinition);
+        } catch (PersistenceManagerException e) {
+            throw new RestAPIException(e);
         }
-    }
+    }*/
+
+    /*public static void deleteApplication (String appId) throws RestAPIException {
 
-    public static SubscriptionDomainBean getSubscriptionDomain(ConfigurationContext configurationContext,
-                                                               String subscriptionAlias, String domain) throws RestAPIException {
         try {
-            int tenantId = ApplicationManagementUtil
-                    .getTenantId(configurationContext);
-            SubscriptionDomainBean subscriptionDomain = PojoConverter.populateSubscriptionDomainPojo(CartridgeSubscriptionManager.getSubscriptionDomain(tenantId,
-                    subscriptionAlias, domain));
-
-            if (subscriptionDomain == null) {
-                String message = "Could not find a subscription for [domain] " + domain + " and [alias] " + subscriptionAlias;
-                log.error(message);
-                throw new RestAPIException(Status.NOT_FOUND, message);
-            }
+            persistenceManager.removeApplication(appId);
+        } catch (PersistenceManagerException e) {
+            throw new RestAPIException(e);
+        }
+    }*/
 
-            return subscriptionDomain;
+    public static void createApplicationDefinition(ApplicationDefinition appDefinition, ConfigurationContext ctxt,
+                                                   String userName, String tenantDomain)
+            throws RestAPIException {
 
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            throw new RestAPIException(e.getMessage(), e);
-        }
-    }
+        // 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();
 
-    public static void removeSubscriptionDomain(ConfigurationContext configurationContext,
-                                                String subscriptionAlias, String domain) throws RestAPIException, DomainMappingExistsException {
         try {
-            int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
-            CartridgeSubscriptionManager.removeSubscriptionDomain(tenantId, subscriptionAlias, domain);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            throw new RestAPIException(e.getMessage(), e);
+            if (subscriptionMgr.getApplicationSubscription(appId, tenantId) != null) {
+                String msg = "Duplicate application appId: " + appId + " for tenant " + tenantId;
+                throw new RestAPIException(msg);
+            }
+        } catch (ApplicationSubscriptionException e1) {
+            throw new RestAPIException(e1);
         }
 
-    }
+        ApplicationContext applicationContext =
+                PojoConverter.convertApplicationBeanToApplicationContext(appDefinition);
+        applicationContext.setTenantId(ApplicationManagementUtil.getTenantId(ctxt));
+        applicationContext.setTenantDomain(tenantDomain);
+        applicationContext.setTeantAdminUsername(userName);
 
-    public static void deployServiceGroupDefinition(ServiceGroupDefinition serviceGroupDefinition) throws RestAPIException {
+        if (appDefinition.getProperty() != null) {
+            org.apache.stratos.autoscaler.stub.Properties properties = new org.apache.stratos.autoscaler.stub.Properties();
+            for (org.apache.stratos.manager.composite.application.beans.PropertyBean propertyBean : appDefinition.getProperty()) {
+                org.apache.stratos.autoscaler.stub.Property property = new org.apache.stratos.autoscaler.stub.Property();
+                property.setName(propertyBean.getName());
+                property.setValue(propertyBean.getValue());
+                properties.addProperties(property);
+            }
+            applicationContext.setProperties(properties);
+        }
 
         try {
-            serviceGropingManager.deployServiceGroupDefinition(serviceGroupDefinition);
-
-        } catch (InvalidServiceGroupException e) {
-            throw new RestAPIException(e);
-        } catch (ServiceGroupDefinitioException e) {
-            throw new RestAPIException(e);
-        } catch (ADCException e) {
+            AutoscalerServiceClient.getServiceClient().deployApplication(applicationContext);
+        } catch (AutoScalerServiceApplicationDefinitionExceptionException e) {
             throw new RestAPIException(e);
-        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException e) {
+        } catch (RemoteException e) {
             throw new RestAPIException(e);
         }
-
-        log.info("Successfully deployed the Service Group Definition with name " + serviceGroupDefinition.getName());
     }
+    
+    public static void deployApplication(
+            org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy deploymentPolicyBean)
+            throws RestAPIException {
 
-    static ServiceGroupDefinition getServiceGroupDefinition(String serviceGroupDefinitionName) throws RestAPIException {
+        if (log.isDebugEnabled()) {
+            log.debug("Starting to deploy a deployment policy of application: "
+                    + deploymentPolicyBean.applicationPolicy.applicationId);
+        }
 
-        try {
-            return serviceGropingManager.getServiceGroupDefinition(serviceGroupDefinitionName);
+        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
+        if (autoscalerServiceClient != null) {
 
-        } catch (ServiceGroupDefinitioException e) {
-            throw new RestAPIException(e);
-        } catch (ADCException e) {
-            throw new RestAPIException(e);
+            org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentP

<TRUNCATED>

[2/8] stratos git commit: Removed all commited out methods

Posted by re...@apache.org.
Removed all commited out methods


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

Branch: refs/heads/4.1.0-test
Commit: baa034d1027e7883a8e8fb2b2e07e79feccb71cc
Parents: b0d91f7
Author: Shiro <sh...@wso2.com>
Authored: Wed Dec 10 10:08:34 2014 +0530
Committer: Shiro <sh...@wso2.com>
Committed: Wed Dec 10 10:09:40 2014 +0530

----------------------------------------------------------------------
 .../rest/endpoint/api/StratosApiV41.java        | 185 +------
 .../rest/endpoint/api/StratosApiV41Utils.java   | 483 +------------------
 2 files changed, 27 insertions(+), 641 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/baa034d1/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
index 3676660..93c2460 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41.java
@@ -18,7 +18,6 @@
  */
 package org.apache.stratos.rest.endpoint.api;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.common.beans.TenantInfoBean;
@@ -27,21 +26,16 @@ import org.apache.stratos.common.util.ClaimsMgtUtil;
 import org.apache.stratos.common.util.CommonUtil;
 import org.apache.stratos.manager.composite.application.beans.ApplicationDefinition;
 import org.apache.stratos.manager.dto.Cartridge;
-import org.apache.stratos.manager.exception.DomainMappingExistsException;
 import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
 import org.apache.stratos.manager.subscription.ApplicationSubscription;
 import org.apache.stratos.manager.subscription.CartridgeSubscription;
 import org.apache.stratos.manager.user.mgt.StratosUserManager;
 import org.apache.stratos.manager.user.mgt.beans.UserInfoBean;
 import org.apache.stratos.manager.user.mgt.exception.UserManagerException;
-import org.apache.stratos.rest.endpoint.ServiceHolder;
-import org.apache.stratos.rest.endpoint.Utils;
 import org.apache.stratos.rest.endpoint.annotation.AuthorizationAction;
 import org.apache.stratos.rest.endpoint.annotation.SuperTenantService;
 import org.apache.stratos.rest.endpoint.bean.ApplicationBean;
-import org.apache.stratos.rest.endpoint.bean.CartridgeInfoBean;
 import org.apache.stratos.rest.endpoint.bean.StratosApiResponse;
-import org.apache.stratos.rest.endpoint.bean.SubscriptionDomainRequest;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.autoscale.AutoscalePolicy;
 import org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy;
 import org.apache.stratos.rest.endpoint.bean.cartridge.definition.CartridgeDefinitionBean;
@@ -49,10 +43,11 @@ import org.apache.stratos.rest.endpoint.bean.kubernetes.KubernetesGroup;
 import org.apache.stratos.rest.endpoint.bean.kubernetes.KubernetesHost;
 import org.apache.stratos.rest.endpoint.bean.kubernetes.KubernetesMaster;
 import org.apache.stratos.rest.endpoint.bean.repositoryNotificationInfoBean.Payload;
-import org.apache.stratos.rest.endpoint.bean.subscription.domain.SubscriptionDomainBean;
 import org.apache.stratos.rest.endpoint.bean.topology.Cluster;
 import org.apache.stratos.rest.endpoint.exception.RestAPIException;
 import org.apache.stratos.rest.endpoint.exception.TenantNotFoundException;
+import org.apache.stratos.rest.endpoint.ServiceHolder;
+import org.apache.stratos.rest.endpoint.Utils;
 import org.apache.stratos.tenant.mgt.core.TenantPersistor;
 import org.apache.stratos.tenant.mgt.util.TenantMgtUtil;
 import org.wso2.carbon.context.CarbonContext;
@@ -288,8 +283,7 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/monitor/tenants")
-    public Response getServiceGroups()
-            throws RestAPIException {
+    public Response getServiceGroups() throws RestAPIException {
         ServiceGroupDefinition[] serviceGroups = StratosApiV41Utils.getServiceGroupDefinitions();
         Response.ResponseBuilder rb;
         if (serviceGroups != null) {
@@ -374,7 +368,7 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/add/deploymentPolicy")
-    public Response createDeploymentPolicy(DeploymentPolicy deploymentPolicy)
+    public Response createDeploymentPolicyDefinition(DeploymentPolicy deploymentPolicy)
             throws RestAPIException {
         String policyId = StratosApiV41Utils.createDeploymentPolicy(deploymentPolicy);
         //URI url = uriInfo.getAbsolutePathBuilder().path(policyId).build();
@@ -444,7 +438,7 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/partition")
-    public Response getPartitionGroups(@PathParam("deploymentPolicyId") String deploymentPolicyId)
+    public Response getPartitionGroupsForDeploymentPolicy(@PathParam("deploymentPolicyId") String deploymentPolicyId)
             throws RestAPIException {
         return Response.ok().entity(StratosApiV41Utils.getPartitionGroups(deploymentPolicyId)).build();
     }
@@ -454,7 +448,7 @@ public class StratosApiV41 extends AbstractApi {
 //    @Produces("application/json")
 //    @Consumes("application/json")
 //    @AuthorizationAction("/permission/admin/manage/view/partition")
-//    public Response getPartitionGroup(@PathParam("deploymentPolicyId") String deploymentPolicyId,
+//    public Response getPartitionGroupForDeploymentPolicy(@PathParam("deploymentPolicyId") String deploymentPolicyId,
 //                                      @PathParam("partitionGroupId") String partitionGroupId) throws RestAPIException {
 //        return Response.ok().entity(StratosApiV41Utils.getPartitionsOfGroup(deploymentPolicyId, partitionGroupId)).build();
 //    }
@@ -464,7 +458,7 @@ public class StratosApiV41 extends AbstractApi {
 //    @Produces("application/json")
 //    @Consumes("application/json")
 //    @AuthorizationAction("/permission/admin/manage/view/partition")
-//    public Response getPartitionsOfPolicy(@PathParam("deploymentPolicyId") String deploymentPolicyId)
+//    public Response getPartitionsForDeploymentPolicy(@PathParam("deploymentPolicyId") String deploymentPolicyId)
 //            throws RestAPIException {
 //
 //        return Response.ok().entity(StratosApiV41Utils.getPartitionsOfDeploymentPolicy(deploymentPolicyId)).build();
@@ -544,18 +538,7 @@ public class StratosApiV41 extends AbstractApi {
     }
 
     // API methods for applications
-    
-    /* -- replaced above DELETE /applicationDeployments/{applicationId}
-    @DELETE
-    @Path("/applications/{applicationId}")
-    @Produces("application/json")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/add/cartridgeDefinition")
-    public Response unDeployApplication(@PathParam("applicationId") String applicationId) throws RestAPIException {
-        StratosApiV41Utils.undeployApplication(applicationId);
-        return Response.noContent().build();
-    }*/
-    
+       
     /**
      * Gets details of all the applications.
      *
@@ -631,7 +614,7 @@ public class StratosApiV41 extends AbstractApi {
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/monitor/tenants")
     @SuperTenantService(true)
-    public Response removeApplicationDefinition(@PathParam("applicationId") String applicationId)
+    public Response deleteApplicationDefinition(@PathParam("applicationId") String applicationId)
             throws RestAPIException {
         StratosApiV41Utils.removeApplicationDefinition(applicationId, getConfigContext(), getUsername(),
                 getTenantDomain());
@@ -641,7 +624,7 @@ public class StratosApiV41 extends AbstractApi {
     // API methods for subscriptions
 
     /**
-     * Gets the subscriptions of application.
+     * Gets the subscriptions of an application.
      *
      * @param applicationId the application id
      * @return the subscriptions of application
@@ -652,7 +635,7 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/monitor/tenants")
-    public Response getSubscriptionsOfApplication(@PathParam("applicationId") String applicationId) throws RestAPIException {
+    public Response getSubscriptionsForApplication(@PathParam("applicationId") String applicationId) throws RestAPIException {
         ApplicationSubscription subscriptions = StratosApiV41Utils.getApplicationSubscriptions(applicationId, getConfigContext());
         if (subscriptions == null) {
             return Response.status(Response.Status.NOT_FOUND).build();
@@ -672,7 +655,7 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/cartridge")
-    public Response getSubscribedCartridgesOfServiceGroup(@PathParam("serviceGroup") String serviceGroup) throws RestAPIException {
+    public Response getSubscribedCartridgesForServiceGroup(@PathParam("serviceGroup") String serviceGroup) throws RestAPIException {
         List<Cartridge> cartridgeList = StratosApiV41Utils.getSubscriptions(null, serviceGroup, getConfigContext());
         // Following is very important when working with axis2
         ResponseBuilder rb = Response.ok();
@@ -680,96 +663,6 @@ public class StratosApiV41 extends AbstractApi {
         return rb.build();
     }
 
-    /*
-    @GET
-    @Path("/subscriptions/{subscriptionAlias}/cartridges")
-    @Produces("application/json")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/view/cartridge")
-    public Response getSubscribedCartridgeInfo(@PathParam("subscriptionAlias") String subscriptionAlias) throws RestAPIException {
-        ResponseBuilder rb = Response.ok();
-        rb.entity(StratosApiV41Utils.getSubscription(subscriptionAlias, getConfigContext()));
-        return rb.build();
-    }
-
-    @GET
-    @Path("/subscriptions/{subscriptionAlias}/cartridges/{cartridgeType}/active")
-    @Produces("application/json")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/view/instance")
-    public Response getActiveMembersCountOfSubscription(@PathParam("cartridgeType") String cartridgeType,
-                                                        @PathParam("subscriptionAlias") String subscriptionAlias) throws RestAPIException {
-        ResponseBuilder rb = Response.ok();
-        rb.entity(StratosApiV41Utils.getActiveInstances(cartridgeType, subscriptionAlias, getConfigContext()));
-        return rb.build();
-    }
-    
-    @PUT
-    @Path("/subscriptions/{subscriptionAlias}/properties")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/add/subscription")
-    public Response updateSubscriptionProperties(@PathParam("subscriptionAlias") String alias, CartridgeInfoBean cartridgeInfoBean) throws RestAPIException {
-        if (cartridgeInfoBean == null) {
-            Response.notModified().build();
-        }
-        StratosApiV41Utils.updateSubscriptionProperties(getConfigContext(), alias, cartridgeInfoBean.getProperty());
-        return Response.ok().build();
-    }
-    
-    @POST
-    @Path("/subscriptions/{subscriptionAlias}/domains")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/add/domain")
-    public Response addSubscriptionDomains(@PathParam("subscriptionAlias") String subscriptionAlias,
-                                           SubscriptionDomainRequest request) throws RestAPIException {
-        StratosApiV41Utils.addSubscriptionDomains(getConfigContext(), subscriptionAlias, request);
-        return Response.noContent().build();
-    }
-
-    @GET
-    @Path("/subscriptions/{subscriptionAlias}/domains")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/view/domain")
-    public Response getSubscriptionDomains(@PathParam("subscriptionAlias") String subscriptionAlias) throws RestAPIException {
-
-        SubscriptionDomainBean[] subscriptionDomainBean = StratosApiV41Utils.getSubscriptionDomains(getConfigContext(), subscriptionAlias).toArray(new SubscriptionDomainBean[0]);
-
-        if (subscriptionDomainBean.length == 0) {
-            return Response.status(Response.Status.NOT_FOUND).build();
-        } else {
-            return Response.ok().entity(subscriptionDomainBean).build();
-        }
-    }
-
-    @GET
-    @Path("/subscriptions/{subscriptionAlias}/domains/{domainName}")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/view/domain")
-    public Response getSubscriptionDomain(@PathParam("subscriptionAlias") String subscriptionAlias, @PathParam("domainName") String domainName) throws RestAPIException {
-
-        SubscriptionDomainBean subscriptionDomainBean = StratosApiV41Utils.getSubscriptionDomain(getConfigContext(), subscriptionAlias, domainName);
-        if (subscriptionDomainBean.domainName == null) {
-            return Response.status(Response.Status.NOT_FOUND).build();
-        } else {
-            return Response.ok().entity(subscriptionDomainBean).build();
-        }
-    }
-    
-    @DELETE
-    @Path("/subscriptions/{subscriptionAlias}/domains/{domainName}")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/add/domain")
-    public Response removeSubscriptionDomain(@PathParam("subscriptionAlias") String subscriptionAlias,
-                                             @PathParam("domainName") String domainName) throws RestAPIException {
-        try {
-            StratosApiV41Utils.removeSubscriptionDomain(getConfigContext(), subscriptionAlias, domainName);
-        } catch (DomainMappingExistsException e) {
-            return Response.status(Response.Status.NOT_FOUND).build();
-        }
-        return Response.noContent().build();
-    }
-    */
-
     // API methods for clusters
     
     @GET
@@ -777,7 +670,7 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/cluster")
-    public Response getClustersOfTenant() throws RestAPIException {
+    public Response getClustersForTenant() throws RestAPIException {
         return Response.ok().entity(StratosApiV41Utils.getClustersForTenant(getConfigContext())).build();
     }
 
@@ -786,31 +679,19 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/cluster")
-    public Response getClustersOfCartridge(@PathParam("cartridgeType") String cartridgeType) throws RestAPIException {
+    public Response getClustersForCartridge(@PathParam("cartridgeType") String cartridgeType) throws RestAPIException {
 
         ResponseBuilder rb = Response.ok();
         rb.entity(StratosApiV41Utils.getClustersForTenantAndCartridgeType(getConfigContext(), cartridgeType));
         return rb.build();
     }
 
-    /*
-    @GET
-    @Path("/clusters/{subscriptionAlias}")
-    @Produces("application/json")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/view/cluster")
-    public Response getClusterOfSubscription(@PathParam("subscriptionAlias") String subscriptionAlias) throws RestAPIException {
-        ResponseBuilder rb = Response.ok();
-        rb.entity(StratosApiV41Utils.getCluster(subscriptionAlias, getConfigContext()));
-        return rb.build();
-    }*/
-
     @GET
     @Path("/clusters/{clusterId}")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/admin/manage/view/cluster")
-    public Response getCluster(@PathParam("clusterId") String clusterId) throws RestAPIException {
+    public Response getClusterForTenant(@PathParam("clusterId") String clusterId) throws RestAPIException {
         Cluster cluster = null;
         if (log.isDebugEnabled()) {
             log.debug("Finding cluster for [id]: " + clusterId);
@@ -831,26 +712,6 @@ public class StratosApiV41 extends AbstractApi {
         return Response.ok().entity(cluster).build();
     }
 
-    /*
-    @GET
-    @Path("/clusters/{subscriptionAlias}/loadBalancer")
-    @Consumes("application/json")
-    @AuthorizationAction("/permission/admin/manage/view/cluster")
-    public Response getLoadBalancerCluster(@PathParam("subscriptionAlias") String subscriptionAlias) throws RestAPIException {
-        if (log.isDebugEnabled()) {
-            log.debug(String.format("GET /subscription/%s/load-balancer-cluster", subscriptionAlias));
-        }
-        Cartridge subscription = StratosApiV41Utils.getSubscription(subscriptionAlias, getConfigContext());
-        String lbClusterId = subscription.getLbClusterId();
-        if (log.isDebugEnabled()) {
-            log.debug(String.format("Load balancer cluster-id found: %s", lbClusterId));
-        }
-        if (StringUtils.isNotBlank(lbClusterId)) {
-            Response.fromResponse(getCluster(lbClusterId));
-        }
-        return Response.status(Response.Status.NOT_FOUND).build();
-    }*/
-
     // API methods for tenants
     
     /**
@@ -866,7 +727,7 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @AuthorizationAction("/permission/protected/manage/modify/tenants")
     @SuperTenantService(true)
-    public Response addTenant(TenantInfoBean tenantInfoBean) throws RestAPIException {
+    public Response createTenant(TenantInfoBean tenantInfoBean) throws RestAPIException {
         try {
             CommonUtil.validateEmail(tenantInfoBean.getEmail());
         } catch (Exception e) {
@@ -1110,10 +971,10 @@ public class StratosApiV41 extends AbstractApi {
     @Produces("application/json")
     @AuthorizationAction("/permission/protected/manage/monitor/tenants")
     @SuperTenantService(true)
-    public TenantInfoBean getTenantByDomain(@PathParam("tenantDomain") String tenantDomain) throws RestAPIException {
+    public TenantInfoBean getTenantForDomain(@PathParam("tenantDomain") String tenantDomain) throws RestAPIException {
 
         try {
-            return getTenantForDomain(tenantDomain);
+            return getTenantByDomain(tenantDomain);
         } catch (Exception e) {
             String msg = "Error in getting tenant information for tenant " + tenantDomain;
             log.error(msg, e);
@@ -1121,7 +982,7 @@ public class StratosApiV41 extends AbstractApi {
         }
     }
 
-    private TenantInfoBean getTenantForDomain(String tenantDomain) throws Exception {
+    private TenantInfoBean getTenantByDomain(String tenantDomain) throws Exception {
 
         TenantManager tenantManager = ServiceHolder.getTenantManager();
 
@@ -1299,7 +1160,7 @@ public class StratosApiV41 extends AbstractApi {
      * @return the response
      * @throws RestAPIException the rest api exception
      */
-    @POST
+    @PUT
     @Path("/tenants/activate/{tenantDomain}")
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/modify/tenants")
@@ -1343,7 +1204,7 @@ public class StratosApiV41 extends AbstractApi {
      * @return the response
      * @throws RestAPIException the rest api exception
      */
-    @POST
+    @PUT
     @Path("/tenants/deactivate/{tenantDomain}")
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/modify/tenants")
@@ -1426,7 +1287,7 @@ public class StratosApiV41 extends AbstractApi {
     @Consumes("application/json")
     @Produces("application/json")
     @AuthorizationAction("/permission/admin/manage/add/users")
-    public Response addUser(UserInfoBean userInfoBean) throws RestAPIException {
+    public Response createUser(UserInfoBean userInfoBean) throws RestAPIException {
 
         StratosUserManager stratosUserManager = new StratosUserManager();
 
@@ -1740,4 +1601,4 @@ public class StratosApiV41 extends AbstractApi {
         return Response.noContent().build();
     }
 
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/baa034d1/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 4fdfb3c..90dc62b 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
@@ -96,8 +96,9 @@ public class StratosApiV41Utils {
     private static CartridgeSubscriptionManager cartridgeSubsciptionManager = new CartridgeSubscriptionManager();
     private static ServiceGroupingManager serviceGropingManager = new ServiceGroupingManager();
     private static ServiceDeploymentManager serviceDeploymentManager = new ServiceDeploymentManager();
-    private static PersistenceManager persistenceManager = new RegistryBasedPersistenceManager();
 
+    // Util methods for cartridges
+    
     public static void createCartridgeDefinition(CartridgeDefinitionBean cartridgeDefinitionBean, ConfigurationContext ctxt,
                                        String userName, String tenantDomain) throws RestAPIException {
 
@@ -224,18 +225,6 @@ public class StratosApiV41Utils {
 		throw new RestAPIException(msg);
 	}
     
-	/*private static Cartridge getAvailableCartridgeInfo(String cartridgeType, Boolean multiTenant, ConfigurationContext configurationContext) throws RestAPIException {
-        List<Cartridge> cartridges = getAvailableCartridges(null, multiTenant, configurationContext);
-        for (Cartridge cartridge : cartridges) {
-            if (cartridge.getCartridgeType().equals(cartridgeType)) {
-                return cartridge;
-            }
-        }
-        String msg = "Unavailable cartridge type: " + cartridgeType;
-        log.error(msg);
-        throw new RestAPIException(msg);
-    }*/
-
     private static List<Cartridge> getAvailableLbCartridges(Boolean multiTenant,
                                                     ConfigurationContext configurationContext) throws RestAPIException {
         List<Cartridge> cartridges = getAvailableCartridges(null, multiTenant,
@@ -262,9 +251,6 @@ public class StratosApiV41Utils {
 			log.debug("Getting available cartridges. Privider name : " + provider );
 		}
 
-		boolean allowMultipleSubscription = new Boolean(
-				System.getProperty(CartridgeConstants.FEATURE_MULTI_TENANT_MULTIPLE_SUBSCRIPTION_ENABLED));
-
 		try {
 
 
@@ -703,32 +689,6 @@ public class StratosApiV41Utils {
         return PojoConverter.populateDeploymentPolicyPojos(deploymentPolicies);
     }
 
-    /*public static org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy[]
-    getDeploymentPolicies(String cartridgeType) throws RestAPIException {
-
-        DeploymentPolicy[] deploymentPolicies = null;
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
-            try {
-                deploymentPolicies = autoscalerServiceClient.getDeploymentPolicies(cartridgeType);
-
-            } catch (RemoteException e) {
-                String errorMsg = "Error while getting available deployment policies for cartridge type " +
-                        cartridgeType + ". Cause: " + e.getMessage();
-                log.error(errorMsg, e);
-                throw new RestAPIException(errorMsg, e);
-            }
-        }
-
-        if (deploymentPolicies.length == 0) {
-            String errorMsg = "Cannot find any matching deployment policy for Cartridge [type] " + cartridgeType;
-            log.error(errorMsg);
-            throw new RestAPIException(errorMsg);
-        }
-
-        return PojoConverter.populateDeploymentPolicyPojos(deploymentPolicies);
-    }*/
-
     public static org.apache.stratos.rest.endpoint.bean.autoscaler.policy.deployment.DeploymentPolicy
     getDeploymentPolicy(String deploymentPolicyId) throws RestAPIException {
 
@@ -776,93 +736,6 @@ public class StratosApiV41Utils {
     }
     
     // Util methods for services and subscriptions
-    
-    /*public static List<ServiceDefinitionBean> getdeployedServiceInformation() throws RestAPIException {
-
-        Collection<Service> services = null;
-
-        try {
-            services = serviceDeploymentManager.getServices();
-
-        } catch (ADCException e) {
-            String msg = "Unable to get deployed service information. Cause: " + e.getMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg, e);
-        }
-
-        if (services != null && !services.isEmpty()) {
-            return PojoConverter.convertToServiceDefinitionBeans(services);
-        }
-
-        return null;
-    }*/
-
-    /*public static ServiceDefinitionBean getDeployedServiceInformation(String type) throws RestAPIException {
-
-        Service service = null;
-
-        try {
-            service = serviceDeploymentManager.getService(type);
-
-        } catch (ADCException e) {
-            String msg = "Unable to get deployed service information for [type]: " + type + ". Cause: " + e.getMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg, e);
-        }
-
-        if (service == null) {
-            return null;
-        } else {
-            return PojoConverter.convertToServiceDefinitionBean(service);
-        }
-    }*/
-
-    /*public static List<Cartridge> getActiveDeployedServiceInformation(ConfigurationContext configurationContext) throws RestAPIException {
-
-        Collection<Service> services = null;
-
-        try {
-            services = serviceDeploymentManager.getServices();
-
-        } catch (ADCException e) {
-            String msg = "Unable to get deployed service information. Cause: " + e.getMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg, e);
-        }
-
-        List<Cartridge> availableMultitenantCartridges = new ArrayList<Cartridge>();
-        int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
-        //getting the services for the tenantId
-        for (Service service : services) {
-            String tenantRange = service.getTenantRange();
-            if (tenantRange.equals(TENANT_RANGE_ALL)) {
-                //check whether any active instances found for this service in the Topology
-
-                Cluster cluster = TopologyManager.getTopology().getService(service.getType()).
-                        getCluster(service.getClusterId());
-                boolean activeMemberFound = false;
-                for (Member member : cluster.getMembers()) {
-                    if (member.isActive()) {
-                        activeMemberFound = true;
-                        break;
-                    }
-                }
-                if (activeMemberFound) {
-                    availableMultitenantCartridges.add(getAvailableCartridgeInfo(null, true, configurationContext));
-                }
-            } else {
-                //TODO have to check for the serivces which has correct tenant range
-            }
-        }
-        
-//		if (availableMultitenantCartridges.isEmpty()) {
-//            String msg = "Cannot find any active deployed service for tenant [id] "+tenantId;
-//			log.error(msg);
-//			throw new RestAPIException(msg);
-//		}
-
-        return availableMultitenantCartridges;
-    }*/
 
     public static List<Cartridge> getSubscriptions(String cartridgeSearchString, String serviceGroup, ConfigurationContext configurationContext) throws RestAPIException {
         List<Cartridge> cartridges = new ArrayList<Cartridge>();
@@ -940,60 +813,7 @@ public class StratosApiV41Utils {
 
         return cartridges;
     }
-
-    /*static Cartridge getSubscription(String cartridgeAlias, ConfigurationContext configurationContext) throws RestAPIException {
-
-        Cartridge cartridge = getCartridgeFromSubscription(CartridgeSubscriptionManager.getCartridgeSubscription(ApplicationManagementUtil.
-                getTenantId(configurationContext), cartridgeAlias));
-
-        if (cartridge == null) {
-            String message = "Unregistered [alias]: " + cartridgeAlias + "! Please enter a valid alias.";
-            log.error(message);
-            throw new RestAPIException(Response.Status.NOT_FOUND, message);
-        }
-        Cluster cluster = TopologyClusterInformationModel.getInstance().getCluster(ApplicationManagementUtil.getTenantId(configurationContext),
-                cartridge.getCartridgeAlias());
-        String cartridgeStatus = "Inactive";
-        int activeMemberCount = 0;
-
-        // cluster might not be created yet, so need to check
-        if (cluster != null) {
-            Collection<Member> members = cluster.getMembers();
-            if (members != null) {
-                for (Member member : members) {
-                    if (member.isActive()) {
-                        cartridgeStatus = "Active";
-                        activeMemberCount++;
-                    }
-                }
-            }
-        }
-
-        cartridge.setActiveInstances(activeMemberCount);
-        cartridge.setStatus(cartridgeStatus);
-        return cartridge;
-
-    }*/
-
-    /*static int getActiveInstances(String cartridgeType, String cartridgeAlias, ConfigurationContext configurationContext) throws RestAPIException {
-        int noOfActiveInstances = 0;
-        Cluster cluster = TopologyClusterInformationModel.getInstance().getCluster(ApplicationManagementUtil.getTenantId(configurationContext),
-                cartridgeAlias);
-
-        if (cluster == null) {
-            String message = "No Cluster found for cartridge [type] " + cartridgeType + ", [alias] " + cartridgeAlias;
-            log.error(message);
-            throw new RestAPIException(message);
-        }
-
-        for (Member member : cluster.getMembers()) {
-            if (member.getStatus().toString().equals(MemberStatus.Activated)) {
-                noOfActiveInstances++;
-            }
-        }
-        return noOfActiveInstances;
-    }*/
-
+    
     private static Cartridge getCartridgeFromSubscription(CartridgeSubscription subscription) throws RestAPIException {
 
         if (subscription == null) {
@@ -1061,210 +881,9 @@ public class StratosApiV41Utils {
     public static CartridgeSubscription getCartridgeSubscription(String alias, ConfigurationContext configurationContext) {
         return CartridgeSubscriptionManager.getCartridgeSubscription(ApplicationManagementUtil.getTenantId(configurationContext), alias);
     }
-
-    /*static SubscriptionInfo subscribe(CartridgeInfoBean cartridgeInfoBean, ConfigurationContext configurationContext, String tenantUsername, String tenantDomain)
-            throws RestAPIException {
-
-        SubscriptionData subscriptionData = new SubscriptionData();
-        subscriptionData.setCartridgeType(cartridgeInfoBean.getCartridgeType());
-        subscriptionData.setCartridgeAlias(cartridgeInfoBean.getAlias().trim());
-        subscriptionData.setAutoscalingPolicyName(cartridgeInfoBean.getAutoscalePolicy());
-        subscriptionData.setDeploymentPolicyName(cartridgeInfoBean.getDeploymentPolicy());
-        subscriptionData.setTenantDomain(tenantDomain);
-        subscriptionData.setTenantId(ApplicationManagementUtil.getTenantId(configurationContext));
-        subscriptionData.setTenantAdminUsername(tenantUsername);
-        subscriptionData.setRepositoryType("git");
-        subscriptionData.setRepositoryURL(cartridgeInfoBean.getRepoURL());
-        subscriptionData.setRepositoryUsername(cartridgeInfoBean.getRepoUsername());
-        subscriptionData.setRepositoryPassword(cartridgeInfoBean.getRepoPassword());
-        subscriptionData.setCommitsEnabled(cartridgeInfoBean.isCommitsEnabled());
-        subscriptionData.setServiceGroup(cartridgeInfoBean.getServiceGroup());
-
-        PersistenceBean persistenceBean = cartridgeInfoBean.getPersistence();
-        if (persistenceBean != null) {
-            subscriptionData.setPersistence(PojoConverter.getPersistence(persistenceBean));
-        }
-        if (cartridgeInfoBean.getProperty() != null) {
-            subscriptionData.setProperties(PojoConverter.getProperties(cartridgeInfoBean.getProperty()));
-        }
-
-        
-//        if (cartridgeInfoBean.isPersistanceRequired()) {
-//        if (cartridgeInfoBean.getPersistence() != null) {
-//            // Add persistence related properties to PersistenceContext
-//            PersistenceContext persistenceContext = new PersistenceContext();
-//            persistenceContext.setPersistanceRequiredProperty(IS_VOLUME_REQUIRED, String.valueOf(cartridgeInfoBean.isPersistanceRequired()));
-//            persistenceContext.setSizeProperty(VOLUME_SIZE, cartridgeInfoBean.getSize());
-//            persistenceContext.setDeleteOnTerminationProperty(SHOULD_DELETE_VOLUME, String.valueOf(cartridgeInfoBean.isRemoveOnTermination()));
-//            if(cartridgeInfoBean.getVolumeId() != null) {
-//                persistenceContext.setVolumeIdProperty(VOLUME_ID, String.valueOf(cartridgeInfoBean.getVolumeId()));
-//            }
-//            subscriptionData.setPersistanceCtxt(persistenceContext);
-//        }
-        
-        //subscribe
-        SubscriptionInfo subscriptionInfo = null;
-        try {
-            subscriptionInfo = CartridgeSubscriptionManager.subscribeToCartridgeWithProperties(subscriptionData);
-        } catch (Exception e) {
-            throw new RestAPIException(e.getMessage(), e);
-        }
-
-        return subscriptionInfo;
-    }*/
-
-    /*static void unsubscribe(String alias, String tenantDomain) throws RestAPIException {
-
-        try {
-            cartridgeSubsciptionManager.unsubscribeFromCartridge(tenantDomain, alias);
-
-        } catch (ADCException e) {
-            String msg = "Failed to unsubscribe from [alias] " + alias + ". Cause: " + e.getMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg, e);
-
-        } catch (NotSubscribedException e) {
-            log.error(e.getMessage(), e);
-            throw new RestAPIException(e.getMessage(), e);
-        }
-    }*/
-    
-    /**
-     * Super tenant will deploy multitenant service.
-     * <p/>
-     * get domain , subdomain as well..
-     *
-     * @param clusterDomain
-     * @param clusterSubdomain
-     */
-    /*static void deployService(String cartridgeType, String alias, String autoscalingPolicy, String deploymentPolicy,
-                              String tenantDomain, String tenantUsername, int tenantId, String clusterDomain, String clusterSubdomain, String tenantRange, boolean isPublic) throws RestAPIException {
-        log.info("Deploying service..");
-        try {
-            serviceDeploymentManager.deployService(cartridgeType, autoscalingPolicy, deploymentPolicy, tenantId, tenantRange, tenantDomain, tenantUsername, isPublic);
-
-        } catch (Exception e) {
-            String msg = String.format("Failed to deploy the Service [Cartridge type] %s [alias] %s . Cause: %s", cartridgeType, alias, e.getMessage());
-            log.error(msg, e);
-            throw new RestAPIException(msg, e);
-        }
-    }*/
-
-    /*static void undeployService(String serviceType) throws RestAPIException, ServiceDoesNotExistException {
-
-        try {
-            serviceDeploymentManager.undeployService(serviceType);
-        } catch (ServiceDoesNotExistException ex) {
-            throw ex;
-        } catch (Exception e) {
-            String msg = "Failed to undeploy service cluster definition of type " + serviceType + " Cause: " + e.getMessage();
-            log.error(msg, e);
-            throw new RestAPIException(msg, e);
-        }
-    }*/
-    
-    /*public static void addSubscriptionDomains(ConfigurationContext configurationContext,
-            String subscriptionAlias,
-            SubscriptionDomainRequest request)
-	throws RestAPIException {
-		try {
-			int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
-			
-			for (org.apache.stratos.rest.endpoint.bean.subscription.domain.SubscriptionDomainBean subscriptionDomain : request.domains) {
-			boolean isDomainExists = isSubscriptionDomainExists(configurationContext, subscriptionAlias, subscriptionDomain.domainName);
-				if (isDomainExists) {
-					String message = "Subscription domain " + subscriptionDomain.domainName + " exists";
-					throw new RestAPIException(Status.INTERNAL_SERVER_ERROR, message);
-				}
-			}
-	
-			for (org.apache.stratos.rest.endpoint.bean.subscription.domain.SubscriptionDomainBean subscriptionDomain : request.domains) {
-		
-				CartridgeSubscriptionManager.addSubscriptionDomain(tenantId, subscriptionAlias,
-				subscriptionDomain.domainName, subscriptionDomain.applicationContext);
-			}
-		} catch (Exception e) {
-			log.error(e.getMessage(), e);
-			throw new RestAPIException(e.getMessage(), e);
-			}
-	}*/
-
-	/*public static boolean isSubscriptionDomainExists(ConfigurationContext configurationContext,
-	                   String subscriptionAlias, String domain) throws RestAPIException {
-		try {
-			int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
-			SubscriptionDomainBean subscriptionDomain = PojoConverter.populateSubscriptionDomainPojo(CartridgeSubscriptionManager.getSubscriptionDomain(tenantId,
-					subscriptionAlias, domain));
-		
-			if (subscriptionDomain.domainName != null) {
-				return true;
-			} else {
-				return false;
-			}
-		} catch (Exception e) {
-			log.error(e.getMessage(), e);
-			throw new RestAPIException(e.getMessage(), e);
-		}
-	}*/
-	
-	/*public static List<SubscriptionDomainBean> getSubscriptionDomains(ConfigurationContext configurationContext,
-	                                    String subscriptionAlias) throws RestAPIException {
-		try {
-			int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
-			return PojoConverter.populateSubscriptionDomainPojos(CartridgeSubscriptionManager.getSubscriptionDomains(tenantId, subscriptionAlias));
-		} catch (Exception e) {
-			log.error(e.getMessage(), e);
-			throw new RestAPIException(e.getMessage(), e);
-		}
-	}*/
-
-	/*public static SubscriptionDomainBean getSubscriptionDomain(ConfigurationContext configurationContext,
-	                             String subscriptionAlias, String domain) throws RestAPIException {
-		try {
-			int tenantId = ApplicationManagementUtil
-			.getTenantId(configurationContext);
-			SubscriptionDomainBean subscriptionDomain = PojoConverter.populateSubscriptionDomainPojo(CartridgeSubscriptionManager.getSubscriptionDomain(tenantId,
-			subscriptionAlias, domain));
-			
-			if (subscriptionDomain == null) {
-				String message = "Could not find a subscription for [domain] " + domain + " and [alias] " + subscriptionAlias;
-				log.error(message);
-				throw new RestAPIException(Status.NOT_FOUND, message);
-			}
-			
-			return subscriptionDomain;
-		
-		} catch (Exception e) {
-			log.error(e.getMessage(), e);
-			throw new RestAPIException(e.getMessage(), e);
-		}
-	}*/
-
-	/*public static void removeSubscriptionDomain(ConfigurationContext configurationContext,
-	              String subscriptionAlias, String domain) throws RestAPIException, DomainMappingExistsException {
-		try {
-			int tenantId = ApplicationManagementUtil.getTenantId(configurationContext);
-				CartridgeSubscriptionManager.removeSubscriptionDomain(tenantId, subscriptionAlias, domain);
-		} catch (Exception e) {
-				log.error(e.getMessage(), e);
-				throw new RestAPIException(e.getMessage(), e);
-		}
-
-	}*/
-    
+       
     // Util methods for clusters
     
-    /*public static org.apache.stratos.rest.endpoint.bean.topology.Cluster getCluster(String subscriptionAlias, ConfigurationContext configurationContext) throws RestAPIException {
-
-        Cluster cluster = TopologyClusterInformationModel.getInstance().getCluster(ApplicationManagementUtil.getTenantId(configurationContext),
-                subscriptionAlias);
-        if (cluster == null) {
-            throw new RestAPIException("No matching cluster found for [alias] " + subscriptionAlias);
-        } else {
-            return PojoConverter.populateClusterPojos(cluster, null);
-        }
-    }*/
-
     public static org.apache.stratos.rest.endpoint.bean.topology.Cluster[] getClustersForTenant(ConfigurationContext configurationContext) {
 
         Set<Cluster> clusterSet = TopologyClusterInformationModel.getInstance().getClusters(ApplicationManagementUtil.
@@ -1298,68 +917,6 @@ public class StratosApiV41Utils {
 
     }
 
-    /*public static org.apache.stratos.rest.endpoint.bean.topology.Cluster[] getClustersForCartridgeType(String cartridgeType) {
-
-        Set<Cluster> clusterSet = TopologyClusterInformationModel
-                .getInstance()
-                .getClusters(cartridgeType);
-        List<org.apache.stratos.rest.endpoint.bean.topology.Cluster> clusters = new ArrayList<org.apache.stratos.rest.endpoint.bean.topology.Cluster>();
-        for (Cluster cluster : clusterSet) {
-            clusters.add(PojoConverter.populateClusterPojos(cluster, null));
-        }
-        org.apache.stratos.rest.endpoint.bean.topology.Cluster[] arrCluster = new org.apache.stratos.rest.endpoint.bean.topology.Cluster[clusters
-                .size()];
-        arrCluster = clusters.toArray(arrCluster);
-        return arrCluster;
-
-    }*/
-
-    // return the cluster id for the lb. This is a temp fix.
-    /*private static String subscribeToLb(String cartridgeType, String loadBalancedCartridgeType, String lbAlias,
-        String defaultAutoscalingPolicy, String deploymentPolicy,
-        ConfigurationContext configurationContext, String userName, String tenantDomain, Property[] props) throws ADCException {
-
-        CartridgeSubscription cartridgeSubscription;
-
-        try {
-            if(log.isDebugEnabled()) {
-                log.debug("Subscribing to a load balancer [cartridge] "+cartridgeType+" [alias] "+lbAlias);
-            }
-
-            SubscriptionData subscriptionData = new SubscriptionData();
-            subscriptionData.setCartridgeType(cartridgeType);
-            subscriptionData.setCartridgeAlias(lbAlias.trim());
-            subscriptionData.setAutoscalingPolicyName(defaultAutoscalingPolicy);
-            subscriptionData.setDeploymentPolicyName(deploymentPolicy);
-            subscriptionData.setTenantDomain(tenantDomain);
-            subscriptionData.setTenantId(ApplicationManagementUtil.getTenantId(configurationContext));
-            subscriptionData.setTenantAdminUsername(userName);
-            subscriptionData.setRepositoryType("git");
-            //subscriptionData.setPayloadProperties(props);
-            subscriptionData.setPrivateRepository(false);
-
-            cartridgeSubscription =
-                    cartridgeSubsciptionManager.subscribeToCartridgeWithProperties(subscriptionData);
-
-            //set a payload parameter to indicate the load balanced cartridge type
-            cartridgeSubscription.getPayloadData().add("LOAD_BALANCED_SERVICE_TYPE", loadBalancedCartridgeType);
-
-            Properties lbProperties = new Properties();
-            lbProperties.setPayloadProperties(props);
-            cartridgeSubsciptionManager.registerCartridgeSubscription(cartridgeSubscription, lbProperties);
-            
-            if(log.isDebugEnabled()) {
-                log.debug("Successfully subscribed to a load balancer [cartridge] "+cartridgeType+" [alias] "+lbAlias);
-            }
-        } catch (Exception e) {
-            String msg = "Error while subscribing to load balancer cartridge [type] "+cartridgeType+". Cause: "+e.getMessage();
-            log.error(msg, e);
-            throw new ADCException(msg, e);
-        }
-
-        return cartridgeSubscription.getClusterDomain();
-    } */
-
     // Util methods for repo actions
 
     public static void getGitRepositoryNotification(Payload payload) throws RestAPIException {
@@ -1444,35 +1001,6 @@ public class StratosApiV41Utils {
 
     // Util methods for Applications
 
-    /*public static void createApplication (ApplicationDefinition appDefinition) throws RestAPIException {
-
-        try {
-            if (persistenceManager.getApplication(appDefinition.getApplicationId()) != null) {
-                String errorMsg = "Application Definition with id " + appDefinition.getApplicationId() +
-                        " already exists";
-                log.error(errorMsg);
-                throw new RestAPIException(errorMsg);
-            }
-        } catch (PersistenceManagerException e) {
-            throw new RestAPIException(e);
-        }
-
-        try {
-            persistenceManager.createApplication(appDefinition);
-        } catch (PersistenceManagerException e) {
-            throw new RestAPIException(e);
-        }
-    }*/
-
-    /*public static void deleteApplication (String appId) throws RestAPIException {
-
-        try {
-            persistenceManager.removeApplication(appId);
-        } catch (PersistenceManagerException e) {
-            throw new RestAPIException(e);
-        }
-    }*/
-
     public static void createApplicationDefinition(ApplicationDefinition appDefinition, ConfigurationContext ctxt,
                                                    String userName, String tenantDomain)
             throws RestAPIException {
@@ -1548,7 +1076,6 @@ public class StratosApiV41Utils {
         }
     }
 
-
     public static ApplicationSubscription getApplicationSubscriptions(String appId, ConfigurationContext ctxt) throws RestAPIException {
         CartridgeSubscriptionManager subscriptionMgr = new CartridgeSubscriptionManager();
         try {
@@ -1563,7 +1090,6 @@ public class StratosApiV41Utils {
 
         try {
             int tenantId = ApplicationManagementUtil.getTenantId(ctxt);
-            //CloudControllerServiceClient.getServiceClient().undeployApplicationDefinition(appId, tenantId, tenantDomain);
             AutoscalerServiceClient.getServiceClient().undeployApplication(appId, tenantId, tenantDomain);
 
         } catch (RemoteException e) {
@@ -1663,7 +1189,6 @@ public class StratosApiV41Utils {
     private static void addClustersToGroupBean(Group group, GroupBean groupBean) {
         Map<String, ClusterDataHolder> clustersDatamap = group.getClusterDataMap();
         for (Map.Entry<String, ClusterDataHolder> x : clustersDatamap.entrySet()) {
-            String alias = x.getKey();
             ClusterDataHolder clusterHolder = x.getValue();
             Cluster topLevelCluster = TopologyManager.getTopology().getService(clusterHolder.getServiceType()).getCluster(clusterHolder.getClusterId());
             groupBean.addCluster(PojoConverter.populateClusterPojos(topLevelCluster, null));