Repository: stratos
Updated Branches:
  refs/heads/4.0.0-grouping 718445a8a -> 077fb4073


refactoring the Application Topolopgy model - added Map [alias -> 
ClusterDataHolder]


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

Branch: refs/heads/4.0.0-grouping
Commit: 077fb4073ab285fe6fb82606add6998d17f977f5
Parents: 718445a
Author: Isuru Haththotuwa <[email protected]>
Authored: Wed Sep 24 13:11:02 2014 +0530
Committer: Isuru Haththotuwa <[email protected]>
Committed: Wed Sep 24 13:11:02 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/grouping/DependencyBuilder.java  | 11 ++--
 .../stratos/autoscaler/monitor/Monitor.java     | 20 +++----
 .../status/checker/StatusChecker.java           | 27 +++++----
 .../application/ApplicationUtils.java           |  7 ++-
 .../parser/DefaultApplicationParser.java        | 55 +++++++++---------
 .../controller/pojo/ApplicationDataHolder.java  | 59 -------------------
 .../controller/pojo/ClusterDataHolder.java      | 61 --------------------
 .../controller/pojo/payload/MetaDataHolder.java |  5 ++
 .../controller/topology/TopologyBuilder.java    |  9 ++-
 .../messaging/domain/topology/Application.java  | 34 +++++------
 .../domain/topology/ClusterDataHolder.java      | 44 ++++++++++++++
 .../messaging/domain/topology/Group.java        | 22 +++----
 .../domain/topology/ParentBehavior.java         | 10 +---
 .../event/topology/ApplicationCreatedEvent.java |  2 +-
 14 files changed, 144 insertions(+), 222 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/DependencyBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/DependencyBuilder.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/DependencyBuilder.java
index a021ce3..4bd47a1 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/DependencyBuilder.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/DependencyBuilder.java
@@ -20,6 +20,7 @@ package org.apache.stratos.autoscaler.grouping;
 
 import org.apache.stratos.messaging.domain.topology.*;
 
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Queue;
 import java.util.Set;
@@ -65,11 +66,11 @@ public class DependencyBuilder {
             }
         }
 
