fixing AS issues due to merging

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

Branch: refs/heads/docker-grouping-merge
Commit: 8b66cbaca6ad51b6ac8f669d82ac188062c7c723
Parents: fb80e2c
Author: R-Rajkumar <[email protected]>
Authored: Mon Nov 3 15:21:21 2014 +0530
Committer: R-Rajkumar <[email protected]>
Committed: Mon Nov 3 15:21:21 2014 +0530

----------------------------------------------------------------------
 .../stratos/autoscaler/AutoscalerContext.java   |   5 +-
 .../applications/ClusterInformation.java        |   2 +-
 .../applications/MTClusterInformation.java      |   2 +-
 .../applications/STClusterInformation.java      |   2 +-
 .../parser/DefaultApplicationParser.java        |  69 +-
 .../applications/pojo/ApplicationContext.java   |  12 -
 .../applications/topic/ApplicationBuilder.java  |   2 +-
 .../interfaces/AutoScalerServiceInterface.java  |   1 -
 .../AutoscalerTopologyEventReceiver.java        | 770 ++++---------------
 .../monitor/AbstractClusterMonitor.java         | 277 -------
 .../monitor/ParentComponentMonitor.java         |   2 +
 .../application/ApplicationMonitorFactory.java  |  32 +-
 .../monitor/cluster/AbstractClusterMonitor.java |  62 +-
 .../KubernetesServiceClusterMonitor.java        |   3 +-
 .../monitor/cluster/VMClusterMonitor.java       |   7 +
 .../monitor/cluster/VMLbClusterMonitor.java     |   9 +-
 .../cluster/VMServiceClusterMonitor.java        | 148 ++--
 .../status/checker/StatusChecker.java           |  18 +-
 18 files changed, 331 insertions(+), 1092 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
