Repository: stratos
Updated Branches:
  refs/heads/4.0.0-grouping 04fa25e6e -> 8db36808b


fixing STRATOS-805 and implementing a dumb application undeploy method


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

Branch: refs/heads/4.0.0-grouping
Commit: 8db36808bd82dc08da00464e86a33d927a4e954d
Parents: 04fa25e
Author: Isuru Haththotuwa <[email protected]>
Authored: Thu Sep 18 14:06:32 2014 +0530
Committer: Isuru Haththotuwa <[email protected]>
Committed: Thu Sep 18 14:06:32 2014 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        |   6 +
 .../interfaces/CloudControllerService.java      |  10 +-
 .../controller/topology/TopologyBuilder.java    |  50 ++++++-
 .../topology/TopologyEventPublisher.java        |  10 ++
 .../client/CloudControllerServiceClient.java    |   7 +-
 .../messaging/domain/topology/Application.java  |   4 +
 .../domain/topology/DependencyOrder.java        |   3 +-
 .../messaging/domain/topology/Group.java        |   4 +
 .../domain/topology/ParentBehavior.java         |   2 +
 .../messaging/domain/topology/StartupOrder.java |   4 +-
 .../messaging/domain/topology/Topology.java     |   4 +
 .../ApplicationCreatedMessageProcessor.java     |   7 +-
 .../topology/ClusterActivatedProcessor.java     |   7 +-
 .../topology/GroupActivatedProcessor.java       |   7 +-
 .../rest/endpoint/services/ServiceUtils.java    |  47 ++----
 .../rest/endpoint/services/StratosAdmin.java    |   8 +-
 .../main/resources/CloudControllerService.wsdl  | 150 ++++++++++++-------
 17 files changed, 216 insertions(+), 114 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index 4d20c82..f9dc925 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -1432,6 +1432,12 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
         TopologyBuilder.handleApplicationDeployed(applicationDataHolder);
     }
 
+    @Override
+    public void unDeployApplicationDefinition(String applicationId) throws 
ApplicationDefinitionException {
+
+        TopologyBuilder.handleApplicationUndeployed(applicationId);
+    }
+
     private List<ConfigCompositeApplication> restoreConfigCompositeApplication 