-        for(Set<String> clusterIds: 
component.getServiceNameToClusterIdsMap().values()) {
-            for (String clusterId : clusterIds) {
-                if(!startup.contains(clusterId)) {
-                    startup.add(clusterId);
-                }
+        Collection<ClusterDataHolder> clusterDataHolders = 
component.getClusterDataMap().values();
+
+        for(ClusterDataHolder clusterDataHolder : clusterDataHolders) {
+                if(!startup.contains(clusterDataHolder.getClusterId())) {
+                    startup.add(clusterDataHolder.getClusterId());
             }
         }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
index 6b299ef..198074f 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
@@ -123,17 +123,15 @@ public abstract class Monitor extends Observable 
implements Observer {
                 startGroupMonitor(this, dependency, component);
             } else if (dependency.contains("cartridge")) {
 
-                Set<String> clusterIds = component.getClusterIds(dependency);
-                for (String clusterId : clusterIds) {
-                    Cluster cluster = null;
-                    TopologyManager.acquireReadLock();
-                    cluster = 
TopologyManager.getTopology().getService(dependency).getCluster(clusterId);
-                    TopologyManager.releaseReadLock();
-                    if (cluster != null) {
-                        startClusterMonitor(cluster);
-                    } else {
-                        //TODO throw exception since Topology is inconsistent
-                    }
+                String clusterId = 
component.getClusterData(dependency).getClusterId();
+                Cluster cluster = null;
+                TopologyManager.acquireReadLock();
+                cluster = 
TopologyManager.getTopology().getService(dependency).getCluster(clusterId);
+                TopologyManager.releaseReadLock();
+                if (cluster != null) {
+                    startClusterMonitor(cluster);
+                } else {
+                    //TODO throw exception since Topology is inconsistent
                 }
             }
         } else {

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
index e410259..0f7d023 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
@@ -106,7 +106,7 @@ public class StatusChecker {
         Runnable exGroup = new Runnable() {
             public void run() {
                 Application application = 
TopologyManager.getTopology().getApplication(appId);
-                Map<String, Set<String>> clusterIds = 
application.getClusterMap();
+                Map<String, ClusterDataHolder> clusterIds = 
application.getClusterDataMap();
                 Map<String, Group> groups = application.getAliasToGroupMap();
                 updateChildStatus(clusterId, groups, clusterIds, application);
             }
@@ -155,23 +155,23 @@ public class StatusChecker {
     }
 
 
-    private boolean updateChildStatus(String id, Map<String, Group> groups, 
Map<String, Set<String>> clusterIds, ParentBehavior parent) {
+    private boolean updateChildStatus(String id, Map<String, Group> groups, 
Map<String, ClusterDataHolder> clusterData, ParentBehavior parent) {
         boolean groupActive = false;
         boolean clustersActive = false;
         boolean groupsActive = false;
         boolean childFound = false;
 
-        if(clusterIds.containsValue(id) || groups.containsKey(id)) {
+        if(clusterData.containsValue(id) || groups.containsKey(id)) {
             childFound = true;
-            if(!clusterIds.isEmpty() && !groups.isEmpty()) {
-                clustersActive = getClusterStatus(clusterIds);
+            if(!clusterData.isEmpty() && !groups.isEmpty()) {
+                clustersActive = getClusterStatus(clusterData);
                 groupsActive = getGroupStatus(groups);
                 groupActive = clustersActive && groupsActive;
             } else if (!groups.isEmpty()){
                 groupsActive = getGroupStatus(groups);
                 groupActive = groupsActive;
-            } else if (!clusterIds.isEmpty()){
-                clustersActive = getClusterStatus(clusterIds);
+            } else if (!clusterData.isEmpty()){
+                clustersActive = getClusterStatus(clusterData);
                 groupActive = clustersActive;
             } else {
                 //TODO warn log
@@ -186,7 +186,7 @@ public class StatusChecker {
         } else {
             if(!groups.isEmpty()) {
                 for(Group group: groups.values()) {
-                    return updateChildStatus(id, group.getAliasToGroupMap(), 
group.getClusterMap(), group);
+                    return updateChildStatus(id, group.getAliasToGroupMap(), 
group.getClusterDataMap(), group);
 
                 }
             }
@@ -207,17 +207,16 @@ public class StatusChecker {
 
     }
 
-    private boolean getClusterStatus(Map<String, Set<String>> clusterIds) {
+    private boolean getClusterStatus(Map<String, ClusterDataHolder> 
clusterData) {
         boolean clusterActiveStatus = false;
-        for(Map.Entry<String, Set<String>> clusterIdsEntry: 
clusterIds.entrySet()) {
-            Service service = 
TopologyManager.getTopology().getService(clusterIdsEntry.getKey());
-            for (String clusterId : clusterIdsEntry.getValue()) {
-                
if(service.getCluster(clusterId).getStatus().equals(ClusterStatus.Active)) {
+        for(Map.Entry<String, ClusterDataHolder> clusterDataHolderEntry: 
clusterData.entrySet()) {
+            Service service = 
TopologyManager.getTopology().getService(clusterDataHolderEntry.getValue().getServiceType());
+                
if(service.getCluster(clusterDataHolderEntry.getValue().getClusterId()).
+                        getStatus().equals(ClusterStatus.Active)) {
                     clusterActiveStatus = true;
                 } else {
                     clusterActiveStatus = false;
                 }
-            }
         }
         return clusterActiveStatus;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/ApplicationUtils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/ApplicationUtils.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/ApplicationUtils.java
index ce9b112..8559e00 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/ApplicationUtils.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/ApplicationUtils.java
@@ -74,7 +74,12 @@ public class ApplicationUtils {
                                                                 
SubscribableInfoContext subscribableInfoCtxt,
                                                                 Cartridge 
cartridge) {
 
-        MetaDataHolder metaDataHolder = new MetaDataHolder(appId, 
subscribableCtxt.getType(), clusterId);
+        MetaDataHolder metaDataHolder;
+        if (groupName != null) {
+            metaDataHolder = new MetaDataHolder(appId, groupName, clusterId);
+        } else {
+            metaDataHolder = new MetaDataHolder(appId);
+        }
 
         Properties clusterLevelPayloadProperties = new Properties();
         // app id

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/DefaultApplicationParser.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/DefaultApplicationParser.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/DefaultApplicationParser.java
index 341f42a..2dcf955 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/DefaultApplicationParser.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/parser/DefaultApplicationParser.java
@@ -210,15 +210,15 @@ public class DefaultApplicationParser implements 
ApplicationParser {
         // following keeps track of all Clusters created for this application
         //Set<Cluster> clusters = new HashSet<Cluster>();
         //ClusterDataHolder clusterDataHolder = null;
-        Map<String, Set<String>> serviceNameToClusterIds;
+        Map<String, ClusterDataHolder> clusterDataMap;
 
         if (appCtxt.getComponents() != null) {
             // get top level Subscribables
             if (appCtxt.getComponents().getSubscribableContexts() != null) {
-                serviceNameToClusterIds = 
parseLeafLevelSubscriptions(appCtxt.getApplicationId(), appCtxt.getTenantId(),
+                clusterDataMap = 
parseLeafLevelSubscriptions(appCtxt.getApplicationId(), appCtxt.getTenantId(),
                         application.getKey(), null, 
Arrays.asList(appCtxt.getComponents().getSubscribableContexts()),
                         subscribableInfoCtxts);
-                application.setClusterIds(serviceNameToClusterIds);
+                application.setClusterData(clusterDataMap);
                 
//clusters.addAll(clusterDataHolder.getApplicationClusterContexts());
             }
 
@@ -336,14 +336,13 @@ public class DefaultApplicationParser implements 
ApplicationParser {
         dependencyOrder.setKillbehavior(getKillbehaviour(groupCtxt.getName()));
         group.setDependencyOrder(dependencyOrder);
 
-        //ClusterDataHolder clusterDataHolderOfGroup;
-        Map<String, Set<String>> serviceNameToClusterIds;
+        Map<String, ClusterDataHolder> clusterDataMap;
 
         // get group level Subscribables
         if (groupCtxt.getSubscribableContexts() != null) {
-            serviceNameToClusterIds = parseLeafLevelSubscriptions(appId, 
tenantId, key, groupCtxt.getName(),
+            clusterDataMap = parseLeafLevelSubscriptions(appId, tenantId, key, 
groupCtxt.getName(),
                     Arrays.asList(groupCtxt.getSubscribableContexts()), 
subscribableInfoCtxts);
-            group.setClusterIds(serviceNameToClusterIds);
+            group.setClusterData(clusterDataMap);
             
//clusters.addAll(clusterDataHolderOfGroup.getApplicationClusterContexts());
 //            if (clusterDataHolder == null) {
 //                clusterDataHolder = clusterDataHolderOfGroup;
@@ -456,12 +455,12 @@ public class DefaultApplicationParser implements 
ApplicationParser {
 //        return subscribableContexts;
 //    }
 
-    private Map<String, Set<String>> parseLeafLevelSubscriptions (String 
appId, int tenantId, String key, String groupName,
+    private Map<String, ClusterDataHolder> parseLeafLevelSubscriptions (String 
appId, int tenantId, String key, String groupName,
                                                                  
List<SubscribableContext> subscribableCtxts,
                                                                  Map<String, 
SubscribableInfoContext> subscribableInfoCtxts)
             throws ApplicationDefinitionException {
 
-        Map<String, Set<String>> clusterIdMap = new HashMap<String, 
Set<String>>();
+        Map<String, ClusterDataHolder> clusterDataMap = new HashMap<String, 
ClusterDataHolder>();
 //        Set<Cluster> clusters = new HashSet<Cluster>();
         //Set<PayloadDataHolder> payloadDataHolders = new 
HashSet<PayloadDataHolder>();
 
@@ -508,12 +507,16 @@ public class DefaultApplicationParser implements 
ApplicationParser {
             // create cluster level meta data
             
this.metaDataHolders.add(ApplicationUtils.getClusterLevelPayloadData(appId, 
groupName, tenantId, key,
                     hostname, appClusterCtxt.getTenantRange(), clusterId, 
subscribableCtxt, subscribableInfoCtxt, cartridge));
+
+            // add relevant information to the map
+            clusterDataMap.put(subscribableCtxt.getAlias(), new 
ClusterDataHolder(subscribableCtxt.getType(), clusterId));
+
             ////////////
             //Cluster cluster = getCluster(subscribableCtxt, 
subscribableInfoCtxt, cartridge);
-            addClusterId(clusterIdMap, subscribableCtxt.getType(), clusterId);
-            //clusterIdMap.put(subscribableCtxt.getType(), 
cluster.getClusterId());
+            //addClusterId(clusterDataMap, subscribableCtxt.getType(), 
clusterId);
+            //clusterDataMap.put(subscribableCtxt.getType(), 
cluster.getClusterId());
             //clusters.add(cluster);
-//            if (clusterIdMap.put(subscribableCtxt.getType(), 
cluster.getClusterId()) != null) {
+//            if (clusterDataMap.put(subscribableCtxt.getType(), 
cluster.getClusterId()) != null) {
 //                // Application Definition has same cartridge multiple times 
at the top-level
 //                handleError("Cartridge [ " + subscribableCtxt.getType() + " 
] appears twice in the Application Definition's top level");
 //            }
@@ -523,8 +526,8 @@ public class DefaultApplicationParser implements 
ApplicationParser {
 //                    cluster.getHostNames().get(0));
         }
 
-        return clusterIdMap;
-        //return new ClusterDataHolder(clusterIdMap, clusters);
+        return clusterDataMap;
+        //return new ClusterDataHolder(clusterDataMap, clusters);
         //clusterDataHolder.setPayloadDataHolders(payloadDataHolders);
     }
 
@@ -539,18 +542,18 @@ public class DefaultApplicationParser implements 
ApplicationParser {
         return new ApplicationClusterContext(serviceType, clusterId, hostname, 
textPayload, deploymentPolicy, isLB);
     }
 
-    public void addClusterId (Map<String, Set<String>> 
serviceNameToClusterIdsMap, String serviceName, String clusterId) {
-
-        if (serviceNameToClusterIdsMap.get(serviceName) == null) {
-            // not found, create
-            Set<String> clusterIds = new HashSet<String>();
-            clusterIds.add(clusterId);
-            serviceNameToClusterIdsMap.put(serviceName, clusterIds);
-        } else {
-            // the cluster id set already exists, update
-            serviceNameToClusterIdsMap.get(serviceName).add(clusterId);
-        }
-    }
+//    public void addClusterId (Map<String, Set<String>> 
serviceNameToClusterIdsMap, String serviceName, String clusterId) {
+//
+//        if (serviceNameToClusterIdsMap.get(serviceName) == null) {
+//            // not found, create
+//            Set<String> clusterIds = new HashSet<String>();
+//            clusterIds.add(clusterId);
+//            serviceNameToClusterIdsMap.put(serviceName, clusterIds);
+//        } else {
+//            // the cluster id set already exists, update
+//            serviceNameToClusterIdsMap.get(serviceName).add(clusterId);
+//        }
+//    }
 
 //    private void createClusterContext (String appId, String groupName, 
String serviceType, String clusterId,
 //                                              String hostName) throws 
ApplicationDefinitionException {

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ApplicationDataHolder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ApplicationDataHolder.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ApplicationDataHolder.java
deleted file mode 100644
index 601f625..0000000
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ApplicationDataHolder.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.cloud.controller.pojo;
-
-import org.apache.stratos.cloud.controller.pojo.payload.MetaDataHolder;
-import org.apache.stratos.messaging.domain.topology.Application;
-import org.apache.stratos.messaging.domain.topology.Cluster;
-
-import java.util.Set;
-
-public class ApplicationDataHolder {
-
-    private Application application;
-
-    private Set<Cluster> clusters;
-
-    private Set<MetaDataHolder> metaDataHolders;
-
-    public Application getApplication() {
-        return application;
-    }
-
-    public void setApplication(Application application) {
-        this.application = application;
-    }
-
-    public Set<Cluster> getClusters() {
-        return clusters;
-    }
-
-    public void setClusters(Set<Cluster> clusters) {
-        this.clusters = clusters;
-    }
-
-    public Set<MetaDataHolder> getMetaDataHolders() {
-        return metaDataHolders;
-    }
-
-    public void setMetaDataHolders(Set<MetaDataHolder> metaDataHolders) {
-        this.metaDataHolders = metaDataHolders;
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterDataHolder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterDataHolder.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterDataHolder.java
deleted file mode 100644
index 874d18e..0000000
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterDataHolder.java
+++ /dev/null
@@ -1,61 +0,0 @@
-///*
-// * Licensed to the Apache Software Foundation (ASF) under one
-// * or more contributor license agreements.  See the NOTICE file
-// * distributed with this work for additional information
-// * regarding copyright ownership.  The ASF licenses this file
-// * to you under the Apache License, Version 2.0 (the
-// * "License"); you may not use this file except in compliance
-// * with the License.  You may obtain a copy of the License at
-// *
-// *  http://www.apache.org/licenses/LICENSE-2.0
-// *
-// * Unless required by applicable law or agreed to in writing,
-// * software distributed under the License is distributed on an
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// * KIND, either express or implied.  See the License for the
-// * specific language governing permissions and limitations
-// * under the License.
-// */
-//
-//package org.apache.stratos.cloud.controller.pojo;
-//
-//import org.apache.stratos.cloud.controller.pojo.payload.PayloadDataHolder;
-//import org.apache.stratos.messaging.domain.topology.Cluster;
-//import org.apache.stratos.metadata.client.pojo.DataContext;
-//
-//import java.util.Map;
-//import java.util.Set;
-//
-//public class ClusterDataHolder {
-//
-//    // Cluster Ids map, key = service name
-//    private Map<String, Set<String>> clusterIdMap;
-//
-//    // Cluster object collection
-//    private Set<Cluster> clusters;
-//
-////    // payload related information
-////    private Set<PayloadDataHolder> payloadDataHolders;
-//
-//   public ClusterDataHolder (Map<String, Set<String>> clusterIdMap, 
Set<Cluster> clusters) {
-//       this.clusterIdMap = clusterIdMap;
-//       this.clusters = clusters;
-//   }
-//
-//    public Map<String, Set<String>> getClusterIdMap() {
-//        return clusterIdMap;
-//    }
-//
-//    public Set<Cluster> getApplicationClusterContexts() {
-//        return clusters;
-//    }
-//
-//
-////    public Set<PayloadDataHolder> getPayloadDataHolders() {
-////        return payloadDataHolders;
-////    }
-////
-////    public void setPayloadDataHolders(Set<PayloadDataHolder> 
payloadDataHolders) {
-////        this.payloadDataHolders = payloadDataHolders;
-////    }
-//}

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/payload/MetaDataHolder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/payload/MetaDataHolder.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/payload/MetaDataHolder.java
index 8ab745e..59bf380 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/payload/MetaDataHolder.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/payload/MetaDataHolder.java
@@ -35,6 +35,11 @@ public class MetaDataHolder {
 
     private Properties properties;
 
+    public MetaDataHolder (String appId) {
+
+        this.appId = appId;
+    }
+
     public MetaDataHolder(String appId, String groupName, String clusterId) {
 
         this.appId = appId;

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/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 a926411..25dc027 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
@@ -672,11 +672,10 @@ public class TopologyBuilder {
             } else {
                 Application application = 
topology.getApplication(applicationId);
                 // remove clusters
-                for (Map.Entry<String, Set<String>> 
serviceNameToClusterIdEntry:
-                        
application.getServiceNameToClusterIdsMap().entrySet()) {
-                    Service service = 
topology.getService(serviceNameToClusterIdEntry.getKey());
-                    for (String clusterId : 
serviceNameToClusterIdEntry.getValue()) {
-                        service.removeCluster(clusterId);
+                for (Map.Entry<String, ClusterDataHolder> 
clusterDataHolderEntry : application.getClusterDataMap().entrySet()) {
+                    Service service = 
topology.getService(clusterDataHolderEntry.getValue().getServiceType());
+                    if (service != null) {
+                        
service.removeCluster(clusterDataHolderEntry.getValue().getClusterId());
                     }
                 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/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 55e37e6..cc7c588 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
@@ -40,8 +40,8 @@ public class Application implements ParentBehavior {
     private DependencyOrder dependencyOrder;
     // Group Map, key = Group.alias
     private Map<String, Group> aliasToGroupMap;
-    // Cluster Id map, key = service name
-    private Map<String, Set<String>> serviceNameToClusterIdsMap;
+    // Cluster Id map, key = subscription alias for the cartridge type
+    private Map<String, ClusterDataHolder> aliasToClusterDataMap;
     // Application status
     private Status status;
 
@@ -50,7 +50,7 @@ public class Application implements ParentBehavior {
         this.key = RandomStringUtils.randomAlphanumeric(16);
         this.status = Status.Created;
         aliasToGroupMap = new HashMap<String, Group>();
-        serviceNameToClusterIdsMap = new HashMap<String, Set<String>>();
+        aliasToClusterDataMap = new HashMap<String, ClusterDataHolder>();
     }
 
     @Override
@@ -74,8 +74,8 @@ public class Application implements ParentBehavior {
     }
 
     @Override
-    public Map<String, Set<String>> getClusterMap() {
-        return this.serviceNameToClusterIdsMap;
+    public Map<String, ClusterDataHolder> getClusterDataMap() {
+        return this.aliasToClusterDataMap;
     }
 
     @Override
@@ -116,6 +116,16 @@ public class Application implements ParentBehavior {
         return dependencyOrder;
     }
 
+    @Override
+    public void setClusterData(Map<String, ClusterDataHolder> 
aliasToClusterData) {
+        this.aliasToClusterDataMap.putAll(aliasToClusterData);
+    }
+
+    @Override
+    public ClusterDataHolder getClusterData(String alias) {
+        return aliasToClusterDataMap.get(alias);
+    }
+
 //    @Override
 //    public void addClusterId(String serviceName, String clusterId) {
 //
@@ -132,20 +142,6 @@ public class Application implements ParentBehavior {
 //        }
 //    }
 
-    @Override
-    public void setClusterIds(Map<String, Set<String>> 
serviceNameToClusterIds) {
-        serviceNameToClusterIdsMap.putAll(serviceNameToClusterIds);
-    }
-
-    @Override
-    public Set<String> getClusterIds(String serviceName) {
-        return serviceNameToClusterIdsMap.get(serviceName);
-    }
-
-    public Map<String, Set<String>> getServiceNameToClusterIdsMap() {
-        return serviceNameToClusterIdsMap;
-    }
-
     public String getId() {
         return id;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ClusterDataHolder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ClusterDataHolder.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ClusterDataHolder.java
new file mode 100644
index 0000000..cceb4fc
--- /dev/null
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ClusterDataHolder.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.messaging.domain.topology;
+
+import java.io.Serializable;
+
+public class ClusterDataHolder implements Serializable {
+
+    private String serviceType;
+
+    private String clusterId;
+
+    public ClusterDataHolder (String serviceType, String clusterId) {
+
+        this.serviceType = serviceType;
+        this.clusterId = clusterId;
+    }
+
+
+    public String getServiceType() {
+        return serviceType;
+    }
+
+    public String getClusterId() {
+        return clusterId;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/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 548aabd..c47667f 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
@@ -36,8 +36,8 @@ public class Group implements ParentBehavior {
     private DependencyOrder dependencyOrder;
     // Sub Group Map, key = Group.alias
     private Map<String, Group> aliasToGroupMap;
-    // Cluster id map, key = service name
-    private Map<String, Set<String>> serviceNameToClusterIdsMap;
+    // Cluster Id map, key = subscription alias for the cartridge type
+    private Map<String, ClusterDataHolder> aliasToClusterDataMap;
     // Group status
     private Status status;
 
@@ -46,7 +46,7 @@ public class Group implements ParentBehavior {
         this.alias = alias;
         this.status = Status.Created;
         aliasToGroupMap = new HashMap<String, Group>();
-        serviceNameToClusterIdsMap = new HashMap<String, Set<String>>();
+        aliasToClusterDataMap = new HashMap<String, ClusterDataHolder>();
     }
 
     @Override
@@ -70,8 +70,8 @@ public class Group implements ParentBehavior {
     }
 
     @Override
-    public Map<String,Set<String>> getClusterMap() {
-        return this.serviceNameToClusterIdsMap;
+    public Map<String, ClusterDataHolder> getClusterDataMap() {
+        return this.aliasToClusterDataMap;
     }
 
     @Override
@@ -129,17 +129,13 @@ public class Group implements ParentBehavior {
 //    }
 
     @Override
-    public void setClusterIds(Map<String, Set<String>> 
serviceNameToClusterIds) {
-        serviceNameToClusterIdsMap.putAll(serviceNameToClusterIds);
+    public void setClusterData(Map<String, ClusterDataHolder> 
aliasToClusterData) {
+        this.aliasToClusterDataMap.putAll(aliasToClusterData);
     }
 
     @Override
-    public Set<String> getClusterIds(String serviceName) {
-        return serviceNameToClusterIdsMap.get(serviceName);
-    }
-
-    public Map<String, Set<String>> getServiceNameToClusterIdsMap() {
-        return serviceNameToClusterIdsMap;
+    public ClusterDataHolder getClusterData(String alias) {
+        return aliasToClusterDataMap.get(alias);
     }
 
     public String getName() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/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 bfad2ae..d6c7035 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
@@ -34,7 +34,7 @@ public interface ParentBehavior extends Serializable {
 
     public Map<String, Group> getAliasToGroupMap();
 
-    public Map<String,Set<String>> getClusterMap();
+    public Map<String, ClusterDataHolder> getClusterDataMap();
 
     public Group getGroupRecursively (String groupAlias);
 
@@ -44,11 +44,7 @@ public interface ParentBehavior extends Serializable {
 
     public DependencyOrder getDependencyOrder ();
 
-//    public void addClusterId (String serviceName, String clusterId);
+    public void setClusterData (Map<String, ClusterDataHolder> 
aliasToClusterData);
 
-    public void setClusterIds (Map<String,Set<String>> 
serviceNameToClusterIds);
-
-    public Set<String> getClusterIds(String serviceName);
-
-    public Map<String, Set<String>> getServiceNameToClusterIdsMap();
+    public ClusterDataHolder getClusterData (String alias);
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/077fb407/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationCreatedEvent.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationCreatedEvent.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationCreatedEvent.java
index 3674eb3..7923667 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationCreatedEvent.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationCreatedEvent.java
@@ -35,6 +35,6 @@ public class ApplicationCreatedEvent extends TopologyEvent {
 
     public String toString() {
         return "ApplicationCreatedEvent [app id= " + application.getId() + ", 
groups= " + application.getGroups() + ", clusters= " +
-                application.getClusterMap().values() + "]";
+                application.getClusterDataMap().values() + "]";
     }
 }

Reply via email to