index e8553bc..88ff3cf 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
@@ -23,17 +23,14 @@ package org.apache.stratos.autoscaler;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor;
+import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
 
 /**
  * It holds all cluster monitors which are active in stratos.
  */
 public class AutoscalerContext {
 
-    private static final Log log = LogFactory.getLog(AutoscalerContext.class);
     private static final AutoscalerContext INSTANCE = new AutoscalerContext();
 
     // Map<ClusterId, AbstractClusterMonitor>

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ClusterInformation.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ClusterInformation.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ClusterInformation.java
index 5fd6d57..e87b13b 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ClusterInformation.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ClusterInformation.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.stratos.cloud.controller.application;
+package org.apache.stratos.autoscaler.applications;
 
 public interface ClusterInformation {
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/MTClusterInformation.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/MTClusterInformation.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/MTClusterInformation.java
index a0a59d4..36185f9 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/MTClusterInformation.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/MTClusterInformation.java
@@ -19,7 +19,7 @@
 
 package org.apache.stratos.autoscaler.applications;
 
-import org.apache.stratos.cloud.controller.application.ClusterInformation;
+import org.apache.stratos.autoscaler.applications.ClusterInformation;
 
 public class MTClusterInformation implements ClusterInformation {
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/STClusterInformation.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/STClusterInformation.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/STClusterInformation.java
index 9a5bea8..f288233 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/STClusterInformation.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/STClusterInformation.java
@@ -19,7 +19,7 @@
 
 package org.apache.stratos.autoscaler.applications;
 
-import org.apache.stratos.cloud.controller.application.ClusterInformation;
+import org.apache.stratos.autoscaler.applications.ClusterInformation;
 
 public class STClusterInformation implements ClusterInformation {
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
index 16a14de..ce68f8a 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
@@ -17,41 +17,40 @@
  * under the License.
  */
 
-package org.apache.stratos.cloud.controller.application.parser;
+package org.apache.stratos.autoscaler.applications.parser;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.applications.ApplicationUtils;
+import org.apache.stratos.autoscaler.applications.ClusterInformation;
 import org.apache.stratos.autoscaler.applications.MTClusterInformation;
 import org.apache.stratos.autoscaler.applications.STClusterInformation;
-import org.apache.stratos.autoscaler.applications.pojo.*;
+import 
org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
+import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
+import org.apache.stratos.autoscaler.applications.pojo.GroupContext;
+import org.apache.stratos.autoscaler.applications.pojo.SubscribableContext;
+import org.apache.stratos.autoscaler.applications.pojo.SubscribableInfoContext;
 import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
 import org.apache.stratos.autoscaler.exception.ApplicationDefinitionException;
 import org.apache.stratos.autoscaler.exception.CartridgeInformationException;
 import org.apache.stratos.autoscaler.pojo.ServiceGroup;
 import org.apache.stratos.autoscaler.registry.RegistryManager;
-import org.apache.stratos.cloud.controller.application.ClusterInformation;
-import org.apache.stratos.cloud.controller.application.MTClusterInformation;
-import org.apache.stratos.cloud.controller.application.STClusterInformation;
-import 
org.apache.stratos.cloud.controller.exception.ApplicationDefinitionException;
-import org.apache.stratos.cloud.controller.interfaces.ApplicationParser;
-import org.apache.stratos.cloud.controller.pojo.*;
-import org.apache.stratos.cloud.controller.pojo.Cartridge;
-import org.apache.stratos.cloud.controller.pojo.Properties;
-import org.apache.stratos.cloud.controller.pojo.application.*;
-import org.apache.stratos.cloud.controller.pojo.payload.MetaDataHolder;
-import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
-import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.messaging.domain.topology.*;
 import org.apache.stratos.cloud.controller.stub.pojo.CartridgeInfo;
 import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.ClusterDataHolder;
 import org.apache.stratos.messaging.domain.applications.DependencyOrder;
 import org.apache.stratos.messaging.domain.applications.Group;
 
-import java.util.*;
-
 /**
  * Default implementation of the Application Parser. One Application should be 
processed by one
  * instance of the DefaultApplicationParser.
@@ -123,11 +122,6 @@ public class DefaultApplicationParser implements 
ApplicationParser {
         return applicationClusterContexts;
     }
 
-    @Override
-    public Set<MetaDataHolder> getPayloadData() throws 
ApplicationDefinitionException {
-        return metaDataHolders;
-    }
-
     /**
      * Extract Group information from Application Definition
      *
@@ -273,7 +267,7 @@ public class DefaultApplicationParser implements 
ApplicationParser {
             if (appCtxt.getComponents().getSubscribableContexts() != null) {
                 clusterDataMap = 
parseLeafLevelSubscriptions(appCtxt.getApplicationId(), appCtxt.getTenantId(),
                         application.getKey(), null, 
Arrays.asList(appCtxt.getComponents().getSubscribableContexts()),
-                        subscribableInfoCtxts, appCtxt.getProperties());
+                        subscribableInfoCtxts);
                 application.setClusterData(clusterDataMap);
                 
//clusters.addAll(clusterDataHolder.getApplicationClusterContexts());
             }
@@ -282,7 +276,7 @@ public class DefaultApplicationParser implements 
ApplicationParser {
             if (appCtxt.getComponents().getGroupContexts() != null) {
                 application.setGroups(parseGroups(appCtxt.getApplicationId(), 
appCtxt.getTenantId(),
                         application.getKey(), 
Arrays.asList(appCtxt.getComponents().getGroupContexts()),
-                        subscribableInfoCtxts, definedGroupCtxts, 
appCtxt.getProperties()));
+                        subscribableInfoCtxts, definedGroupCtxts));
             }
 
             // get top level Dependency definitions
@@ -347,13 +341,13 @@ public class DefaultApplicationParser implements 
ApplicationParser {
      */
     private Map<String, Group> parseGroups (String appId, int tenantId, String 
key, List<GroupContext> groupCtxts,
                                            Map<String, 
SubscribableInfoContext> subscribableInformation,
-                                           Map<String, GroupContext> 
definedGroupCtxts, Properties properties)
+                                           Map<String, GroupContext> 
definedGroupCtxts)
             throws ApplicationDefinitionException {
 
         Map<String, Group> groupAliasToGroup = new HashMap<String, Group>();
 
         for (GroupContext groupCtxt : groupCtxts) {
-            Group group = parseGroup(appId, tenantId, key, groupCtxt, 
subscribableInformation, definedGroupCtxts, properties);
+            Group group = parseGroup(appId, tenantId, key, groupCtxt, 
subscribableInformation, definedGroupCtxts);
             groupAliasToGroup.put(group.getAlias(), group);
         }
 
@@ -424,7 +418,7 @@ public class DefaultApplicationParser implements 
ApplicationParser {
      */
     private Group parseGroup (String appId, int tenantId, String key, 
GroupContext groupCtxt,
                              Map<String, SubscribableInfoContext> 
subscribableInfoCtxts,
-                             Map<String, GroupContext> definedGroupCtxts, 
Properties properties)
+                             Map<String, GroupContext> definedGroupCtxts)
             throws ApplicationDefinitionException {
 
         // check if are in the defined Group set
@@ -452,7 +446,7 @@ public class DefaultApplicationParser implements 
ApplicationParser {
         // get group level Subscribables
         if (groupCtxt.getSubscribableContexts() != null) {
             clusterDataMap = parseLeafLevelSubscriptions(appId, tenantId, key, 
groupCtxt.getName(),
-                    Arrays.asList(groupCtxt.getSubscribableContexts()), 
subscribableInfoCtxts, properties);
+                    Arrays.asList(groupCtxt.getSubscribableContexts()), 
subscribableInfoCtxts);
             group.setClusterData(clusterDataMap);
         }
 
@@ -465,7 +459,7 @@ public class DefaultApplicationParser implements 
ApplicationParser {
                 subGroupCtxt = definedGroupCtxts.get(subGroupCtxt.getAlias());
                 Group nestedGroup = parseGroup(appId, tenantId, key, 
subGroupCtxt,
                         subscribableInfoCtxts,
-                        definedGroupCtxts, properties);
+                        definedGroupCtxts);
                 nestedGroups.put(nestedGroup.getAlias(), nestedGroup);
             }
 
@@ -569,8 +563,7 @@ public class DefaultApplicationParser implements 
ApplicationParser {
      */
     private Map<String, ClusterDataHolder> parseLeafLevelSubscriptions (String 
appId, int tenantId, String key, String groupName,
                                                                  
List<SubscribableContext> subscribableCtxts,
-                                                                 Map<String, 
SubscribableInfoContext> subscribableInfoCtxts,
-                                                                 Properties 
properties)
+                                                                 Map<String, 
SubscribableInfoContext> subscribableInfoCtxts)
             throws ApplicationDefinitionException {
 
         Map<String, ClusterDataHolder> clusterDataMap = new HashMap<String, 
ClusterDataHolder>();
@@ -608,14 +601,12 @@ public class DefaultApplicationParser implements 
ApplicationParser {
 
             String hostname = 
clusterInfo.getHostName(subscribableCtxt.getAlias(), 
cartridgeInfo.getHostName());
             String clusterId = 
clusterInfo.getClusterId(subscribableCtxt.getAlias(), 
subscribableCtxt.getType());
-            boolean isKubernetesCluster = 
StratosConstants.KUBERNETES_DEPLOYER_TYPE.equals(cartridge.getDeployerType());
 
             // create and collect this cluster's information
             assert subscribableInfoCtxt != null;
             ApplicationClusterContext appClusterCtxt = 
createApplicationClusterContext(appId, groupName, cartridgeInfo,
                     key, tenantId, subscribableInfoCtxt.getRepoUrl(), 
subscribableCtxt.getAlias(),
-                    clusterId, hostname, 
subscribableInfoCtxt.getDeploymentPolicy(),
-                    false, isKubernetesCluster, 
subscribableInfoCtxt.getDependencyAliases(), properties);
+                    clusterId, hostname, 
subscribableInfoCtxt.getDeploymentPolicy(), false, 
subscribableInfoCtxt.getDependencyAliases());
 
             
appClusterCtxt.setAutoscalePolicyName(subscribableInfoCtxt.getAutoscalingPolicy());
             this.applicationClusterContexts.add(appClusterCtxt);
@@ -640,8 +631,7 @@ public class DefaultApplicationParser implements 
ApplicationParser {
      * @param clusterId Cluster id
      * @param hostname Hostname
      * @param deploymentPolicy Deployment policy used
-     * @param isLBCluster if this cluster is an LB
-     * @param isKubernetesCluster if this cluster is a Kubernetes cluster
+     * @param isLB if this cluster is an LB
      * @return ApplicationClusterContext object with relevant information
      *
      * @throws ApplicationDefinitionException If any error occurs
@@ -649,17 +639,14 @@ public class DefaultApplicationParser implements 
ApplicationParser {
     private ApplicationClusterContext createApplicationClusterContext (String 
appId, String groupName, CartridgeInfo cartridgeInfo,
                                                                        String 
subscriptionKey, int tenantId, String repoUrl,
                                                                        String 
alias, String clusterId, String hostname,
-                                                                       String 
deploymentPolicy, boolean isLBCluster,
-                                                                       boolean 
isKubernetesCluster, String[] dependencyAliases,
-                                                                       
Properties properties)
+                                                                       String 
deploymentPolicy, boolean isLB, String[] dependencyAliases)
             throws ApplicationDefinitionException {
 
         // Create text payload
         String textPayload = ApplicationUtils.createPayload(appId, groupName, 
cartridgeInfo, subscriptionKey, tenantId, clusterId,
                 hostname, repoUrl, alias, null, dependencyAliases).toString();
 
-        return new ApplicationClusterContext(cartridgeInfo.getType(), 
clusterId, hostname, textPayload, deploymentPolicy, 
-                isLB, isKubernetesCluster, properties);
+        return new ApplicationClusterContext(cartridgeInfo.getType(), 
clusterId, hostname, textPayload, deploymentPolicy, isLB);
     }
 
     private CartridgeInfo getCartridge (String cartridgeType) throws 
ApplicationDefinitionException {

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
index b3560c3..5d97ad5 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
@@ -19,8 +19,6 @@
 
 package org.apache.stratos.autoscaler.applications.pojo;
 
-import org.apache.stratos.cloud.controller.pojo.Properties;
-
 import java.io.Serializable;
 
 public class ApplicationContext implements Serializable {
@@ -41,8 +39,6 @@ public class ApplicationContext implements Serializable {
 
     private SubscribableInfoContext[] subscribableInfoContexts;
 
-    private Properties properties;
-
     public ApplicationContext() {
     }
 
@@ -101,12 +97,4 @@ public class ApplicationContext implements Serializable {
     public void setTeantAdminUsername(String teantAdminUsername) {
         this.teantAdminUsername = teantAdminUsername;
     }
-
-    public Properties getProperties() {
-        return properties;
-    }
-
-    public void setProperties(Properties properties) {
-        this.properties = properties;
-    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/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 bf0ad01..a92ce09 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
@@ -25,8 +25,8 @@ import 
org.apache.stratos.autoscaler.applications.ApplicationHolder;
 import 
org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
 import org.apache.stratos.autoscaler.exception.DependencyBuilderException;
 import org.apache.stratos.autoscaler.exception.TopologyInConsistentException;
-import org.apache.stratos.autoscaler.monitor.ApplicationMonitorFactory;
 import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor;
+import 
org.apache.stratos.autoscaler.monitor.application.ApplicationMonitorFactory;
 import org.apache.stratos.messaging.domain.applications.*;
 import org.apache.stratos.messaging.domain.topology.Topology;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/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 16e809d..74c9c8c 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
@@ -1,4 +1,3 @@
-package org.apache.stratos.autoscaler.interfaces;
 /*
  *
  * Licensed to the Apache Software Foundation (ASF) under one

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
index f449560..0f52765 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -19,57 +19,42 @@
 
 package org.apache.stratos.autoscaler.message.receiver.topology;
 
+import java.util.List;
 import java.util.Set;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.AutoscalerContext;
+import org.apache.stratos.autoscaler.MemberStatsContext;
 import org.apache.stratos.autoscaler.NetworkPartitionContext;
-import org.apache.stratos.autoscaler.*;
+import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
+import org.apache.stratos.autoscaler.PartitionContext;
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
+import 
org.apache.stratos.autoscaler.applications.topic.ApplicationsEventPublisher;
 import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
 import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.exception.DependencyBuilderException;
-import org.apache.stratos.autoscaler.exception.PartitionValidationException;
-import org.apache.stratos.autoscaler.exception.PolicyValidationException;
+import org.apache.stratos.autoscaler.exception.TerminationException;
 import org.apache.stratos.autoscaler.exception.TopologyInConsistentException;
-import 
org.apache.stratos.autoscaler.applications.topic.ApplicationsEventPublisher;
 import 
org.apache.stratos.autoscaler.grouping.topic.ClusterStatusEventPublisher;
 import 
org.apache.stratos.autoscaler.grouping.topic.InstanceNotificationPublisher;
-import org.apache.stratos.autoscaler.grouping.topic.StatusEventPublisher;
-import org.apache.stratos.autoscaler.monitor.AbstractClusterMonitor;
-import org.apache.stratos.autoscaler.monitor.ApplicationMonitorFactory;
 import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor;
 import 
org.apache.stratos.autoscaler.monitor.application.ApplicationMonitorFactory;
 import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
-import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitorFactory;
 import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
-import org.apache.stratos.autoscaler.monitor.group.GroupMonitor;
-import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
-import org.apache.stratos.messaging.domain.topology.Application;
-import org.apache.stratos.messaging.domain.topology.ApplicationStatus;
-import org.apache.stratos.messaging.domain.topology.Cluster;
-import org.apache.stratos.messaging.domain.topology.ClusterDataHolder;
-import org.apache.stratos.messaging.domain.topology.ClusterStatus;
-import org.apache.stratos.messaging.domain.topology.GroupStatus;
-import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor;
 import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
+import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.stratos.autoscaler.status.checker.StatusChecker;
 import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.applications.Applications;
 import org.apache.stratos.messaging.domain.applications.ClusterDataHolder;
-import org.apache.stratos.messaging.domain.topology.*;
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.ClusterStatus;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.domain.topology.Topology;
 import org.apache.stratos.messaging.event.Event;
-import org.apache.stratos.messaging.event.topology.*;
-import 
org.apache.stratos.messaging.listener.applications.ApplicationUndeployedEventListener;
-import org.apache.stratos.messaging.listener.topology.*;
-import 
org.apache.stratos.messaging.message.receiver.applications.ApplicationManager;
-import org.apache.stratos.messaging.event.topology.ApplicationActivatedEvent;
-import org.apache.stratos.messaging.event.topology.ApplicationCreatedEvent;
-import org.apache.stratos.messaging.event.topology.ApplicationTerminatedEvent;
-import org.apache.stratos.messaging.event.topology.ApplicationTerminatingEvent;
 import org.apache.stratos.messaging.event.topology.ApplicationUndeployedEvent;
 import org.apache.stratos.messaging.event.topology.ClusterActivatedEvent;
 import org.apache.stratos.messaging.event.topology.ClusterCreatedEvent;
@@ -77,33 +62,23 @@ import 
org.apache.stratos.messaging.event.topology.ClusterInactivateEvent;
 import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent;
 import org.apache.stratos.messaging.event.topology.ClusterTerminatedEvent;
 import org.apache.stratos.messaging.event.topology.ClusterTerminatingEvent;
-import org.apache.stratos.messaging.event.topology.GroupActivatedEvent;
-import org.apache.stratos.messaging.event.topology.GroupInactivateEvent;
-import org.apache.stratos.messaging.event.topology.GroupTerminatedEvent;
-import org.apache.stratos.messaging.event.topology.GroupTerminatingEvent;
 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.event.topology.MemberTerminatedEvent;
-import 
org.apache.stratos.messaging.listener.topology.ApplicationActivatedEventListener;
-import 
org.apache.stratos.messaging.listener.topology.ApplicationCreatedEventListener;
-import 
org.apache.stratos.messaging.listener.topology.ApplicationTerminatedEventListener;
-import 
org.apache.stratos.messaging.listener.topology.ApplicationTerminatingEventListener;
-import 
org.apache.stratos.messaging.listener.topology.ApplicationUndeployedEventListener;
+import 
org.apache.stratos.messaging.listener.applications.ApplicationUndeployedEventListener;
 import 
org.apache.stratos.messaging.listener.topology.ClusterActivatedEventListener;
 import 
org.apache.stratos.messaging.listener.topology.ClusterCreatedEventListener;
 import 
org.apache.stratos.messaging.listener.topology.ClusterInActivateEventListener;
 import 
org.apache.stratos.messaging.listener.topology.ClusterRemovedEventListener;
+import 
org.apache.stratos.messaging.listener.topology.ClusterResetEventListener;
 import 
org.apache.stratos.messaging.listener.topology.ClusterTerminatedEventListener;
 import 
org.apache.stratos.messaging.listener.topology.ClusterTerminatingEventListener;
 import 
org.apache.stratos.messaging.listener.topology.CompleteTopologyEventListener;
-import 
org.apache.stratos.messaging.listener.topology.GroupActivatedEventListener;
-import 
org.apache.stratos.messaging.listener.topology.GroupInActivateEventListener;
-import 
org.apache.stratos.messaging.listener.topology.GroupTerminatedEventListener;
-import 
org.apache.stratos.messaging.listener.topology.GroupTerminatingEventListener;
 import 
org.apache.stratos.messaging.listener.topology.MemberActivatedEventListener;
 import 
org.apache.stratos.messaging.listener.topology.MemberMaintenanceListener;
 import 
org.apache.stratos.messaging.listener.topology.MemberReadyToShutdownEventListener;
+import 
org.apache.stratos.messaging.listener.topology.MemberStartedEventListener;
 import 
org.apache.stratos.messaging.listener.topology.MemberTerminatedEventListener;
 import 
org.apache.stratos.messaging.message.receiver.topology.TopologyEventReceiver;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
@@ -221,43 +196,12 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
             }
         });
 
-
-        /*topologyEventReceiver.addEventListener(new 
ApplicationCreatedEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-                try {
-                    log.info("[ApplicationCreatedEvent] Received: " + 
event.getClass());
-                    ApplicationCreatedEvent applicationCreatedEvent = 
(ApplicationCreatedEvent) event;
-                    try {
-
-                        //acquire read lock
-                        TopologyManager.acquireReadLockForApplication(
-                                
applicationCreatedEvent.getApplication().getUniqueIdentifier());
-                        //start the application monitor
-                        
startApplicationMonitor(applicationCreatedEvent.getApplication().getUniqueIdentifier());
-                    } catch (Exception e) {
-                        String msg = "Error processing event " + 
e.getLocalizedMessage();
-                        log.error(msg, e);
-                    } finally {
-                        //release read lock
-                        TopologyManager.releaseReadLockForApplication(
-                                
applicationCreatedEvent.getApplication().getUniqueIdentifier());
-                    }
-                } catch (ClassCastException e) {
-                    String msg = "Error while casting the event " + 
e.getLocalizedMessage();
-                    log.error(msg, e);
-                }
-
-            }
-        });*/
-
         topologyEventReceiver.addEventListener(new 
ClusterActivatedEventListener() {
             @Override
             protected void onEvent(Event event) {
                 log.info("[ClusterActivatedEvent] Received: " + 
event.getClass());
 
                 ClusterActivatedEvent clusterActivatedEvent = 
(ClusterActivatedEvent) event;
-                String appId = clusterActivatedEvent.getAppId();
                 String clusterId = clusterActivatedEvent.getClusterId();
                 AbstractClusterMonitor clusterMonitor =
                         
AutoscalerContext.getInstance().getClusterMonitor(clusterId);
@@ -291,23 +235,16 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
         topologyEventReceiver.addEventListener(new 
ClusterCreatedEventListener() {
             @Override
             protected void onEvent(Event event) {
-
                 log.info("[ClusterCreatedEvent] Received: " + 
event.getClass());
-
-                ClusterCreatedEvent clusterCreatedEvent = 
(ClusterCreatedEvent) event;
-                //TODO notify the monitor about cluster creation
-
             }
         });
 
         topologyEventReceiver.addEventListener(new 
ClusterInActivateEventListener() {
             @Override
             protected void onEvent(Event event) {
-
                 log.info("[ClusterInActivateEvent] Received: " + 
event.getClass());
 
                 ClusterInactivateEvent clusterInactivateEvent = 
(ClusterInactivateEvent) event;
-                String appId = clusterInactivateEvent.getAppId();
                 String clusterId = clusterInactivateEvent.getClusterId();
                 AbstractClusterMonitor clusterMonitor =
                         
AutoscalerContext.getInstance().getClusterMonitor(clusterId);
@@ -351,11 +288,9 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
         topologyEventReceiver.addEventListener(new 
ClusterTerminatedEventListener() {
             @Override
             protected void onEvent(Event event) {
-
                 log.info("[ClusterTerminatedEvent] Received: " + 
event.getClass());
 
                 ClusterTerminatedEvent clusterTerminatedEvent = 
(ClusterTerminatedEvent) event;
-                String appId = clusterTerminatedEvent.getAppId();
                 String clusterId = clusterTerminatedEvent.getClusterId();
                 AbstractClusterMonitor clusterMonitor =
                         
AutoscalerContext.getInstance().getClusterMonitor(clusterId);
@@ -367,105 +302,6 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
             }
         });
 
-        /*topologyEventReceiver.addEventListener(new 
GroupActivatedEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                log.info("[GroupActivatedEvent] Received: " + 
event.getClass());
-
-                GroupActivatedEvent groupActivatedEvent = 
(GroupActivatedEvent) event;
-                String appId = groupActivatedEvent.getAppId();
-                String groupId = groupActivatedEvent.getGroupId();
-
-                ApplicationMonitor appMonitor = 
AutoscalerContext.getInstance().getAppMonitor(appId);
-                GroupMonitor monitor = (GroupMonitor) 
appMonitor.findGroupMonitorWithId(groupId);
-
-                //changing the status in the monitor, will notify its parent 
monitor
-                if (monitor != null) {
-                    monitor.setStatus(GroupStatus.Active);
-                }
-            }
-        });
-
-        topologyEventReceiver.addEventListener(new 
GroupInActivateEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                log.info("[GroupInActivateEvent] Received: " + 
event.getClass());
-
-                GroupInactivateEvent groupInactivateEvent = 
(GroupInactivateEvent) event;
-                String appId = groupInactivateEvent.getAppId();
-                String groupId = groupInactivateEvent.getGroupId();
-
-                ApplicationMonitor appMonitor = 
AutoscalerContext.getInstance().getAppMonitor(appId);
-                GroupMonitor monitor = (GroupMonitor) 
appMonitor.findGroupMonitorWithId(groupId);
-
-                //changing the status in the monitor, will notify its parent 
monitor
-                if (monitor != null) {
-                    monitor.setStatus(GroupStatus.Inactive);
-                }
-
-            }
-        });
-
-        topologyEventReceiver.addEventListener(new 
GroupTerminatingEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                log.info("[GroupTerminatingEvent] Received: " + 
event.getClass());
-
-                GroupTerminatingEvent groupTerminatingEvent = 
(GroupTerminatingEvent) event;
-                String appId = groupTerminatingEvent.getAppId();
-                String groupId = groupTerminatingEvent.getGroupId();
-
-                ApplicationMonitor appMonitor = 
AutoscalerContext.getInstance().getAppMonitor(appId);
-                GroupMonitor monitor = (GroupMonitor) 
appMonitor.findGroupMonitorWithId(groupId);
-
-                //changing the status in the monitor, will notify its parent 
monitor
-                if (monitor != null) {
-                    monitor.setStatus(GroupStatus.Terminating);
-                }
-
-            }
-        });
-
-        topologyEventReceiver.addEventListener(new 
GroupTerminatedEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                log.info("[GroupTerminatedEvent] Received: " + 
event.getClass());
-
-                GroupTerminatedEvent groupTerminatedEvent = 
(GroupTerminatedEvent) event;
-                String appId = groupTerminatedEvent.getAppId();
-                String groupId = groupTerminatedEvent.getGroupId();
-
-                ApplicationMonitor appMonitor = 
AutoscalerContext.getInstance().getAppMonitor(appId);
-                GroupMonitor monitor = (GroupMonitor) 
appMonitor.findGroupMonitorWithId(groupId);
-
-                //changing the status in the monitor, will notify its parent 
monitor
-                if (monitor != null) {
-                    monitor.setStatus(GroupStatus.Terminated);
-                }
-
-            }
-        });
-
-        topologyEventReceiver.addEventListener(new 
ApplicationActivatedEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                log.info("[ApplicationActivatedEvent] Received: " + 
event.getClass());
-
-                ApplicationActivatedEvent applicationActivatedEvent = 
(ApplicationActivatedEvent) event;
-                String appId = applicationActivatedEvent.getAppId();
-
-                ApplicationMonitor appMonitor = 
AutoscalerContext.getInstance().getAppMonitor(appId);
-                if(appMonitor != null) {
-                    appMonitor.setStatus(ApplicationStatus.Active);
-                }
-            }
-        });*/
-
         topologyEventReceiver.addEventListener(new 
ApplicationUndeployedEventListener() {
             @Override
             protected void onEvent(Event event) {
@@ -482,8 +318,8 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
                 Set<ClusterDataHolder> clusterDataHolders = 
applicationUndeployedEvent.getClusterData();
                 if (clusterDataHolders != null) {
                     for (ClusterDataHolder clusterDataHolder : 
clusterDataHolders) {
-                        ClusterMonitor clusterMonitor =
-                                   ((ClusterMonitor) 
AutoscalerContext.getInstance().getMonitor(clusterDataHolder.getClusterId()));
+                        VMClusterMonitor clusterMonitor =
+                                   ((VMClusterMonitor) 
AutoscalerContext.getInstance().getClusterMonitor(clusterDataHolder.getClusterId()));
                         if (clusterMonitor == null) {
                             // Cluster Monitor not found; send Cluster 
Terminated event to cleanup
                             
ClusterStatusEventPublisher.sendClusterTerminatedEvent(
@@ -594,269 +430,95 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
             }
         });
 
-
-        /*topologyEventReceiver.addEventListener(new 
ApplicationTerminatingEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                log.info("[ApplicationTerminatingEvent] Received: " + 
event.getClass());
-
-                ApplicationTerminatingEvent appTerminatingEvent = 
(ApplicationTerminatingEvent) event;
-
-                // acquire reead locks for application and relevant clusters
-                
TopologyManager.acquireReadLockForApplication(appTerminatingEvent.getAppId());
-
-                try {
-                    ApplicationMonitor appMonitor = 
AutoscalerContext.getInstance().
-                            getAppMonitor(appTerminatingEvent.getAppId());
-
-                    if (appMonitor != null) {
-                        // update the status as Terminating
-                        appMonitor.setStatus(ApplicationStatus.Terminating);
-
-                    } else {
-                        log.warn("Application Monitor cannot be found for the 
undeployed [application] "
-                                + appTerminatingEvent.getAppId());
-                    }
-
-                } finally {
-                    TopologyManager.
-                            
releaseReadLockForApplication(appTerminatingEvent.getAppId());
-                }
-            }
-        });*/
-
-//        topologyEventReceiver.addEventListener(new 
ApplicationRemovedEventListener() {
+        topologyEventReceiver.addEventListener(new 
MemberReadyToShutdownEventListener() {
+               @Override
+               protected void onEvent(Event event) {
+                       try {
+                               MemberReadyToShutdownEvent 
memberReadyToShutdownEvent = (MemberReadyToShutdownEvent) event;
+                               String clusterId = 
memberReadyToShutdownEvent.getClusterId();
+                               AutoscalerContext asCtx = 
AutoscalerContext.getInstance();
+                               AbstractClusterMonitor monitor;
+                               monitor = asCtx.getClusterMonitor(clusterId);
+                               if (null == monitor) {
+                                       if (log.isDebugEnabled()) {
+                                               log.debug(String.format("A 
cluster monitor is not found in autoscaler context "
+                                                               + "[cluster] 
%s", clusterId));
+                                       }
+                                       return;
+                               }
+                               
monitor.handleMemberReadyToShutdownEvent(memberReadyToShutdownEvent);
+                       } catch (Exception e) {
+                               String msg = "Error processing event " + 
e.getLocalizedMessage();
+                               log.error(msg, e);
+                       }
+               }
+        });
+//TODO delete this if we don't want this
+//        topologyEventReceiver.addEventListener(new 
ClusterRemovedEventListener() {
 //            @Override
-//            protected void onChildEvent(Event event) {
+//            protected void onEvent(Event event) {
+//
+//                ClusterRemovedEvent clusterRemovedEvent = null;
+//                try {
+//                    clusterRemovedEvent = (ClusterRemovedEvent) event;
+//                    //TopologyManager.acquireReadLock();
+//                    
TopologyManager.acquireReadLockForCluster(clusterRemovedEvent.getServiceName(),
+//                            clusterRemovedEvent.getClusterId());
 //
-//                log.info("[ApplicationRemovedEvent] Received: " + 
event.getClass());
+//                    String clusterId = clusterRemovedEvent.getClusterId();
+//                    String deploymentPolicy = 
clusterRemovedEvent.getDeploymentPolicy();
 //
-//                ApplicationRemovedEvent applicationRemovedEvent = 
(ApplicationRemovedEvent) event;
+//                    AbstractClusterMonitor monitor;
 //
-//                //acquire read lock
-//                
TopologyManager.acquireReadLockForApplication(applicationRemovedEvent.getApplicationId());
-//                Set<ClusterDataHolder> clusterDataHolders = 
applicationRemovedEvent.getClusterData();
-//                if (clusterDataHolders != null) {
-//                    for (ClusterDataHolder clusterData : clusterDataHolders) 
{
-//                        
TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
-//                                clusterData.getClusterId());
-//                    }
-//                }
+//                    if (clusterRemovedEvent.isLbCluster()) {
+//                        DeploymentPolicy depPolicy = 
PolicyManager.getInstance().
+//                                getDeploymentPolicy(deploymentPolicy);
+//                        if (depPolicy != null) {
+//                            List<NetworkPartitionLbHolder> lbHolders = 
PartitionManager.getInstance()
+//                                    .getNetworkPartitionLbHolders(depPolicy);
 //
-//                try {
-//                    //TODO remove monitors as well as any starting or 
pending threads
-//                    ApplicationMonitor monitor = 
AutoscalerContext.getInstance().
-//                            
getAppMonitor(applicationRemovedEvent.getApplicationId());
-//                    if (monitor != null) {
-//                        //List<String> clusters = monitor.
-//                        //        
findClustersOfApplication(applicationRemovedEvent.getApplicationId());
-//                        for (ClusterDataHolder clusterData : 
clusterDataHolders) {
-//                            //stopping the cluster monitor and remove it 
from the AS
-//                            ((ClusterMonitor) 
AutoscalerContext.getInstance().getMonitor(clusterData.getClusterId())).
-//                                    setDestroyed(true);
-//                            
AutoscalerContext.getInstance().removeMonitor(clusterData.getClusterId());
+//                            for (NetworkPartitionLbHolder 
networkPartitionLbHolder : lbHolders) {
+//                                // removes lb cluster ids
+//                                boolean isRemoved = 
networkPartitionLbHolder.removeLbClusterId(clusterId);
+//                                if (isRemoved) {
+//                                    log.info("Removed the lb cluster [id]:"
+//                                            + clusterId
+//                                            + " reference from Network 
Partition [id]: "
+//                                            + networkPartitionLbHolder
+//                                            .getNetworkPartitionId());
+//
+//                                }
+//                                if (log.isDebugEnabled()) {
+//                                    log.debug(networkPartitionLbHolder);
+//                                }
+//
+//                            }
 //                        }
-//                        //removing the application monitor
-//                        AutoscalerContext.getInstance().
-//                                
removeAppMonitor(applicationRemovedEvent.getApplicationId());
+//                        monitor = AutoscalerContext.getInstance()
+//                                .removeLbMonitor(clusterId);
+//
 //                    } else {
-//                        log.warn("Application Monitor cannot be found for 
the removed [application] "
-//                                + 
applicationRemovedEvent.getApplicationId());
+//                        monitor = (AbstractClusterMonitor) 
AutoscalerContext.getInstance()
+//                                .removeMonitor(clusterId);
 //                    }
 //
-//
-//                } finally {
-//                    //release read lock
-//                    if (clusterDataHolders != null) {
-//                        for (ClusterDataHolder clusterData : 
clusterDataHolders) {
-//                            
TopologyManager.releaseReadLockForCluster(clusterData.getServiceType(),
-//                                    clusterData.getClusterId());
-//                        }
+//                    // runTerminateAllRule(monitor);
+//                    if (monitor != null) {
+//                        monitor.destroy();
+//                        log.info(String.format("Cluster monitor has been 
removed successfully: [cluster] %s ",
+//                                clusterId));
 //                    }
-//                    
TopologyManager.releaseReadLockForApplication(applicationRemovedEvent.getApplicationId());
+//                } catch (Exception e) {
+//                    log.error("Error processing event", e);
+//                } finally {
+//                    //TopologyManager.releaseReadLock();
+//                    
TopologyManager.releaseReadLockForCluster(clusterRemovedEvent.getServiceName(),
+//                            clusterRemovedEvent.getClusterId());
 //                }
-//
 //            }
+//
 //        });
 
-        /*topologyEventReceiver.addEventListener(new 
ApplicationTerminatedEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                log.info("[ApplicationTerminatedEvent] Received: " + 
event.getClass());
-
-                ApplicationTerminatedEvent applicationRemovedEvent = 
(ApplicationTerminatedEvent) event;
-
-                // no need to access the locks since the Topology is not 
accessed
-                //acquire read lock
-                
//TopologyManager.acquireReadLockForApplication(applicationRemovedEvent.getAppId());
-                Set<ClusterDataHolder> clusterDataHolders = 
applicationRemovedEvent.getClusterData();
-//                if (clusterDataHolders != null) {
-//                    for (ClusterDataHolder clusterData : clusterDataHolders) 
{
-//                        
TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
-//                                clusterData.getClusterId());
-//                    }
-//                }
-
-                try {
-                    //TODO remove monitors as well as any starting or pending 
threads
-                    ApplicationMonitor monitor = 
AutoscalerContext.getInstance().
-                            getAppMonitor(applicationRemovedEvent.getAppId());
-                    if (monitor != null) {
-                        //List<String> clusters = monitor.
-                        //        
findClustersOfApplication(applicationRemovedEvent.getApplicationId());
-                        for (ClusterDataHolder clusterData : 
clusterDataHolders) {
-                            //stopping the cluster monitor and remove it from 
the AS
-                            ClusterMonitor clusterMonitor = ((ClusterMonitor)
-                                    
AutoscalerContext.getInstance().getMonitor(clusterData.getClusterId()));
-                            if (clusterMonitor != null) {
-                                clusterMonitor.setDestroyed(true);
-                                
AutoscalerContext.getInstance().removeMonitor(clusterData.getClusterId());
-                            } else {
-                                log.warn("Cluster Monitor not found for [ 
cluster id ] " +
-                                        clusterData.getClusterId() + ", unable 
to remove");
-                            }
-                        }
-                        //removing the application monitor
-                        AutoscalerContext.getInstance().
-                                
removeAppMonitor(applicationRemovedEvent.getAppId());
-                    } else {
-                        log.warn("Application Monitor cannot be found for the 
terminated [application] "
-                                + applicationRemovedEvent.getAppId() + ", 
unable to remove");
-                    }
-
-
-                } finally {
-                    //release read lock
-//                    if (clusterDataHolders != null) {
-//                        for (ClusterDataHolder clusterData : 
clusterDataHolders) {
-//                            
TopologyManager.releaseReadLockForCluster(clusterData.getServiceType(),
-//                                    clusterData.getClusterId());
-//                        }
-//                    }
-//                    
TopologyManager.releaseReadLockForApplication(applicationRemovedEvent.getAppId());
-                }
-
-            }
-        });
-*/
-        topologyEventReceiver.addEventListener(new 
MemberReadyToShutdownEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-                try {
-                    MemberReadyToShutdownEvent memberReadyToShutdownEvent =
-                            (MemberReadyToShutdownEvent) event;
-                    AutoscalerContext asCtx = AutoscalerContext.getInstance();
-                    AbstractClusterMonitor monitor;
-                    String clusterId = 
memberReadyToShutdownEvent.getClusterId();
-                    String memberId = memberReadyToShutdownEvent.getMemberId();
-
-                    if (asCtx.monitorExist(clusterId)) {
-                        monitor = (AbstractClusterMonitor) 
asCtx.getMonitor(clusterId);
-                    } else if (asCtx.lbMonitorExist(clusterId)) {
-                        monitor = asCtx.getLBMonitor(clusterId);
-                    } else {
-                        if (log.isDebugEnabled()) {
-                            log.debug(String.format("A cluster monitor is not 
found " +
-                                    "in autoscaler context [cluster] %s", 
clusterId));
-                        }
-                        return;
-                    }
-
-                    NetworkPartitionContext nwPartitionCtxt;
-                    nwPartitionCtxt = monitor.getNetworkPartitionCtxt(
-                            
memberReadyToShutdownEvent.getNetworkPartitionId());
-
-                    // start a new member in the same Partition
-                    String partitionId = 
monitor.getPartitionOfMember(memberId);
-                    PartitionContext partitionCtxt = 
nwPartitionCtxt.getPartitionCtxt(partitionId);
-
-
-                    // terminate the shutdown ready member
-                    CloudControllerClient ccClient = 
CloudControllerClient.getInstance();
-                    ccClient.terminate(memberId);
-
-                    // remove from active member list
-                    partitionCtxt.removeActiveMemberById(memberId);
-
-                    if (log.isInfoEnabled()) {
-                        log.info(String.format("Member is terminated and 
removed from the active " +
-                                        "members list: [member] %s [partition] 
%s [cluster] %s ",
-                                memberId, partitionId, clusterId));
-                    }
-                } catch (TerminationException e) {
-                    log.error(e);
-                }
-            }
-
-        });
-
-        topologyEventReceiver.addEventListener(new 
ClusterRemovedEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                ClusterRemovedEvent clusterRemovedEvent = null;
-                try {
-                    clusterRemovedEvent = (ClusterRemovedEvent) event;
-                    //TopologyManager.acquireReadLock();
-                    
TopologyManager.acquireReadLockForCluster(clusterRemovedEvent.getServiceName(),
-                            clusterRemovedEvent.getClusterId());
-
-                    String clusterId = clusterRemovedEvent.getClusterId();
-                    String deploymentPolicy = 
clusterRemovedEvent.getDeploymentPolicy();
-
-                    AbstractClusterMonitor monitor;
-
-                    if (clusterRemovedEvent.isLbCluster()) {
-                        DeploymentPolicy depPolicy = 
PolicyManager.getInstance().
-                                getDeploymentPolicy(deploymentPolicy);
-                        if (depPolicy != null) {
-                            List<NetworkPartitionLbHolder> lbHolders = 
PartitionManager.getInstance()
-                                    .getNetworkPartitionLbHolders(depPolicy);
-
-                            for (NetworkPartitionLbHolder 
networkPartitionLbHolder : lbHolders) {
-                                // removes lb cluster ids
-                                boolean isRemoved = 
networkPartitionLbHolder.removeLbClusterId(clusterId);
-                                if (isRemoved) {
-                                    log.info("Removed the lb cluster [id]:"
-                                            + clusterId
-                                            + " reference from Network 
Partition [id]: "
-                                            + networkPartitionLbHolder
-                                            .getNetworkPartitionId());
-
-                                }
-                                if (log.isDebugEnabled()) {
-                                    log.debug(networkPartitionLbHolder);
-                                }
-
-                            }
-                        }
-                        monitor = AutoscalerContext.getInstance()
-                                .removeLbMonitor(clusterId);
-
-                    } else {
-                        monitor = (AbstractClusterMonitor) 
AutoscalerContext.getInstance()
-                                .removeMonitor(clusterId);
-                    }
-
-                    // runTerminateAllRule(monitor);
-                    if (monitor != null) {
-                        monitor.destroy();
-                        log.info(String.format("Cluster monitor has been 
removed successfully: [cluster] %s ",
-                                clusterId));
-                    }
-                } catch (Exception e) {
-                    log.error("Error processing event", e);
-                } finally {
-                    //TopologyManager.releaseReadLock();
-                    
TopologyManager.releaseReadLockForCluster(clusterRemovedEvent.getServiceName(),
-                            clusterRemovedEvent.getClusterId());
-                }
-            }
-
-        });
-
         topologyEventReceiver.addEventListener(new 
MemberStartedEventListener() {
             @Override
             protected void onEvent(Event event) {
@@ -866,176 +528,75 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
         });
 
         topologyEventReceiver.addEventListener(new 
MemberTerminatedEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                MemberTerminatedEvent memberTerminatedEvent = null;
-                try {
-                    //TopologyManager.acquireReadLock();
-
-                    memberTerminatedEvent = (MemberTerminatedEvent) event;
-                    String networkPartitionId = 
memberTerminatedEvent.getNetworkPartitionId();
-                    String clusterId = memberTerminatedEvent.getClusterId();
-                    String partitionId = 
memberTerminatedEvent.getPartitionId();
-                    AbstractClusterMonitor monitor;
-
-                    
TopologyManager.acquireReadLockForCluster(memberTerminatedEvent.getServiceName(),
-                            memberTerminatedEvent.getClusterId());
-
-                    if 
(AutoscalerContext.getInstance().monitorExist(clusterId)) {
-                        monitor = (AbstractClusterMonitor) 
AutoscalerContext.getInstance().getMonitor(clusterId);
-                    } else {
-                        //This is LB member
-                        monitor = 
AutoscalerContext.getInstance().getLBMonitor(clusterId);
-                    }
-
-                    NetworkPartitionContext networkPartitionContext = monitor.
-                            getNetworkPartitionCtxt(networkPartitionId);
-
-                    PartitionContext partitionContext = 
networkPartitionContext.
-                            getPartitionCtxt(partitionId);
-                    String memberId = memberTerminatedEvent.getMemberId();
-                    partitionContext.removeMemberStatsContext(memberId);
-
-
-                    if 
(partitionContext.removeTerminationPendingMember(memberId)) {
-                        if (log.isDebugEnabled()) {
-                            log.debug(String.format("Member is removed from 
termination pending " +
-                                    "members list: [member] %s", memberId));
-                        }
-                    } else if (partitionContext.removePendingMember(memberId)) 
{
-                        if (log.isDebugEnabled()) {
-                            log.debug(String.format("Member is removed from 
pending members list: " +
-                                    "[member] %s", memberId));
-                        }
-                    } else if 
(partitionContext.removeActiveMemberById(memberId)) {
-                        log.warn(String.format("Member is in the wrong list 
and it is removed " +
-                                "from active members list", memberId));
-                    } else {
-                        log.warn(String.format("Member is not available in any 
of the list " +
-                                "active, pending and termination pending", 
memberId));
-                    }
-
-                    if (log.isInfoEnabled()) {
-                        log.info(String.format("Member stat context has been 
removed " +
-                                "               successfully: [member] %s", 
memberId));
-                    }
-                    //Checking whether the cluster state can be changed either 
from in_active to created/terminating to terminated
-                    StatusChecker.getInstance().onMemberTermination(clusterId);
-
-//                partitionContext.decrementCurrentActiveMemberCount(1);
-
-
-                } catch (Exception e) {
-                    log.error("Error processing event", e);
-                } finally {
-                    //TopologyManager.releaseReadLock();
-                    
TopologyManager.releaseReadLockForCluster(memberTerminatedEvent.getServiceName(),
-                            memberTerminatedEvent.getClusterId());
-                }
-            }
-
+               @Override
+               protected void onEvent(Event event) {
+                       try {
+                               MemberTerminatedEvent memberTerminatedEvent = 
(MemberTerminatedEvent) event;
+                               String clusterId = 
memberTerminatedEvent.getClusterId();
+                               AbstractClusterMonitor monitor;
+                               AutoscalerContext asCtx = 
AutoscalerContext.getInstance();
+                               monitor = asCtx.getClusterMonitor(clusterId);
+                               if (null == monitor) {
+                                       if (log.isDebugEnabled()) {
+                                               log.debug(String.format("A 
cluster monitor is not found in autoscaler context "
+                                                               + "[cluster] 
%s", clusterId));
+                                       }
+                                       return;
+                               }
+                               
monitor.handleMemberTerminatedEvent(memberTerminatedEvent);
+                       } catch (Exception e) {
+                               String msg = "Error processing event " + 
e.getLocalizedMessage();
+                               log.error(msg, e);
+                       }
+               }
         });
 
         topologyEventReceiver.addEventListener(new 
MemberActivatedEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                MemberActivatedEvent memberActivatedEvent = 
(MemberActivatedEvent) event;
-
-                //TopologyManager.acquireReadLock();
-                
TopologyManager.acquireReadLockForCluster(memberActivatedEvent.getServiceName(),
-                        memberActivatedEvent.getClusterId());
-
-                try {
-
-                    String networkPartitionId = 
memberActivatedEvent.getNetworkPartitionId();
-                    String clusterId = memberActivatedEvent.getClusterId();
-                    String partitionId = memberActivatedEvent.getPartitionId();
-                    String memberId = memberActivatedEvent.getMemberId();
-
-                    AbstractClusterMonitor monitor;
-
-                    if 
(AutoscalerContext.getInstance().monitorExist(clusterId)) {
-                        monitor = (AbstractClusterMonitor) 
AutoscalerContext.getInstance().getMonitor(clusterId);
-                    } else {
-                        //This is LB member
-                        monitor = 
AutoscalerContext.getInstance().getLBMonitor(clusterId);
-                    }
-
-                    NetworkPartitionContext networkPartitionContext = monitor.
-                            getNetworkPartitionCtxt(networkPartitionId);
-
-                    PartitionContext partitionContext = 
networkPartitionContext.
-                            getPartitionCtxt(partitionId);
-
-                    partitionContext.addMemberStatsContext(new 
MemberStatsContext(memberId));
-                    // TODO starting the pending clusters which are waiting 
for this member activation in a cluster
-
-
-                    if (log.isInfoEnabled()) {
-                        log.info(String.format("Member stat context has been 
added " +
-                                "successfully: [member] %s", memberId));
-                    }
-//                partitionContext.incrementCurrentActiveMemberCount(1);
-                    
partitionContext.movePendingMemberToActiveMembers(memberId);
-                    //triggering the status checker
-                    
StatusChecker.getInstance().onMemberStatusChange(memberActivatedEvent.getClusterId());
-
-                } catch (Exception e) {
-                    log.error("Error processing event", e);
-                } finally {
-                    //TopologyManager.releaseReadLock();
-                    
TopologyManager.releaseReadLockForCluster(memberActivatedEvent.getServiceName(),
-                            memberActivatedEvent.getClusterId());
-                }
-            }
+               @Override
+               protected void onEvent(Event event) {
+                       try {
+                               MemberActivatedEvent memberActivatedEvent = 
(MemberActivatedEvent) event;
+                               String clusterId = 
memberActivatedEvent.getClusterId();
+                               AbstractClusterMonitor monitor;
+                               AutoscalerContext asCtx = 
AutoscalerContext.getInstance();
+                               monitor = asCtx.getClusterMonitor(clusterId);
+                               if (null == monitor) {
+                                       if (log.isDebugEnabled()) {
+                                               log.debug(String.format("A 
cluster monitor is not found in autoscaler context "
+                                                               + "[cluster] 
%s", clusterId));
+                                       }
+                                       return;
+                               }
+                               
monitor.handleMemberActivatedEvent(memberActivatedEvent);
+                       } catch (Exception e) {
+                               String msg = "Error processing event " + 
e.getLocalizedMessage();
+                               log.error(msg, e);
+                       }
+               }
         });
 
         topologyEventReceiver.addEventListener(new MemberMaintenanceListener() 
{
-            @Override
-            protected void onEvent(Event event) {
-
-                MemberMaintenanceModeEvent memberMaintenanceModeEvent = 
(MemberMaintenanceModeEvent) event;
-
-                //TopologyManager.acquireReadLock();
-                
TopologyManager.acquireReadLockForCluster(memberMaintenanceModeEvent.getServiceName(),
-                        memberMaintenanceModeEvent.getClusterId());
-
-                try {
-
-                    String memberId = memberMaintenanceModeEvent.getMemberId();
-                    String partitionId = 
memberMaintenanceModeEvent.getPartitionId();
-                    String networkPartitionId = 
memberMaintenanceModeEvent.getNetworkPartitionId();
-
-                    PartitionContext partitionContext;
-                    String clusterId = 
memberMaintenanceModeEvent.getClusterId();
-                    AbstractClusterMonitor monitor;
-
-                    if 
(AutoscalerContext.getInstance().monitorExist(clusterId)) {
-                        monitor = (AbstractClusterMonitor) 
AutoscalerContext.getInstance().getMonitor(clusterId);
-                        partitionContext = 
monitor.getNetworkPartitionCtxt(networkPartitionId).
-                                getPartitionCtxt(partitionId);
-                    } else {
-                        monitor = 
AutoscalerContext.getInstance().getLBMonitor(clusterId);
-                        partitionContext = 
monitor.getNetworkPartitionCtxt(networkPartitionId).
-                                getPartitionCtxt(partitionId);
-                    }
-                    partitionContext.addMemberStatsContext(new 
MemberStatsContext(memberId));
-                    if (log.isDebugEnabled()) {
-                        log.debug(String.format("Member has been moved as 
pending termination: " +
-                                "[member] %s", memberId));
-                    }
-                    
partitionContext.moveActiveMemberToTerminationPendingMembers(memberId);
-
-                } catch (Exception e) {
-                    log.error("Error processing event", e);
-                } finally {
-                    //TopologyManager.releaseReadLock();
-                    
TopologyManager.releaseReadLockForCluster(memberMaintenanceModeEvent.getServiceName(),
-                            memberMaintenanceModeEvent.getClusterId());
-                }
-            }
+               @Override
+               protected void onEvent(Event event) {
+                       try {
+                               MemberMaintenanceModeEvent maintenanceModeEvent 
= (MemberMaintenanceModeEvent) event;
+                               String clusterId = 
maintenanceModeEvent.getClusterId();
+                               AbstractClusterMonitor monitor;
+                               AutoscalerContext asCtx = 
AutoscalerContext.getInstance();
+                               monitor = asCtx.getClusterMonitor(clusterId);
+                               if (null == monitor) {
+                                       if (log.isDebugEnabled()) {
+                                               log.debug(String.format("A 
cluster monitor is not found in autoscaler context "
+                                                               + "[cluster] 
%s", clusterId));
+                                       }
+                                       return;
+                               }
+                               
monitor.handleMemberMaintenanceModeEvent(maintenanceModeEvent);
+                       } catch (Exception e) {
+                               String msg = "Error processing event " + 
e.getLocalizedMessage();
+                               log.error(msg, e);
+                       }
+               }
         });
     }
 
@@ -1061,29 +622,6 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
         terminated = true;
     }
 
-    protected synchronized void startClusterMonitor(Cluster cluster) {
-        Thread th = null;
-
-        AbstractClusterMonitor monitor;
-        monitor = 
AutoscalerContext.getInstance().getClusterMonitor(cluster.getClusterId());
-
-        if (null == monitor) {
-            th = new Thread(new ClusterMonitorAdder(cluster));
-        }
-        if (th != null) {
-            th.start();
-            try {
-                th.join();
-            } catch (InterruptedException ignore) {
-            }
-
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Cluster monitor thread has been 
started successfully: "
-                                        + "[cluster] %s ", 
cluster.getClusterId()));
-            }
-        }
-    }
-
     protected synchronized void startApplicationMonitor(String applicationId) {
         Thread th = null;
         if (!AutoscalerContext.getInstance().appMonitorExist(applicationId)) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
deleted file mode 100644
index fb23985..0000000
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
+++ /dev/null
@@ -1,277 +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.autoscaler.monitor;
-
-import org.apache.commons.configuration.XMLConfiguration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.NetworkPartitionContext;
-import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
-import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent;
-import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
-import org.apache.stratos.autoscaler.monitor.events.MonitorTerminateAllEvent;
-import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
-import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
-import org.apache.stratos.autoscaler.util.AutoScalerConstants;
-import org.apache.stratos.autoscaler.util.ConfUtil;
-import org.apache.stratos.messaging.domain.topology.*;
-import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
-import org.drools.runtime.StatefulKnowledgeSession;
-import org.drools.runtime.rule.FactHandle;
-
-import java.util.Map;
-
-/**
- * Is responsible for monitoring a service cluster. This runs periodically
- * and perform minimum instance check and scaling check using the underlying
- * rules engine.
- */
-abstract public class AbstractClusterMonitor extends Monitor implements 
Runnable {
-
-    private static final Log log = 
LogFactory.getLog(AbstractClusterMonitor.class);
-    // Map<NetworkpartitionId, Network Partition Context>
-    protected Map<String, NetworkPartitionContext> networkPartitionCtxts;
-    protected DeploymentPolicy deploymentPolicy;
-    protected AutoscalePolicy autoscalePolicy;
-
-
-    protected FactHandle minCheckFactHandle;
-    protected FactHandle scaleCheckFactHandle;
-    protected FactHandle terminateDependencyFactHandle;
-    protected FactHandle terminateAllFactHandle;
-
-    protected StatefulKnowledgeSession minCheckKnowledgeSession;
-    protected StatefulKnowledgeSession scaleCheckKnowledgeSession;
-    protected StatefulKnowledgeSession terminateAllKnowledgeSession;
-    protected boolean isDestroyed;
-
-    protected String clusterId;
-    protected String serviceId;
-    protected String appId;
-
-    protected boolean hasFaultyMember = false;
-
-    protected ClusterStatus status;
-
-    //protected ParentComponentMonitor parent;
-
-    protected AutoscalerRuleEvaluator autoscalerRuleEvaluator;
-
-    // time intereval between two runs of the Monitor. Default is 90000ms.
-    protected int monitorInterval;
-
-    public AbstractClusterMonitor() {
-        readConfigurations();
-        status = ClusterStatus.Created;
-    }
-
-    private void readConfigurations() {
-
-        XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration();
-        monitorInterval = 
conf.getInt(AutoScalerConstants.AUTOSCALER_MONITOR_INTERVAL, 90000);
-        if (log.isDebugEnabled()) {
-            log.debug("Cluster Monitor task interval: " + 
getMonitorInterval());
-        }
-    }
-
-    @Override
-    public void run() {
-        // TODO Auto-generated method stub
-    }
-
-
-    public NetworkPartitionContext getNetworkPartitionCtxt(Member member) {
-        log.info("***** getNetworkPartitionCtxt " + 
member.getNetworkPartitionId());
-        String networkPartitionId = member.getNetworkPartitionId();
-        if (networkPartitionCtxts.containsKey(networkPartitionId)) {
-            log.info("returnnig network partition context " + 
networkPartitionCtxts.get(networkPartitionId));
-            return networkPartitionCtxts.get(networkPartitionId);
-        }
-        log.info("returning null getNetworkPartitionCtxt");
-        return null;
-    }
-
-    public String getPartitionOfMember(String memberId) {
-        for (Service service : TopologyManager.getTopology().getServices()) {
-            for (Cluster cluster : service.getClusters()) {
-                if (cluster.memberExists(memberId)) {
-                    return cluster.getMember(memberId).getPartitionId();
-                }
-            }
-        }
-        return null;
-    }
-
-    public void destroy() {
-        minCheckKnowledgeSession.dispose();
-        scaleCheckKnowledgeSession.dispose();
-        terminateAllKnowledgeSession.dispose();
-        setDestroyed(true);
-        if (log.isDebugEnabled()) {
-            log.debug("Cluster Monitor Drools session has been disposed. " + 
this.toString());
-        }
-    }
-
-    public abstract void terminateAllMembers ();
-
-    public boolean isDestroyed() {
-        return isDestroyed;
-    }
-
-    public void setDestroyed(boolean isDestroyed) {
-        this.isDestroyed = isDestroyed;
-    }
-
-    public String getServiceId() {
-        return serviceId;
-    }
-
-    public void setServiceId(String serviceId) {
-        this.serviceId = serviceId;
-    }
-
-    public DeploymentPolicy getDeploymentPolicy() {
-        return deploymentPolicy;
-    }
-
-    public void setDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
-        this.deploymentPolicy = deploymentPolicy;
-    }
-
-    public AutoscalePolicy getAutoscalePolicy() {
-        return autoscalePolicy;
-    }
-
-    public void setAutoscalePolicy(AutoscalePolicy autoscalePolicy) {
-        this.autoscalePolicy = autoscalePolicy;
-    }
-
-    public String getClusterId() {
-        return clusterId;
-    }
-
-    public void setClusterId(String clusterId) {
-        this.clusterId = clusterId;
-    }
-
-    public String getAppId() {
-        return appId;
-    }
-
-    public void setAppId(String appId) {
-        this.appId = appId;
-    }
-
-    public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts() {
-        return networkPartitionCtxts;
-    }
-
-    public NetworkPartitionContext getNetworkPartitionCtxt(String 
networkPartitionId) {
-        return networkPartitionCtxts.get(networkPartitionId);
-    }
-
-    public void setPartitionCtxt(Map<String, NetworkPartitionContext> 
partitionCtxt) {
-        this.networkPartitionCtxts = partitionCtxt;
-    }
-
-    public boolean partitionCtxtAvailable(String partitionId) {
-        return networkPartitionCtxts.containsKey(partitionId);
-    }
-
-    public void addNetworkPartitionCtxt(NetworkPartitionContext ctxt) {
-        this.networkPartitionCtxts.put(ctxt.getId(), ctxt);
-    }
-
-    public NetworkPartitionContext getPartitionCtxt(String id) {
-        return this.networkPartitionCtxts.get(id);
-    }
-
-    public StatefulKnowledgeSession getMinCheckKnowledgeSession() {
-        return minCheckKnowledgeSession;
-    }
-
-    public void setMinCheckKnowledgeSession(StatefulKnowledgeSession 
minCheckKnowledgeSession) {
-        this.minCheckKnowledgeSession = minCheckKnowledgeSession;
-    }
-
-    public FactHandle getMinCheckFactHandle() {
-        return minCheckFactHandle;
-    }
-
-    public void setMinCheckFactHandle(FactHandle minCheckFactHandle) {
-        this.minCheckFactHandle = minCheckFactHandle;
-    }
-
-
-    public int getMonitorInterval() {
-        return monitorInterval;
-    }
-
-    public ClusterStatus getStatus() {
-        return status;
-    }
-
-    public void setStatus(ClusterStatus status) {
-
-        //if(this.status != status) {
-            this.status = status;
-            /**
-             * notifying the parent monitor about the state change
-             * If the cluster in_active and if it is a in_dependent cluster,
-             * then won't send the notification to parent.
-             */
-            if (status == ClusterStatus.Inactive && !this.hasDependent) {
-                log.info("[Cluster] " + clusterId + "is not notifying the 
parent, " +
-                        "since it is identified as the independent unit");
-
-            } else if (status == ClusterStatus.Terminating) {
-                // notify parent
-                log.info("[Cluster] " + clusterId + " is not notifying the 
parent, " +
-                        "since it is in Terminating State");
-
-            } else {
-                
MonitorStatusEventBuilder.handleClusterStatusEvent(this.parent, this.status, 
this.clusterId);
-            }
-        //}
-
-    }
-
-    @Override
-    public void onChildEvent(MonitorStatusEvent statusEvent) {
-
-    }
-
-    @Override
-    public void onEvent(MonitorTerminateAllEvent terminateAllEvent) {
-
-    }
-
-    @Override
-    public void onEvent(MonitorScalingEvent scalingEvent) {
-
-    }
-
-    public boolean isHasFaultyMember() {
-        return hasFaultyMember;
-    }
-
-    public void setHasFaultyMember(boolean hasFaultyMember) {
-        this.hasFaultyMember = hasFaultyMember;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
index 5938077..bd36091 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
@@ -31,6 +31,8 @@ import 
org.apache.stratos.autoscaler.applications.topic.ApplicationsEventPublish
 import 
org.apache.stratos.autoscaler.grouping.topic.ClusterStatusEventPublisher;
 import org.apache.stratos.autoscaler.status.checker.StatusChecker;
 import org.apache.stratos.messaging.domain.applications.ParentComponent;
+import 
org.apache.stratos.autoscaler.monitor.application.ApplicationMonitorFactory;
+import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
 
 import java.util.HashMap;
 import java.util.List;

http://git-wip-us.apache.org/repos/asf/stratos/blob/8b66cbac/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
index 7f3de58..66891d0 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
@@ -18,48 +18,32 @@
  */
 package org.apache.stratos.autoscaler.monitor.application;
 
+import java.util.Map;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.AutoscalerContext;
-import org.apache.stratos.autoscaler.MemberStatsContext;
-import org.apache.stratos.autoscaler.NetworkPartitionContext;
-import org.apache.stratos.autoscaler.PartitionContext;
-import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
-import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import 
org.apache.stratos.autoscaler.applications.dependency.context.ApplicationContext;
+import 
org.apache.stratos.autoscaler.applications.dependency.context.ClusterContext;
+import 
org.apache.stratos.autoscaler.applications.dependency.context.GroupContext;
 import org.apache.stratos.autoscaler.exception.DependencyBuilderException;
 import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.PolicyValidationException;
 import org.apache.stratos.autoscaler.exception.TopologyInConsistentException;
-import 
org.apache.stratos.autoscaler.applications.dependency.context.ApplicationContext;
-import 
org.apache.stratos.autoscaler.applications.dependency.context.ClusterContext;
-import 
org.apache.stratos.autoscaler.applications.dependency.context.GroupContext;
-import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor;
-import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor;
-import 
org.apache.stratos.autoscaler.grouping.dependency.context.ApplicationContext;
-import 
org.apache.stratos.autoscaler.grouping.dependency.context.ClusterContext;
-import org.apache.stratos.autoscaler.grouping.dependency.context.GroupContext;
 import org.apache.stratos.autoscaler.monitor.Monitor;
 import org.apache.stratos.autoscaler.monitor.ParentComponentMonitor;
 import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitorFactory;
 import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.group.GroupMonitor;
-import org.apache.stratos.autoscaler.partition.PartitionGroup;
-import org.apache.stratos.autoscaler.policy.PolicyManager;
-import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
-import org.apache.stratos.autoscaler.status.checker.StatusChecker;
-import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.cloud.controller.stub.pojo.Property;
 import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.Group;
-import org.apache.stratos.messaging.domain.topology.*;
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.domain.topology.Topology;
 import 
org.apache.stratos.messaging.message.receiver.applications.ApplicationManager;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
-import org.apache.stratos.messaging.util.Constants;
-
-import java.util.Map;
 
 /**
  * Factory class to get the Monitors.

Reply via email to