() {
         List<ConfigCompositeApplication> apps = 
this.dataHolder.getConfigCompositeApplication();
         if (apps == null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
index ff36c83..be98bf1 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
@@ -169,11 +169,19 @@ public interface CloudControllerService {
     public ClusterContext getClusterContext (String clusterId);
 
     /**
-     * deployed an Application Definition
+     * deploys an Application Definition
      *
      * @param applicationContext {@link 
org.apache.stratos.cloud.controller.pojo.application.ApplicationContext} object
      * @throws ApplicationDefinitionException if an error is encountered
      */
     public void deployApplicationDefinition (ApplicationContext 
applicationContext) throws ApplicationDefinitionException;
 
+    /**
+     * undeploys an Application Definition
+     *
+     * @param applicationId Id of the Application to be undeployed
+     * @throws ApplicationDefinitionException if an error is encountered
+     */
+    public void unDeployApplicationDefinition (String applicationId) throws 
ApplicationDefinitionException;
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
index 2b827be..55b9d2c 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
@@ -22,10 +22,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import 
org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException;
 import org.apache.stratos.cloud.controller.exception.InvalidMemberException;
-import org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl;
 import org.apache.stratos.cloud.controller.pojo.Cartridge;
 import org.apache.stratos.cloud.controller.pojo.ClusterContext;
-import org.apache.stratos.cloud.controller.pojo.CompositeApplicationDefinition;
 import org.apache.stratos.cloud.controller.pojo.PortMapping;
 import org.apache.stratos.cloud.controller.pojo.Registrant;
 import org.apache.stratos.cloud.controller.pojo.*;
@@ -41,10 +39,8 @@ import 
org.apache.stratos.messaging.event.instance.status.InstanceStartedEvent;
 import org.apache.stratos.messaging.event.topology.MemberActivatedEvent;
 import org.apache.stratos.messaging.event.topology.MemberMaintenanceModeEvent;
 import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent;
-import org.apache.stratos.messaging.util.Util;
 import org.apache.stratos.messaging.util.Constants;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -626,10 +622,19 @@ public class TopologyBuilder {
 
             for (Cluster cluster : applicationDataHolder.getClusters()) {
                 String cartridgeType = cluster.getServiceName();
-                topology.getService(cartridgeType).addCluster(cluster);
-                log.info("Added Cluster " + cluster.toString() + " to Topology 
for Application with id: " + applicationDataHolder.getApplication().getId());
+                Service service = topology.getService(cartridgeType);
+                if (service != null) {
+                    topology.getService(cartridgeType).addCluster(cluster);
+                    log.info("Added Cluster " + cluster.toString() + " to 
Topology for Application with id: " + 
applicationDataHolder.getApplication().getId());
+                } else {
+                    log.error("Service " + cartridgeType + " not found");
+                    return;
+                }
             }
+            // add to Topology and update
+            topology.addApplication(applicationDataHolder.getApplication());
             TopologyManager.updateTopology(topology);
+            log.info("Application with id [ " + 
applicationDataHolder.getApplication().getId() + " ] added to Topology 
successfully");
 
             
TopologyEventPublisher.sendApplicationCreatedEvent(applicationDataHolder.getApplication());
 
@@ -638,6 +643,39 @@ public class TopologyBuilder {
         }
     }
 
+    public static void handleApplicationUndeployed (String applicationId) {
+
+        Topology topology = TopologyManager.getTopology();
+
+        try {
+            TopologyManager.acquireWriteLock();
+
+            if (!topology.applicationExists(applicationId)) {
+                log.warn("Application with id [ " + applicationId + " ] 
doesn't exist in Topology");
+
+            } else {
+                Application application = 
topology.getApplication(applicationId);
+                // remove clusters
+                for (Map.Entry<String,String> clusterIdMapEntry : 
application.getClusterIdMap().entrySet()) {
+                    Service service = 
topology.getService(clusterIdMapEntry.getKey());
+                    service.removeCluster(clusterIdMapEntry.getValue());
+                }
+
+                // remove application
+                topology.removeApplication(applicationId);
+
+                TopologyManager.updateTopology(topology);
+
+                log.info("Removed application [ " + applicationId + " ] from 
Topology");
+
+                
TopologyEventPublisher.sendApplicationRemovedEvent(applicationId);
+            }
+
+        } finally {
+            TopologyManager.releaseWriteLock();
+        }
+    }
+
     public static void 
handleCompositeApplicationCreated(ConfigCompositeApplication messConfigApp) {
         Topology topology = TopologyManager.getTopology();
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
index ee10f9d..a80ddd4 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
@@ -36,6 +36,7 @@ import org.apache.stratos.messaging.event.Event;
 import org.apache.stratos.messaging.event.instance.status.InstanceStartedEvent;
 import org.apache.stratos.messaging.event.topology.*;
 import org.apache.stratos.messaging.util.Constants;
+import org.apache.wml.WMLStrongElement;
 
 import java.util.List;
 import java.util.Properties;
@@ -99,6 +100,15 @@ public class TopologyEventPublisher {
         publishEvent(new ApplicationCreatedEvent(application));
     }
 
+    public static void sendApplicationRemovedEvent(String applicationId) {
+
+        if(log.isInfoEnabled()) {
+            log.info("Publishing Application removed event: " + applicationId);
+        }
+
+        publishEvent(new ApplicationRemovedEvent(applicationId));
+    }
+
     public static void sendClusterRemovedEvent(ClusterContext ctxt, String 
deploymentPolicy) {
 
         ClusterRemovedEvent clusterRemovedEvent = new 
ClusterRemovedEvent(ctxt.getCartridgeType(), ctxt.getClusterId(), 
deploymentPolicy, ctxt.isLbCluster());

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
index fb8075d..e1e29d6 100644
--- 
a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
+++ 
b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
@@ -138,7 +138,12 @@ public class CloudControllerServiceClient {
                stub.deployApplicationDefinition(applicationContext);
 
        }
-       
+
+    public void undeployApplicationDefinition (String applicationId) throws 
CloudControllerServiceApplicationDefinitionExceptionException,
+            RemoteException {
+
+        stub.unDeployApplicationDefinition(applicationId);
+    }
        
        public void unDeployCompositeApplicationDefinition(String appAlias) 
throws RemoteException, 
CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException, 
CloudControllerServiceInvalidIaasProviderExceptionException   {
                stub.unDeployCompositeApplicationDefinition(appAlias);

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Application.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Application.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Application.java
index 3902947..34e7a9d 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Application.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Application.java
@@ -128,6 +128,10 @@ public class Application implements ParentBehavior {
         return clusterIdMap.values();
     }
 
+    public Map<String, String> getClusterIdMap () {
+        return clusterIdMap;
+    }
+
     public String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/DependencyOrder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/DependencyOrder.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/DependencyOrder.java
index b5992ad..5fb694a 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/DependencyOrder.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/DependencyOrder.java
@@ -19,10 +19,11 @@
 
 package org.apache.stratos.messaging.domain.topology;
 
+import java.io.Serializable;
 import java.util.HashSet;
 import java.util.Set;
 
-public class DependencyOrder {
+public class DependencyOrder implements Serializable {
 
     private Set<StartupOrder> startupOrders;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Group.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Group.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Group.java
index 8640aca..072e55d 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Group.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Group.java
@@ -124,6 +124,10 @@ public class Group implements ParentBehavior {
         return clusterIdMap.values();
     }
 
+    public Map<String, String> getClusterIdMap () {
+        return clusterIdMap;
+    }
+
     public String getName() {
         return name;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ParentBehavior.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ParentBehavior.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ParentBehavior.java
index 99a626b..a21f8ee 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ParentBehavior.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ParentBehavior.java
@@ -46,4 +46,6 @@ public interface ParentBehavior extends Serializable {
     public String getClusterId (String serviceName);
 
     public Collection<String> getClusterIds ();
+
+    public Map<String, String> getClusterIdMap ();
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/StartupOrder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/StartupOrder.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/StartupOrder.java
index 33a0625..ba2cc2e 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/StartupOrder.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/StartupOrder.java
@@ -19,7 +19,9 @@
 
 package org.apache.stratos.messaging.domain.topology;
 
-public class StartupOrder {
+import java.io.Serializable;
+
+public class StartupOrder implements Serializable {
 
     private String start;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java
index a27dd8e..f8b535f 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java
@@ -60,6 +60,10 @@ public class Topology implements Serializable {
         return applicationMap.get(applicationId);
     }
 
+    public void removeApplication (String applicationId) {
+        applicationMap.remove(applicationId);
+    }
+
     public Collection<Application> getApplications () {
         return applicationMap.values();
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationCreatedMessageProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationCreatedMessageProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationCreatedMessageProcessor.java
index 6f86839..5525e7a 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationCreatedMessageProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationCreatedMessageProcessor.java
@@ -68,11 +68,12 @@ public class ApplicationCreatedMessageProcessor extends 
MessageProcessor {
             // check if an Application with same name exists in topology
             if 
(topology.applicationExists(appCreatedEvent.getApplication().getId())) {
                 log.warn("Application with id [ " + 
appCreatedEvent.getApplication().getId() + " ] already exists in Topology");
-                return false;
+
+            } else {
+                // add to Topology
+                topology.addApplication(appCreatedEvent.getApplication());
             }
 
-            // add to Topology
-            topology.addApplication(appCreatedEvent.getApplication());
             notifyEventListeners(appCreatedEvent);
             return true;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
index 9c8ebf5..02f1b8b 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
@@ -24,13 +24,16 @@ import 
org.apache.stratos.messaging.message.processor.MessageProcessor;
  * This processor will act upon the cluster activated event
  */
 public class ClusterActivatedProcessor extends MessageProcessor {
+
+    private MessageProcessor nextProcessor;
+
     @Override
     public void setNext(MessageProcessor nextProcessor) {
-
+        this.nextProcessor = nextProcessor;
     }
 
     @Override
     public boolean process(String type, String message, Object object) {
-        return false;
+        return nextProcessor.process(type, message, object);
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupActivatedProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupActivatedProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupActivatedProcessor.java
index c2455c4..13ea2e7 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupActivatedProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupActivatedProcessor.java
@@ -24,13 +24,16 @@ import 
org.apache.stratos.messaging.message.processor.MessageProcessor;
  * This processor will act upon the Group activation events
  */
 public class GroupActivatedProcessor extends MessageProcessor {
+
+    private MessageProcessor nextProcessor;
+
     @Override
     public void setNext(MessageProcessor nextProcessor) {
-
+        this.nextProcessor = nextProcessor;
     }
 
     @Override
     public boolean process(String type, String message, Object object) {
-        return false;
+        return nextProcessor.process(type, message, object);
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
index 887dbfd..368552f 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
@@ -282,45 +282,18 @@ public class ServiceUtils {
         }
     }
     
-    static void unDeployApplication(String configCompositeApplicationAlias, 
ConfigurationContext ctxt,
+    static void unDeployApplication(String appId, ConfigurationContext ctxt,
             String userName, String tenantDomain) throws RestAPIException {
 
-               log.info("Starting to undeploy a composite application 
definition " + configCompositeApplicationAlias);
-               
-               CloudControllerServiceClient cloudControllerServiceClient = 
getCloudControllerServiceClient();
-            
-            if (cloudControllerServiceClient != null) {
-               try {
-                       if (log.isDebugEnabled()) {
-                               log.debug("trying to undeploy composite 
application definition " + configCompositeApplicationAlias);
-                       }
-                                       
cloudControllerServiceClient.unDeployCompositeApplicationDefinition(configCompositeApplicationAlias);
-                               } catch (RemoteException e) {
-                                       // TODO Auto-generated catch block
-                                       e.printStackTrace();
-                                       String message = "Remote 
ExceptionException";
-                               log.error(message, e);
-                               throw new RestAPIException(message, e);
-                               } catch 
(CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException 
e) {
-                                       // TODO Auto-generated catch block
-                                       e.printStackTrace();
-                                       String message = 
"CloudControllerServiceInvalidCompositeApplicationDefinitionExceptionException";
-                               log.error(message, e);
-                               throw new RestAPIException(message, e);
-                               } catch 
(CloudControllerServiceInvalidIaasProviderExceptionException e) {
-                                       // TODO Auto-generated catch block
-                                       e.printStackTrace();
-                                       String message = 
"CloudControllerServiceInvalidIaasProviderExceptionException";
-                               log.error(message, e);
-                               throw new RestAPIException(message, e);
-                               }
-            } else {
-               if (log.isDebugEnabled()) {
-                       log.debug("cloud controller client is null while trying 
to undeploy composite application definition");
-               }
-            }
-               
-               log.info(String.format("[type] %s", 
configCompositeApplicationAlias));
+        try {
+            
CloudControllerServiceClient.getServiceClient().undeployApplicationDefinition(appId);
+
+        } catch (CloudControllerServiceApplicationDefinitionExceptionException 
e) {
+            throw new RestAPIException(e);
+        } catch (RemoteException e) {
+            throw new RestAPIException(e);
+        }
+
     }
 
     @SuppressWarnings("unused")

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
index e9ed346..1972a1b 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/StratosAdmin.java
@@ -168,17 +168,17 @@ public class StratosAdmin extends AbstractAdmin {
     }  */
 
     
-    @POST
-    @Path("/application/definition/undeploy")
+    @DELETE
+    @Path("/application/definition/{applicationId}")
     @Produces("application/json")
     @Consumes("application/json")
     @AuthorizationAction("/permission/protected/manage/monitor/tenants")
     @SuperTenantService(true)
     // Grouping
-    public Response unDeployApplicationDefinition(String alias)
+    public Response unDeployApplicationDefinition(@PathParam("applicationId") 
String applicationId)
             throws RestAPIException {
 
-        ServiceUtils.unDeployApplication(alias, getConfigContext(), 
getUsername(),
+        ServiceUtils.unDeployApplication(applicationId, getConfigContext(), 
getUsername(),
                 getTenantDomain());
         return Response.noContent().build();
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8db36808/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
----------------------------------------------------------------------
diff --git 
a/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
 
b/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
index f723677..d685bda 100644
--- 
a/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
+++ 
b/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
@@ -91,27 +91,27 @@
                     <xs:element minOccurs="0" name="message" nillable="true" 
type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
-            <xs:complexType name="InvalidMemberException">
+            <xs:complexType name="ApplicationDefinitionException">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="message" nillable="true" 
type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
-            <xs:complexType name="InvalidClusterException">
+            <xs:complexType name="InvalidMemberException">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="message" nillable="true" 
type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
-            <xs:complexType name="UnregisteredCartridgeException">
+            <xs:complexType name="InvalidClusterException">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="message" nillable="true" 
type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
-            <xs:complexType name="InvalidCartridgeDefinitionException">
+            <xs:complexType name="UnregisteredCartridgeException">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="message" nillable="true" 
type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
-            <xs:complexType name="ApplicationDefinitionException">
+            <xs:complexType name="InvalidCartridgeDefinitionException">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="message" nillable="true" 
type="xs:string"></xs:element>
                 </xs:sequence>
@@ -221,6 +221,20 @@
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
+            <xs:element 
name="CloudControllerServiceApplicationDefinitionException">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" 
name="ApplicationDefinitionException" nillable="true" 
type="ax219:ApplicationDefinitionException"></xs:element>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+            <xs:element name="unDeployApplicationDefinition">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" name="applicationId" 
nillable="true" type="xs:string"></xs:element>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
             <xs:element name="CloudControllerServiceInvalidMemberException">
                 <xs:complexType>
                     <xs:sequence>
@@ -408,13 +422,6 @@
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
-            <xs:element 
name="CloudControllerServiceApplicationDefinitionException">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element minOccurs="0" 
name="ApplicationDefinitionException" nillable="true" 
type="ax219:ApplicationDefinitionException"></xs:element>
-                    </xs:sequence>
-                </xs:complexType>
-            </xs:element>
             <xs:element name="deployApplicationDefinition">
                 <xs:complexType>
                     <xs:sequence>
@@ -692,6 +699,12 @@
     <wsdl:message name="CloudControllerServiceUnregisteredCartridgeException">
         <wsdl:part name="parameters" 
element="ns:CloudControllerServiceUnregisteredCartridgeException"></wsdl:part>
     </wsdl:message>
+    <wsdl:message name="unDeployApplicationDefinitionRequest">
+        <wsdl:part name="parameters" 
element="ns:unDeployApplicationDefinition"></wsdl:part>
+    </wsdl:message>
+    <wsdl:message name="CloudControllerServiceApplicationDefinitionException">
+        <wsdl:part name="parameters" 
element="ns:CloudControllerServiceApplicationDefinitionException"></wsdl:part>
+    </wsdl:message>
     <wsdl:message name="getServiceGroupDependenciesRequest">
         <wsdl:part name="parameters" 
element="ns:getServiceGroupDependencies"></wsdl:part>
     </wsdl:message>
@@ -731,9 +744,6 @@
     <wsdl:message name="deployApplicationDefinitionRequest">
         <wsdl:part name="parameters" 
element="ns:deployApplicationDefinition"></wsdl:part>
     </wsdl:message>
-    <wsdl:message name="CloudControllerServiceApplicationDefinitionException">
-        <wsdl:part name="parameters" 
element="ns:CloudControllerServiceApplicationDefinitionException"></wsdl:part>
-    </wsdl:message>
     <wsdl:message name="unregisterServiceRequest">
         <wsdl:part name="parameters" 
element="ns:unregisterService"></wsdl:part>
     </wsdl:message>
@@ -806,6 +816,10 @@
             <wsdl:output message="ns:registerServiceResponse" 
wsaw:Action="urn:registerServiceResponse"></wsdl:output>
             <wsdl:fault 
message="ns:CloudControllerServiceUnregisteredCartridgeException" 
name="CloudControllerServiceUnregisteredCartridgeException" 
wsaw:Action="urn:registerServiceCloudControllerServiceUnregisteredCartridgeException"></wsdl:fault>
         </wsdl:operation>
+        <wsdl:operation name="unDeployApplicationDefinition">
+            <wsdl:input message="ns:unDeployApplicationDefinitionRequest" 
wsaw:Action="urn:unDeployApplicationDefinition"></wsdl:input>
+            <wsdl:fault 
message="ns:CloudControllerServiceApplicationDefinitionException" 
name="CloudControllerServiceApplicationDefinitionException" 
wsaw:Action="urn:unDeployApplicationDefinitionCloudControllerServiceApplicationDefinitionException"></wsdl:fault>
+        </wsdl:operation>
         <wsdl:operation name="getServiceGroupDependencies">
             <wsdl:input message="ns:getServiceGroupDependenciesRequest" 
wsaw:Action="urn:getServiceGroupDependencies"></wsdl:input>
             <wsdl:output message="ns:getServiceGroupDependenciesResponse" 
wsaw:Action="urn:getServiceGroupDependenciesResponse"></wsdl:output>
@@ -945,16 +959,13 @@
                 <soap:fault use="literal" 
name="CloudControllerServiceUnregisteredCartridgeException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
-        <wsdl:operation name="getServiceGroup">
-            <soap:operation soapAction="urn:getServiceGroup" 
style="document"></soap:operation>
+        <wsdl:operation name="unDeployApplicationDefinition">
+            <soap:operation soapAction="urn:unDeployApplicationDefinition" 
style="document"></soap:operation>
             <wsdl:input>
                 <soap:body use="literal"></soap:body>
             </wsdl:input>
-            <wsdl:output>
-                <soap:body use="literal"></soap:body>
-            </wsdl:output>
-            <wsdl:fault 
name="CloudControllerServiceInvalidServiceGroupException">
-                <soap:fault use="literal" 
name="CloudControllerServiceInvalidServiceGroupException"></soap:fault>
+            <wsdl:fault 
name="CloudControllerServiceApplicationDefinitionException">
+                <soap:fault use="literal" 
name="CloudControllerServiceApplicationDefinitionException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="getServiceGroupDependencies">
@@ -969,20 +980,20 @@
                 <soap:fault use="literal" 
name="CloudControllerServiceInvalidServiceGroupException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
-        <wsdl:operation name="deployCartridgeDefinition">
-            <soap:operation soapAction="urn:deployCartridgeDefinition" 
style="document"></soap:operation>
+        <wsdl:operation name="getServiceGroupSubGroups">
+            <soap:operation soapAction="urn:getServiceGroupSubGroups" 
style="document"></soap:operation>
             <wsdl:input>
                 <soap:body use="literal"></soap:body>
             </wsdl:input>
-            <wsdl:fault 
name="CloudControllerServiceInvalidCartridgeDefinitionException">
-                <soap:fault use="literal" 
name="CloudControllerServiceInvalidCartridgeDefinitionException"></soap:fault>
-            </wsdl:fault>
-            <wsdl:fault 
name="CloudControllerServiceInvalidIaasProviderException">
-                <soap:fault use="literal" 
name="CloudControllerServiceInvalidIaasProviderException"></soap:fault>
+            <wsdl:output>
+                <soap:body use="literal"></soap:body>
+            </wsdl:output>
+            <wsdl:fault 
name="CloudControllerServiceInvalidServiceGroupException">
+                <soap:fault use="literal" 
name="CloudControllerServiceInvalidServiceGroupException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
-        <wsdl:operation name="getServiceGroupSubGroups">
-            <soap:operation soapAction="urn:getServiceGroupSubGroups" 
style="document"></soap:operation>
+        <wsdl:operation name="getServiceGroup">
+            <soap:operation soapAction="urn:getServiceGroup" 
style="document"></soap:operation>
             <wsdl:input>
                 <soap:body use="literal"></soap:body>
             </wsdl:input>
@@ -993,6 +1004,18 @@
                 <soap:fault use="literal" 
name="CloudControllerServiceInvalidServiceGroupException"></soap:fault>
             </wsdl:fault>
         </wsdl:operation>
+        <wsdl:operation name="deployCartridgeDefinition">
+            <soap:operation soapAction="urn:deployCartridgeDefinition" 
style="document"></soap:operation>
+            <wsdl:input>
+                <soap:body use="literal"></soap:body>
+            </wsdl:input>
+            <wsdl:fault 
name="CloudControllerServiceInvalidCartridgeDefinitionException">
+                <soap:fault use="literal" 
name="CloudControllerServiceInvalidCartridgeDefinitionException"></soap:fault>
+            </wsdl:fault>
+            <wsdl:fault 
name="CloudControllerServiceInvalidIaasProviderException">
+                <soap:fault use="literal" 
name="CloudControllerServiceInvalidIaasProviderException"></soap:fault>
+            </wsdl:fault>
+        </wsdl:operation>
         <wsdl:operation name="undeployServiceGroup">
             <soap:operation soapAction="urn:undeployServiceGroup" 
style="document"></soap:operation>
             <wsdl:input>
@@ -1182,16 +1205,13 @@
                 <soap12:fault use="literal" 
name="CloudControllerServiceUnregisteredCartridgeException"></soap12:fault>
             </wsdl:fault>
         </wsdl:operation>
-        <wsdl:operation name="getServiceGroup">
-            <soap12:operation soapAction="urn:getServiceGroup" 
style="document"></soap12:operation>
+        <wsdl:operation name="unDeployApplicationDefinition">
+            <soap12:operation soapAction="urn:unDeployApplicationDefinition" 
style="document"></soap12:operation>
             <wsdl:input>
                 <soap12:body use="literal"></soap12:body>
             </wsdl:input>
-            <wsdl:output>
-                <soap12:body use="literal"></soap12:body>
-            </wsdl:output>
-            <wsdl:fault 
name="CloudControllerServiceInvalidServiceGroupException">
-                <soap12:fault use="literal" 
name="CloudControllerServiceInvalidServiceGroupException"></soap12:fault>
+            <wsdl:fault 
name="CloudControllerServiceApplicationDefinitionException">
+                <soap12:fault use="literal" 
name="CloudControllerServiceApplicationDefinitionException"></soap12:fault>
             </wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="getServiceGroupDependencies">
@@ -1206,20 +1226,20 @@
                 <soap12:fault use="literal" 
name="CloudControllerServiceInvalidServiceGroupException"></soap12:fault>
             </wsdl:fault>
         </wsdl:operation>
-        <wsdl:operation name="deployCartridgeDefinition">
-            <soap12:operation soapAction="urn:deployCartridgeDefinition" 
style="document"></soap12:operation>
+        <wsdl:operation name="getServiceGroupSubGroups">
+            <soap12:operation soapAction="urn:getServiceGroupSubGroups" 
style="document"></soap12:operation>
             <wsdl:input>
                 <soap12:body use="literal"></soap12:body>
             </wsdl:input>
-            <wsdl:fault 
name="CloudControllerServiceInvalidCartridgeDefinitionException">
-                <soap12:fault use="literal" 
name="CloudControllerServiceInvalidCartridgeDefinitionException"></soap12:fault>
-            </wsdl:fault>
-            <wsdl:fault 
name="CloudControllerServiceInvalidIaasProviderException">
-                <soap12:fault use="literal" 
name="CloudControllerServiceInvalidIaasProviderException"></soap12:fault>
+            <wsdl:output>
+                <soap12:body use="literal"></soap12:body>
+            </wsdl:output>
+            <wsdl:fault 
name="CloudControllerServiceInvalidServiceGroupException">
+                <soap12:fault use="literal" 
name="CloudControllerServiceInvalidServiceGroupException"></soap12:fault>
             </wsdl:fault>
         </wsdl:operation>
-        <wsdl:operation name="getServiceGroupSubGroups">
-            <soap12:operation soapAction="urn:getServiceGroupSubGroups" 
style="document"></soap12:operation>
+        <wsdl:operation name="getServiceGroup">
+            <soap12:operation soapAction="urn:getServiceGroup" 
style="document"></soap12:operation>
             <wsdl:input>
                 <soap12:body use="literal"></soap12:body>
             </wsdl:input>
@@ -1230,6 +1250,18 @@
                 <soap12:fault use="literal" 
name="CloudControllerServiceInvalidServiceGroupException"></soap12:fault>
             </wsdl:fault>
         </wsdl:operation>
+        <wsdl:operation name="deployCartridgeDefinition">
+            <soap12:operation soapAction="urn:deployCartridgeDefinition" 
style="document"></soap12:operation>
+            <wsdl:input>
+                <soap12:body use="literal"></soap12:body>
+            </wsdl:input>
+            <wsdl:fault 
name="CloudControllerServiceInvalidCartridgeDefinitionException">
+                <soap12:fault use="literal" 
name="CloudControllerServiceInvalidCartridgeDefinitionException"></soap12:fault>
+            </wsdl:fault>
+            <wsdl:fault 
name="CloudControllerServiceInvalidIaasProviderException">
+                <soap12:fault use="literal" 
name="CloudControllerServiceInvalidIaasProviderException"></soap12:fault>
+            </wsdl:fault>
+        </wsdl:operation>
         <wsdl:operation name="undeployServiceGroup">
             <soap12:operation soapAction="urn:undeployServiceGroup" 
style="document"></soap12:operation>
             <wsdl:input>
@@ -1398,14 +1430,11 @@
                 <mime:content type="text/xml" part="parameters"></mime:content>
             </wsdl:output>
         </wsdl:operation>
-        <wsdl:operation name="getServiceGroup">
-            <http:operation location="getServiceGroup"></http:operation>
+        <wsdl:operation name="unDeployApplicationDefinition">
+            <http:operation 
location="unDeployApplicationDefinition"></http:operation>
             <wsdl:input>
                 <mime:content type="text/xml" part="parameters"></mime:content>
             </wsdl:input>
-            <wsdl:output>
-                <mime:content type="text/xml" part="parameters"></mime:content>
-            </wsdl:output>
         </wsdl:operation>
         <wsdl:operation name="getServiceGroupDependencies">
             <http:operation 
location="getServiceGroupDependencies"></http:operation>
@@ -1416,14 +1445,17 @@
                 <mime:content type="text/xml" part="parameters"></mime:content>
             </wsdl:output>
         </wsdl:operation>
-        <wsdl:operation name="deployCartridgeDefinition">
-            <http:operation 
location="deployCartridgeDefinition"></http:operation>
+        <wsdl:operation name="getServiceGroupSubGroups">
+            <http:operation 
location="getServiceGroupSubGroups"></http:operation>
             <wsdl:input>
                 <mime:content type="text/xml" part="parameters"></mime:content>
             </wsdl:input>
+            <wsdl:output>
+                <mime:content type="text/xml" part="parameters"></mime:content>
+            </wsdl:output>
         </wsdl:operation>
-        <wsdl:operation name="getServiceGroupSubGroups">
-            <http:operation 
location="getServiceGroupSubGroups"></http:operation>
+        <wsdl:operation name="getServiceGroup">
+            <http:operation location="getServiceGroup"></http:operation>
             <wsdl:input>
                 <mime:content type="text/xml" part="parameters"></mime:content>
             </wsdl:input>
@@ -1431,6 +1463,12 @@
                 <mime:content type="text/xml" part="parameters"></mime:content>
             </wsdl:output>
         </wsdl:operation>
+        <wsdl:operation name="deployCartridgeDefinition">
+            <http:operation 
location="deployCartridgeDefinition"></http:operation>
+            <wsdl:input>
+                <mime:content type="text/xml" part="parameters"></mime:content>
+            </wsdl:input>
+        </wsdl:operation>
         <wsdl:operation name="undeployServiceGroup">
             <http:operation location="undeployServiceGroup"></http:operation>
             <wsdl:input>

Reply via email to