Merge branch '4.0.0-grouping' into docker-grouping-merge

Conflicts:
        components/org.apache.stratos.autoscaler/pom.xml
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/interfaces/AutoScalerServiceInterface.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitorFactory.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
        
components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
        
components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/internal/CloudControllerDSComponent.java
        
components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/payload/MetaDataHolder.java
        
components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
        
components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
        
components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/AutoscalerServiceClient.java
        
components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
        
components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/applications/ApplicationsEventMessageListener.java
        
components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/util/Constants.java
        
components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/bean/util/converter/PojoConverter.java
        
components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/services/ServiceUtils.java
        service-stubs/org.apache.stratos.autoscaler.service.stub/pom.xml
        
service-stubs/org.apache.stratos.autoscaler.service.stub/src/main/resources/AutoScalerService.wsdl
        service-stubs/org.apache.stratos.cloud.controller.service.stub/pom.xml
        
service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl


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

Branch: refs/heads/docker-grouping-merge
Commit: 89fb37afb2e80aabf1aa1d393e2185c34f7a1298
Parents: a61fc9d 14f5fe0
Author: Imesh Gunaratne <[email protected]>
Authored: Mon Nov 3 13:01:54 2014 +0530
Committer: Imesh Gunaratne <[email protected]>
Committed: Mon Nov 3 13:01:54 2014 +0530

----------------------------------------------------------------------
 .../org.apache.stratos.autoscaler/pom.xml       |    8 +
 .../apache/stratos/autoscaler/Constants.java    |   10 +-
 .../stratos/autoscaler/PartitionContext.java    |  106 +-
 .../autoscaler/api/AutoScalerServiceImpl.java   |  126 +-
 .../applications/ApplicationHolder.java         |  122 ++
 .../ApplicationSynchronizeTask.java             |   53 +
 .../ApplicationSynchronizerTaskScheduler.java   |   87 ++
 .../applications/ApplicationUtils.java          |  289 +++++
 .../applications/ClusterInformation.java        |   27 +
 .../applications/MTClusterInformation.java      |   47 +
 .../applications/STClusterInformation.java      |   57 +
 .../dependency/DependencyBuilder.java           |  156 +++
 .../applications/dependency/DependencyTree.java |  290 +++++
 .../dependency/context/ApplicationContext.java  |  113 ++
 .../context/ApplicationContextFactory.java      |  101 ++
 .../dependency/context/ClusterContext.java      |   38 +
 .../dependency/context/GroupContext.java        |   25 +
 .../applications/parser/ApplicationParser.java  |   53 +
 .../parser/DefaultApplicationParser.java        |  679 +++++++++++
 .../applications/parser/ParserUtils.java        |  142 +++
 .../ApplicationCartridgePayloadData.java        |   27 +
 .../applications/payload/BasicPayloadData.java  |  311 +++++
 .../payload/DataCartridgePayloadData.java       |   27 +
 .../payload/FrameworkCartridgePayloadData.java  |   27 +
 .../LoadBalancerCartridgePayloadData.java       |   27 +
 .../applications/payload/PayloadData.java       |   69 ++
 .../applications/payload/PayloadFactory.java    |   59 +
 .../pojo/ApplicationClusterContext.java         |  137 +++
 .../applications/pojo/ApplicationContext.java   |  112 ++
 .../applications/pojo/ComponentContext.java     |   58 +
 .../applications/pojo/DependencyContext.java    |   48 +
 .../applications/pojo/GroupContext.java         |   88 ++
 .../applications/pojo/SubscribableContext.java  |   47 +
 .../pojo/SubscribableInfoContext.java           |  107 ++
 .../applications/topic/ApplicationBuilder.java  |  664 +++++++++++
 .../topic/ApplicationsEventPublisher.java       |  251 ++++
 .../cloud/controller/CloudControllerClient.java |   78 +-
 .../ApplicationDefinitionException.java         |   48 +
 .../CartridgeInformationException.java          |   47 +
 .../exception/InvalidServiceGroupException.java |   46 +
 .../grouping/dependency/DependencyBuilder.java  |  158 ---
 .../grouping/dependency/DependencyTree.java     |  291 -----
 .../dependency/context/ApplicationContext.java  |  113 --
 .../context/ApplicationContextFactory.java      |  102 --
 .../dependency/context/ClusterContext.java      |   38 -
 .../dependency/context/GroupContext.java        |   25 -
 .../topic/ClusterStatusEventPublisher.java      |  195 +++
 .../grouping/topic/StatusEventPublisher.java    |  312 -----
 .../interfaces/AutoScalerServiceInterface.java  |   26 +-
 .../internal/AutoscalerServerComponent.java     |   37 +-
 .../AutoscalerTopologyEventReceiver.java        |  731 ++++++++----
 .../monitor/AbstractClusterMonitor.java         |  277 +++++
 .../monitor/MonitorStatusEventBuilder.java      |    4 +-
 .../monitor/ParentComponentMonitor.java         |  106 +-
 .../monitor/application/ApplicationMonitor.java |   24 +-
 .../application/ApplicationMonitorFactory.java  |   33 +-
 .../cluster/VMServiceClusterMonitor.java        |  147 ++-
 .../monitor/events/ApplicationStatusEvent.java  |    2 +-
 .../monitor/events/GroupStatusEvent.java        |    2 +-
 .../autoscaler/monitor/group/GroupMonitor.java  |   39 +-
 .../stratos/autoscaler/pojo/Dependencies.java   |   46 +
 .../stratos/autoscaler/pojo/ServiceGroup.java   |   67 ++
 .../autoscaler/registry/RegistryManager.java    |  150 ++-
 .../status/checker/StatusChecker.java           |  287 +++--
 .../autoscaler/util/AutoScalerConstants.java    |    5 +-
 .../stratos/autoscaler/util/AutoscalerUtil.java |  222 ++++
 .../stratos/autoscaler/util/Deserializer.java   |   10 +-
 .../autoscaler/util/ServiceReferenceHolder.java |   12 +-
 .../application/ApplicationUtils.java           |  291 -----
 .../application/ClusterInformation.java         |   27 -
 .../application/MTClusterInformation.java       |   45 -
 .../application/STClusterInformation.java       |   55 -
 .../parser/DefaultApplicationParser.java        |  619 ----------
 .../application/parser/ParserUtils.java         |  142 ---
 .../ApplicationCartridgePayloadData.java        |   27 -
 .../application/payload/BasicPayloadData.java   |  311 -----
 .../payload/DataCartridgePayloadData.java       |   27 -
 .../payload/FrameworkCartridgePayloadData.java  |   27 -
 .../LoadBalancerCartridgePayloadData.java       |   27 -
 .../application/payload/PayloadData.java        |   69 --
 .../application/payload/PayloadFactory.java     |   59 -
 .../ApplicationStatusTopicReceiver.java         |  175 ---
 .../receiver/ClusterStatusTopicReceiver.java    |  113 ++
 .../interfaces/ApplicationParser.java           |   53 -
 .../interfaces/CloudControllerService.java      |   17 -
 .../internal/CloudControllerDSComponent.java    |   12 +-
 .../pojo/application/ApplicationContext.java    |  112 --
 .../pojo/application/ComponentContext.java      |   58 -
 .../pojo/application/DependencyContext.java     |   48 -
 .../pojo/application/GroupContext.java          |   88 --
 .../pojo/application/SubscribableContext.java   |   47 -
 .../application/SubscribableInfoContext.java    |  107 --
 .../controller/pojo/payload/MetaDataHolder.java |    5 +-
 .../controller/topology/TopologyBuilder.java    |  483 ++------
 .../topology/TopologyEventPublisher.java        |   28 +
 .../CompositeApplicationParseTest.java          | 1108 +++++++++---------
 .../manager/client/AutoscalerServiceClient.java |   24 +
 .../client/CloudControllerServiceClient.java    |   16 -
 .../DefaultCompositeApplicationParser.java      |    6 +-
 .../definitions/DependencyDefinitions.java      |   10 +-
 .../deployer/DefaultServiceGroupDeployer.java   |   70 +-
 .../StratosManagerTopologyEventReceiver.java    |   21 +-
 .../domain/applications/Application.java        |  124 ++
 .../domain/applications/ApplicationStatus.java  |   74 ++
 .../domain/applications/Applications.java       |   73 ++
 .../domain/applications/ClusterDataHolder.java  |   50 +
 .../domain/applications/DependencyOrder.java    |   52 +
 .../messaging/domain/applications/Group.java    |  119 ++
 .../domain/applications/GroupStatus.java        |   73 ++
 .../domain/applications/ParentComponent.java    |  212 ++++
 .../domain/applications/StartupOrder.java       |   40 +
 .../applications/locking/ApplicationLock.java   |   59 +
 .../locking/ApplicationLockHierarchy.java       |   91 ++
 .../messaging/domain/topology/Application.java  |  123 --
 .../domain/topology/ApplicationStatus.java      |   74 --
 .../messaging/domain/topology/Cluster.java      |    6 +-
 .../domain/topology/ClusterDataHolder.java      |   51 -
 .../domain/topology/ClusterStatus.java          |    2 +-
 .../domain/topology/DependencyOrder.java        |   54 -
 .../messaging/domain/topology/Group.java        |  111 --
 .../messaging/domain/topology/GroupStatus.java  |   73 --
 .../domain/topology/ParentComponent.java        |  212 ----
 .../messaging/domain/topology/StartupOrder.java |   40 -
 .../messaging/domain/topology/Topology.java     |  112 +-
 .../topology/locking/TopologyLockHierarchy.java |   42 -
 .../AppStatusApplicationActivatedEvent.java     |   38 -
 .../AppStatusApplicationCreatedEvent.java       |   38 -
 .../AppStatusApplicationInactivatedEvent.java   |   38 -
 .../AppStatusApplicationTerminatedEvent.java    |   47 -
 .../AppStatusApplicationTerminatingEvent.java   |   38 -
 .../status/AppStatusClusterActivatedEvent.java  |   50 -
 .../status/AppStatusClusterInactivateEvent.java |   50 -
 .../AppStatusClusterMaintenanceModeEvent.java   |   49 -
 .../AppStatusClusterReadyToShutdownEvent.java   |   47 -
 .../status/AppStatusClusterTerminatedEvent.java |   50 -
 .../AppStatusClusterTerminatingEvent.java       |   50 -
 .../status/AppStatusGroupActivatedEvent.java    |   44 -
 .../status/AppStatusGroupInactivateEvent.java   |   44 -
 .../AppStatusGroupMaintenanceModeEvent.java     |   41 -
 .../AppStatusGroupReadyToShutdownEvent.java     |   40 -
 .../status/AppStatusGroupTerminatedEvent.java   |   44 -
 .../status/AppStatusGroupTerminatingEvent.java  |   44 -
 .../event/application/status/StatusEvent.java   |   31 -
 .../AppStatusGroupInactivateEvent.java          |   48 +
 .../applications/ApplicationActivatedEvent.java |   40 +
 .../applications/ApplicationCreatedEvent.java   |   41 +
 .../ApplicationInactivatedEvent.java            |   40 +
 .../ApplicationTerminatedEvent.java             |   48 +
 .../ApplicationTerminatingEvent.java            |   40 +
 .../applications/CompleteApplicationsEvent.java |   44 +
 .../event/applications/GroupActivatedEvent.java |   48 +
 .../applications/GroupMaintenanceModeEvent.java |   45 +
 .../applications/GroupReadyToShutdownEvent.java |   44 +
 .../event/applications/GroupResetEvent.java     |   48 +
 .../applications/GroupTerminatedEvent.java      |   48 +
 .../applications/GroupTerminatingEvent.java     |   48 +
 .../ClusterStatusClusterActivatedEvent.java     |   52 +
 .../ClusterStatusClusterCreatedEvent.java       |   85 ++
 .../ClusterStatusClusterInactivateEvent.java    |   52 +
 .../status/ClusterStatusClusterResetEvent.java  |   52 +
 .../ClusterStatusClusterTerminatedEvent.java    |   52 +
 .../ClusterStatusClusterTerminatingEvent.java   |   52 +
 .../event/topology/ApplicationCreatedEvent.java |    2 +-
 .../topology/ApplicationTerminatedEvent.java    |    2 +-
 .../topology/ApplicationUndeployedEvent.java    |    2 +-
 .../event/topology/ClusterCreatedEvent.java     |   26 +-
 .../event/topology/ClusterResetEvent.java       |   56 +
 .../event/topology/GroupCreatedEvent.java       |   43 +
 ...StatusApplicationActivatedEventListener.java |   27 -
 ...ppStatusApplicationCreatedEventListener.java |   27 -
 ...atusApplicationInactivatedEventListener.java |   27 -
 ...tatusApplicationTerminatedEventListener.java |   27 -
 ...atusApplicationTerminatingEventListener.java |   27 -
 .../AppStatusClusterActivatedEventListener.java |   24 -
 ...AppStatusClusterInactivateEventListener.java |   24 -
 ...AppStatusClusterTerminatedEventListener.java |   24 -
 ...ppStatusClusterTerminatingEventListener.java |   24 -
 .../AppStatusGroupActivatedEventListener.java   |   24 -
 .../AppStatusGroupInactivateEventListener.java  |   24 -
 .../AppStatusGroupTerminatedEventListener.java  |   24 -
 .../AppStatusGroupTerminatingEventListener.java |   24 -
 .../ApplicationActivatedEventListener.java      |   27 +
 .../ApplicationCreatedEventListener.java        |   27 +
 .../ApplicationInactivatedEventListener.java    |   27 +
 .../ApplicationTerminatedEventListener.java     |   27 +
 .../ApplicationTerminatingEventListener.java    |   27 +
 .../ApplicationUndeployedEventListener.java     |   26 +
 .../CompleteApplicationsEventListener.java      |   26 +
 .../GroupActivatedEventListener.java            |   24 +
 .../GroupInactivateEventListener.java           |   24 +
 .../applications/GroupResetEventListener.java   |   24 +
 .../GroupTerminatedEventListener.java           |   24 +
 .../GroupTerminatingEventListener.java          |   24 +
 ...sterStatusClusterActivatedEventListener.java |   24 +
 ...lusterStatusClusterCreatedEventListener.java |   24 +
 ...terStatusClusterInactivateEventListener.java |   24 +
 .../ClusterStatusClusterResetEventListener.java |   24 +
 ...terStatusClusterTerminatedEventListener.java |   24 +
 ...erStatusClusterTerminatingEventListener.java |   24 +
 .../ApplicationActivatedEventListener.java      |   27 -
 .../ApplicationCreatedEventListener.java        |   26 -
 .../ApplicationInActivateEventListener.java     |   27 -
 .../ApplicationTerminatedEventListener.java     |   27 -
 .../ApplicationTerminatingEventListener.java    |   27 -
 .../ApplicationUndeployedEventListener.java     |   26 -
 .../topology/ClusterResetEventListener.java     |   24 +
 .../topology/GroupActivatedEventListener.java   |   27 -
 .../topology/GroupInActivateEventListener.java  |   27 -
 .../topology/GroupTerminatedEventListener.java  |   27 -
 .../topology/GroupTerminatingEventListener.java |   27 -
 ...tusApplicationActivatedMessageProcessor.java |   62 -
 ...tatusApplicationCreatedMessageProcessor.java |   63 -
 ...sApplicationInactivatedMessageProcessor.java |   63 -
 ...usApplicationTerminatedMessageProcessor.java |   63 -
 ...sApplicationTerminatingMessageProcessor.java |   63 -
 ...pStatusClusterActivatedMessageProcessor.java |   57 -
 ...StatusClusterInactivateMessageProcessor.java |   58 -
 ...StatusClusterTerminatedMessageProcessor.java |   58 -
 ...tatusClusterTerminatingMessageProcessor.java |   58 -
 ...AppStatusGroupActivatedMessageProcessor.java |   61 -
 ...pStatusGroupInactivatedMessageProcessor.java |   61 -
 ...ppStatusGroupTerminatedMessageProcessor.java |   61 -
 ...pStatusGroupTerminatingMessageProcessor.java |   61 -
 .../status/AppStatusMessageProcessorChain.java  |  126 --
 .../ApplicationActivatedMessageProcessor.java   |  104 ++
 .../ApplicationCreatedMessageProcessor.java     |  101 ++
 .../ApplicationInactivatedMessageProcessor.java |  104 ++
 .../ApplicationTerminatedMessageProcessor.java  |  138 +++
 .../ApplicationTerminatingMessageProcessor.java |  104 ++
 .../ApplicationUndeployedMessageProcessor.java  |  141 +++
 .../ApplicationsMessageProcessorChain.java      |  115 ++
 .../CompleteApplicationsMessageProcessor.java   |   98 ++
 .../applications/GroupActivatedProcessor.java   |  107 ++
 .../applications/GroupInActivateProcessor.java  |  106 ++
 .../applications/GroupResetProcessor.java       |  108 ++
 .../applications/GroupTerminatedProcessor.java  |  107 ++
 .../applications/GroupTerminatingProcessor.java |  107 ++
 .../updater/ApplicationsUpdater.java            |  138 +++
 ...rStatusClusterActivatedMessageProcessor.java |   58 +
 ...terStatusClusterCreatedMessageProcessor.java |   58 +
 ...StatusClusterInactivateMessageProcessor.java |   58 +
 ...usterStatusClusterResetMessageProcessor.java |   58 +
 ...StatusClusterTerminatedMessageProcessor.java |   58 +
 ...tatusClusterTerminatingMessageProcessor.java |   58 +
 .../ClusterStatusMessageProcessorChain.java     |   84 ++
 .../ApplicationActivatedMessageProcessor.java   |  104 --
 .../ApplicationCreatedMessageProcessor.java     |  121 --
 .../ApplicationInactivatedMessageProcessor.java |  104 --
 .../ApplicationTerminatedMessageProcessor.java  |  136 ---
 .../ApplicationTerminatingMessageProcessor.java |  104 --
 .../ApplicationUndeployedMessageProcessor.java  |  136 ---
 .../ClusterCreatedMessageProcessor.java         |   36 +-
 .../topology/ClusterResetMessageProcessor.java  |  146 +++
 .../CompleteTopologyMessageProcessor.java       |   16 +-
 .../topology/GroupActivatedProcessor.java       |  104 --
 .../topology/GroupInActivateProcessor.java      |  107 --
 .../topology/GroupTerminatedProcessor.java      |  107 --
 .../topology/GroupTerminatingProcessor.java     |  107 --
 .../topology/TopologyMessageProcessorChain.java |   69 +-
 .../topology/updater/TopologyUpdater.java       |   68 +-
 .../ApplicationStatusEventMessageDelegator.java |  146 ---
 .../ApplicationStatusEventMessageListener.java  |   74 --
 .../ApplicationStatusEventMessageQueue.java     |   26 -
 .../status/ApplicationStatusEventReceiver.java  |   83 --
 .../applications/ApplicationManager.java        |  119 ++
 .../ApplicationsEventMessageDelegator.java      |  146 +++
 .../ApplicationsEventMessageListener.java       |   74 ++
 .../ApplicationsEventMessageQueue.java          |   26 +
 .../applications/ApplicationsEventReceiver.java |   83 ++
 .../ClusterStatusEventMessageDelegator.java     |  146 +++
 .../ClusterStatusEventMessageListener.java      |   54 +
 .../status/ClusterStatusEventMessageQueue.java  |   26 +
 .../status/ClusterStatusEventReceiver.java      |   83 ++
 .../receiver/topology/TopologyManager.java      |   67 +-
 .../topology/locking/TopologyLockingTest.java   |    6 +-
 .../bean/util/converter/PojoConverter.java      |   16 +-
 .../rest/endpoint/services/ServiceUtils.java    |   35 +-
 .../webapp/stratos/WEB-INF/schemas/schema.xsd   |    2 +-
 278 files changed, 13054 insertions(+), 9921 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/pom.xml
----------------------------------------------------------------------
diff --cc components/org.apache.stratos.autoscaler/pom.xml
index 6fcd1f0,5ba1eba..27ef199
--- a/components/org.apache.stratos.autoscaler/pom.xml
+++ b/components/org.apache.stratos.autoscaler/pom.xml
@@@ -149,14 -150,9 +150,15 @@@
                        <groupId>org.apache.stratos</groupId>
                        <artifactId>org.apache.stratos.messaging</artifactId>
                        <version>${project.version}</version>
+                       <scope>provided</scope>
                </dependency>
          <dependency>
 +            <groupId>org.apache.stratos</groupId>
 +            <artifactId>org.apache.stratos.common</artifactId>
 +            <version>${project.version}</version>
 +            <scope>provided</scope>
 +        </dependency>
 +        <dependency>
              <groupId>org.wso2.carbon</groupId>
              <artifactId>org.wso2.carbon.utils</artifactId>
              <version>4.2.0</version>

http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
index 520cf86,467bbc2..b008ec4
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
@@@ -26,26 -26,11 +26,26 @@@ import org.apache.stratos.cloud.control
  import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
  
  import java.io.Serializable;
 +import java.util.ArrayList;
 +import java.util.HashSet;
 +import java.util.Iterator;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Map.Entry;
 +import java.util.Properties;
 +import java.util.Set;
+ import java.util.*;
  import java.util.concurrent.ConcurrentHashMap;
  import java.util.concurrent.CopyOnWriteArrayList;
  
 +import org.apache.commons.configuration.XMLConfiguration;
 +import org.apache.commons.logging.Log;
 +import org.apache.commons.logging.LogFactory;
 +import org.apache.stratos.autoscaler.util.ConfUtil;
 +import 
org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
 +import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
 +import org.apache.stratos.common.constants.StratosConstants;
  
- 
  /**
   * This is an object that inserted to the rules engine.
   * Holds information about a partition.

http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index 3066034,4938b4c..fda23ca
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@@ -18,26 -18,29 +18,36 @@@
   */
  package org.apache.stratos.autoscaler.api;
  
+ import org.apache.commons.lang.StringUtils;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
 +import org.apache.stratos.autoscaler.AutoscalerContext;
  import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
+ import org.apache.stratos.autoscaler.applications.parser.ApplicationParser;
+ import 
org.apache.stratos.autoscaler.applications.parser.DefaultApplicationParser;
+ import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
+ import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
  import 
org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
  import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
  import org.apache.stratos.autoscaler.exception.*;
  import org.apache.stratos.autoscaler.interfaces.AutoScalerServiceInterface;
 +import org.apache.stratos.autoscaler.kubernetes.KubernetesManager;
 +import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
  import org.apache.stratos.autoscaler.partition.PartitionGroup;
  import org.apache.stratos.autoscaler.partition.PartitionManager;
+ import org.apache.stratos.autoscaler.pojo.Dependencies;
+ import org.apache.stratos.autoscaler.pojo.ServiceGroup;
  import org.apache.stratos.autoscaler.policy.PolicyManager;
  import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
+ import org.apache.stratos.autoscaler.registry.RegistryManager;
  import 
org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
 +import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 +import org.apache.stratos.common.kubernetes.KubernetesGroup;
 +import org.apache.stratos.common.kubernetes.KubernetesHost;
 +import org.apache.stratos.common.kubernetes.KubernetesMaster;
+ import org.apache.stratos.messaging.domain.applications.Application;
  
+ import java.text.MessageFormat;
  import java.util.ArrayList;
  
  /**
@@@ -271,8 -209,8 +281,25 @@@ public class AutoScalerServiceImpl impl
  
          return null;
      }
 -      
 -      public boolean checkServiceLBExistenceAgainstPolicy(String serviceName, 
String deploymentPolicyId) {
++    
++    @Override
++    public void deployApplicationDefinition(ApplicationContext 
applicationContext)
++            throws ApplicationDefinitionException {
++
++        ApplicationParser applicationParser = new DefaultApplicationParser();
++        Application application = applicationParser.parse(applicationContext);
++        ApplicationBuilder.handleApplicationCreated(application,
++                applicationParser.getApplicationClusterContexts());
++    }
 +
++    @Override
++    public void unDeployApplicationDefinition(String applicationId, int 
tenantId, String tenantDomain)
++            throws ApplicationDefinitionException {
++
++        ApplicationBuilder.handleApplicationUndeployed(applicationId);
++    }
++    
 +    public boolean checkServiceLBExistenceAgainstPolicy(String serviceName, 
String deploymentPolicyId) {
  
          for (PartitionGroup partitionGroup : 
PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId).getPartitionGroups())
 {
  
@@@ -314,42 -252,121 +341,117 @@@
  
          return null;
      }
--
-     public boolean checkClusterLBExistenceAgainstPolicy(String clusterId, 
String deploymentPolicyId) {
 -    @Override
 -    public void deployApplicationDefinition(ApplicationContext 
applicationContext)
 -            throws ApplicationDefinitionException {
 -
 -        ApplicationParser applicationParser = new DefaultApplicationParser();
 -        Application application = applicationParser.parse(applicationContext);
 -        ApplicationBuilder.handleApplicationCreated(application,
 -                applicationParser.getApplicationClusterContexts());
 -    }
 -
 -    @Override
 -    public void unDeployApplicationDefinition(String applicationId, int 
tenantId, String tenantDomain)
 -            throws ApplicationDefinitionException {
 -
 -        ApplicationBuilder.handleApplicationUndeployed(applicationId);
 -    }
 -
 -    public boolean checkClusterLBExistenceAgainstPolicy(String clusterId, 
String deploymentPolicyId) {
++      
++      public boolean checkClusterLBExistenceAgainstPolicy(String clusterId, 
String deploymentPolicyId) {
  
          for (PartitionGroup partitionGroup : 
PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId).getPartitionGroups())
 {
  
-             NetworkPartitionLbHolder nwPartitionLbHolder = 
partitionManager.getNetworkPartitionLbHolder(partitionGroup.getId());
+                         NetworkPartitionLbHolder nwPartitionLbHolder = 
partitionManager.getNetworkPartitionLbHolder(partitionGroup.getId());
  
-             if (!nwPartitionLbHolder.isClusterLBExist(clusterId)) {
-                 if (log.isDebugEnabled()) {
-                     log.debug("Cluster LB [cluster id] " + clusterId + " does 
not exist in [network partition] " +
-                             nwPartitionLbHolder.getNetworkPartitionId() + " 
of [Deployment Policy] " +
-                             deploymentPolicyId);
+                 if (!nwPartitionLbHolder.isClusterLBExist(clusterId)) {
+                     if (log.isDebugEnabled()) {
+                         log.debug("Cluster LB [cluster id] "+clusterId+" does 
not exist in [network partition] " +
+                                   nwPartitionLbHolder.getNetworkPartitionId() 
+ " of [Deployment Policy] " +
+                                   deploymentPolicyId);
  
+                     }
+                     return false;
                  }
-                 return false;
-             }
  
          }
- 
+         
          return true;
- 
+         
      }
  
 +    public void updateClusterMonitor(String clusterId, Properties properties) 
throws InvalidArgumentException {
 +        if (log.isDebugEnabled()) {
 +            log.debug(String.format("Updating Cluster monitor [Cluster id] %s 
", clusterId));
 +        }
 +        AutoscalerContext asCtx = AutoscalerContext.getInstance();
 +        AbstractClusterMonitor monitor = asCtx.getClusterMonitor(clusterId);
 +        
 +        if (monitor != null) {
 +            monitor.handleDynamicUpdates(properties);
 +        } else {
 +            log.debug(String.format("Updating Cluster monitor failed: Cluster 
monitor [Cluster id] %s not found.", 
 +                    clusterId));
 +        }
 +    }
++    
+     public void deployServiceGroup(ServiceGroup servicegroup) throws 
InvalidServiceGroupException {
+ 
+         if (servicegroup == null || 
StringUtils.isEmpty(servicegroup.getName())) {
+             String msg = "Service group can not be null service name can not 
be empty.";
+             log.error(msg);
+             throw new IllegalArgumentException(msg);
+ 
+         }
+         String name = servicegroup.getName();
+ 
+         if(RegistryManager.getInstance().serviceGroupExist(name)){
+             throw new InvalidServiceGroupException("Service group with the 
name " + name + " already exist.");
+         }
+ 
+         if(log.isDebugEnabled()) {
+             log.debug(MessageFormat.format("Deploying service group {0}", 
servicegroup.getName()));
+         }
+ 
+         String [] subGroups = servicegroup.getCartridges();
+ 
+         if(log.isDebugEnabled()) {
+             log.debug("SubGroups" + subGroups);
+             if (subGroups != null) {
+                 log.debug("subGroups:size" + subGroups.length);
+             } else {
+                 log.debug("subGroups: are null");
+             }
+         }
+ 
+ 
+         Dependencies dependencies = servicegroup.getDependencies();
+ 
+         if(log.isDebugEnabled()) {
+             log.debug("Dependencies" + dependencies);
+         }
+ 
+         if (dependencies != null) {
+             String [] startupOrders = dependencies.getStartupOrders();
+ 
+             if(log.isDebugEnabled()) {
+                 log.debug("StartupOrders" + startupOrders);
+ 
+                 if (startupOrders != null) {
+                     log.debug("StartupOrder:size" + startupOrders.length);
+                 } else {
+                     log.debug("StartupOrder: is null");
+                 }
+             }
+         }
+ 
+         RegistryManager.getInstance().persistServiceGroup(servicegroup);
+     }
+ 
+     public ServiceGroup getServiceGroup(String name) {
+         if(StringUtils.isEmpty(name)){
+             return null;
+         }
+         try {
+             return RegistryManager.getInstance().getServiceGroup(name);
+         } catch (Exception e) {
+             throw new AutoScalerException("Error occurred while retrieving 
service groups", e);
+         }
+     }
+     public boolean serviceGroupExist(String serviceName){
+         return false;
+     }
  
+     public void undeployServiceGroup(String name) throws AutoScalerException {
+         try {
+             RegistryManager.getInstance().removeServiceGroup(name);
+         } catch (Exception e) {
+             throw new AutoScalerException("Error occurred while removing the 
service groups", e);
+         }
+ 
+     }
 -
 -
  }

http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/parser/DefaultApplicationParser.java
index 0000000,fa31385..16a14de
mode 000000,100644..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
@@@ -1,0 -1,655 +1,679 @@@
+ /*
+  * 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.applications.parser;
++package org.apache.stratos.cloud.controller.application.parser;
+ 
+ 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.MTClusterInformation;
+ import org.apache.stratos.autoscaler.applications.STClusterInformation;
+ import org.apache.stratos.autoscaler.applications.pojo.*;
+ 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.
+  */
+ public class DefaultApplicationParser implements ApplicationParser {
+ 
+     private static Log log = 
LogFactory.getLog(DefaultApplicationParser.class);
+ 
+     private Set<ApplicationClusterContext> applicationClusterContexts;
+ 
+     public DefaultApplicationParser () {
+ 
+         this.applicationClusterContexts = new 
HashSet<ApplicationClusterContext>();
+     }
+ 
+     @Override
+     public Application parse(Object obj) throws 
ApplicationDefinitionException {
+ 
+         ApplicationContext applicationCtxt = (ApplicationContext) obj;
+ 
+         if (applicationCtxt == null) {
+             handleError("Invalid Composite Application Definition");
+         }
+ 
+         assert applicationCtxt != null;
+         if (applicationCtxt.getAlias() == null || 
applicationCtxt.getAlias().isEmpty()) {
+             handleError("Invalid alias specified");
+         }
+ 
+         if (applicationCtxt.getApplicationId() == null || 
applicationCtxt.getApplicationId().isEmpty()) {
+             handleError("Invalid Composite App id specified");
+         }
+ 
+         // get the defined groups
+         Map<String, GroupContext> definedGroups = 
getDefinedGroups(applicationCtxt);
+         if (log.isDebugEnabled()) {
+             if (definedGroups != null) {
+                 Set<Map.Entry<String, GroupContext>> groupEntries = 
definedGroups.entrySet();
+                 log.debug("Defined Groups: [ ");
+                 for (Map.Entry<String, GroupContext> groupEntry : 
groupEntries) {
+                     log.debug("Group alias: " + groupEntry.getKey());
+                 }
+                 log.debug(" ]");
+             } else {
+                 log.debug("No Group definitions found in app id " + 
applicationCtxt.getApplicationId());
+             }
+         }
+ 
+         // get the Subscribables Information
+         Map<String, SubscribableInfoContext> subscribablesInfo = 
getSubscribableInformation(applicationCtxt);
+         if (log.isDebugEnabled()) {
+             Set<Map.Entry<String, SubscribableInfoContext>> 
subscribableInfoCtxtEntries = subscribablesInfo.entrySet();
+             log.debug("Defined Subscribable Information: [ ");
+             for (Map.Entry<String, SubscribableInfoContext> 
subscribableInfoCtxtEntry : subscribableInfoCtxtEntries) {
+                 log.debug("Subscribable Information alias: " + 
subscribableInfoCtxtEntry.getKey());
+             }
+             log.debug(" ]");
+         }
+ 
+         if (subscribablesInfo == null) {
+             handleError("Invalid Composite Application Definition, no 
Subscribable Information specified");
+         }
+ 
+         return buildCompositeAppStructure (applicationCtxt, definedGroups, 
subscribablesInfo);
+     }
+ 
+     @Override
+     public Set<ApplicationClusterContext> getApplicationClusterContexts() 
throws ApplicationDefinitionException {
+         return applicationClusterContexts;
+     }
+ 
++    @Override
++    public Set<MetaDataHolder> getPayloadData() throws 
ApplicationDefinitionException {
++        return metaDataHolders;
++    }
++
+     /**
+      * Extract Group information from Application Definition
+      *
+      * @param appCtxt ApplicationContext object with Application information
+      * @return Map [group alias -> Group]
+      *
+      * @throws ApplicationDefinitionException if the Group information is 
invalid
+      */
+     private Map<String, GroupContext> getDefinedGroups (ApplicationContext 
appCtxt) throws
+             ApplicationDefinitionException {
+ 
+         // map [group alias -> Group Definition]
+         Map<String, GroupContext> definedGroups = null;
+ 
+         if (appCtxt.getComponents() != null) {
+             if (appCtxt.getComponents().getGroupContexts() != null) {
+                 definedGroups = new HashMap<String, GroupContext>();
+ 
+                 for (GroupContext groupContext : 
appCtxt.getComponents().getGroupContexts()) {
+ 
+                     // check validity of group name
+                     if (StringUtils.isEmpty(groupContext.getName())) {
+                         handleError("Invalid Group name specified");
+                     }
+ 
+                     // check if group is deployed
+                     if(!isGroupDeployed(groupContext.getName())) {
+                         handleError("Group with name " + 
groupContext.getName() + " not deployed");
+                     }
+ 
+                     // check validity of group alias
+ 
+                     if (StringUtils.isEmpty(groupContext.getAlias()) || 
!ApplicationUtils.isAliasValid(groupContext.getAlias())) {
+                         handleError("Invalid Group alias specified: [ " + 
groupContext.getAlias() + " ]");
+                     }
+ 
+                     // check if a group is already defined under the same 
alias
+                     if(definedGroups.get(groupContext.getAlias()) != null) {
+                         // a group with same alias already exists, can't 
continue
+                         handleError("A Group with alias " + 
groupContext.getAlias() + " already exists");
+                     }
+ 
+                     definedGroups.put(groupContext.getAlias(), groupContext);
+                     if (log.isDebugEnabled()) {
+                         log.debug("Added Group Definition [ " + 
groupContext.getName() +" , " + groupContext.getAlias() + " ] to map [group 
alias -> Group Definition]");
+                     }
+                 }
+             }
+         }
+ 
+         return definedGroups;
+     }
+ 
+     /**
+      * Extract Subscription Information from the Application Definition
+      *
+      * @param appCtxt ApplicationContext object with Application information
+      * @return Map [cartridge alias -> Group]
+      *
+      * @throws ApplicationDefinitionException if the Subscription information 
is invalid
+      */
+     private Map<String, SubscribableInfoContext> getSubscribableInformation 
(ApplicationContext appCtxt) throws
+             ApplicationDefinitionException {
+ 
+         // map [cartridge alias -> Subscribable Information]
+         Map<String, SubscribableInfoContext> subscribableInformation = null;
+ 
+         if (appCtxt.getSubscribableInfoContext() != null) {
+             subscribableInformation = new HashMap<String, 
SubscribableInfoContext>();
+ 
+             for (SubscribableInfoContext subscribableInfoCtxt : 
appCtxt.getSubscribableInfoContext()) {
+ 
+                 if (StringUtils.isEmpty(subscribableInfoCtxt.getAlias()) ||
+                         
!ApplicationUtils.isAliasValid(subscribableInfoCtxt.getAlias())) {
+                     handleError("Invalid alias specified for Subscribable 
Information Obj: [ " + subscribableInfoCtxt.getAlias() + " ]");
+                 }
+ 
+                 // check if a group is already defined under the same alias
+                 
if(subscribableInformation.get(subscribableInfoCtxt.getAlias()) != null) {
+                     // a group with same alias already exists, can't continue
+                     handleError("A Subscribable Info obj with alias " + 
subscribableInfoCtxt.getAlias() + " already exists");
+                 }
+ 
+                 subscribableInformation.put(subscribableInfoCtxt.getAlias(), 
subscribableInfoCtxt);
+                 if (log.isDebugEnabled()) {
+                     log.debug("Added Subcribables Info obj [ " + 
subscribableInfoCtxt.getAlias() + " ] to map [cartridge alias -> Subscribable 
Information]");
+                 }
+             }
+         }
+ 
+         return subscribableInformation;
+     }
+ 
+     /**
+      * Check if a Group Definition is deployed
+      *
+      * @param serviceGroupName Group name
+      * @return true if the Group is deployed, else false
+      *
+      * @throws ApplicationDefinitionException
+      */
+     private boolean isGroupDeployed (String serviceGroupName) throws 
ApplicationDefinitionException {
+ 
+         try {
+             return 
RegistryManager.getInstance().getServiceGroup(serviceGroupName) != null;
+         } catch (Exception e) {
+             String errorMsg = "Error in checking if Service Group Definition 
[ " + serviceGroupName
+                     + " ] already exists";
+             log.error(errorMsg, e);
+             throw new ApplicationDefinitionException(errorMsg, e);
+         }
+     }
+ 
+     /**
+      * Builds the Application structure
+      *
+      * @param appCtxt ApplicationContext object with Application information
+      * @param definedGroupCtxts Map [cartridge alias -> Group] with extracted 
Group Information
+      * @param subscribableInfoCtxts Map [cartridge alias -> Group] with 
extracted Subscription Information
+      * @return Application Application object denoting the Application 
structure
+      *
+      * @throws ApplicationDefinitionException If an error occurs in building 
the Application structure
+      */
+     private Application buildCompositeAppStructure (ApplicationContext 
appCtxt,
+                                                             Map<String, 
GroupContext> definedGroupCtxts,
+                                                             Map<String, 
SubscribableInfoContext> subscribableInfoCtxts)
+             throws ApplicationDefinitionException {
+ 
+         Application application = new Application(appCtxt.getApplicationId());
+ 
+         // set tenant related information
+         application.setTenantId(appCtxt.getTenantId());
+         application.setTenantDomain(appCtxt.getTenantDomain());
+         application.setTenantAdminUserName(appCtxt.getTeantAdminUsername());
+ 
+         // following keeps track of all Clusters created for this application
+         //Set<Cluster> clusters = new HashSet<Cluster>();
+         //ClusterDataHolder clusterDataHolder = null;
+         Map<String, ClusterDataHolder> clusterDataMap;
+ 
+         if (appCtxt.getComponents() != null) {
+             // get top level Subscribables
+             if (appCtxt.getComponents().getSubscribableContexts() != null) {
+                 clusterDataMap = 
parseLeafLevelSubscriptions(appCtxt.getApplicationId(), appCtxt.getTenantId(),
+                         application.getKey(), null, 
Arrays.asList(appCtxt.getComponents().getSubscribableContexts()),
 -                        subscribableInfoCtxts);
++                        subscribableInfoCtxts, appCtxt.getProperties());
+                 application.setClusterData(clusterDataMap);
+                 
//clusters.addAll(clusterDataHolder.getApplicationClusterContexts());
+             }
+ 
+             // get Groups
+             if (appCtxt.getComponents().getGroupContexts() != null) {
+                 application.setGroups(parseGroups(appCtxt.getApplicationId(), 
appCtxt.getTenantId(),
+                         application.getKey(), 
Arrays.asList(appCtxt.getComponents().getGroupContexts()),
 -                        subscribableInfoCtxts, definedGroupCtxts));
++                        subscribableInfoCtxts, definedGroupCtxts, 
appCtxt.getProperties()));
+             }
+ 
+             // get top level Dependency definitions
+             if (appCtxt.getComponents().getDependencyContext() != null) {
+                 DependencyOrder appDependencyOrder = new DependencyOrder();
+                 String [] startupOrders = 
appCtxt.getComponents().getDependencyContext().getStartupOrdersContexts();
+                 if (startupOrders != null) {
+                       if (log.isDebugEnabled()) {
+                       log.debug("parsing application ... 
buildCompositeAppStructure: startupOrders != null for app alias: " + 
+                                               appCtxt.getAlias() + " #: " + 
startupOrders.length);
+                     }
+                     
appDependencyOrder.setStartupOrders(ParserUtils.convert(startupOrders));
+                 } else {
+                       if (log.isDebugEnabled()) {
+                       log.debug("parsing application ... 
buildCompositeAppStructure: startupOrders == null for app alias: " + 
appCtxt.getAlias());
+                     }
+                 }
+                 String terminationBehavior = 
appCtxt.getComponents().getDependencyContext().getTerminationBehaviour();
+                 validateTerminationBehavior(terminationBehavior);
+                 
appDependencyOrder.setTerminationBehaviour(terminationBehavior);
+ 
+                 application.setDependencyOrder(appDependencyOrder);
+             }
+         }
+ 
+         log.info("Application with id " + appCtxt.getApplicationId() + " 
parsed successfully");
+ 
+         return application;
+     }
+ 
+     /**
+      * Validates terminationBehavior. The terminationBehavior should be one 
of the following:
+      *      1. terminate-none
+      *      2. terminate-dependents
+      *      3. terminate-all
+      *
+      * @throws ApplicationDefinitionException if terminationBehavior is 
different to what is
+      * listed above
+      */
+     private static void validateTerminationBehavior (String 
terminationBehavior) throws ApplicationDefinitionException {
+ 
+         if (!(terminationBehavior == null || 
"terminate-none".equals(terminationBehavior) ||
+                 "terminate-dependents".equals(terminationBehavior) || 
"terminate-all".equals(terminationBehavior))) {
+             throw new ApplicationDefinitionException("Invalid Termination 
Behaviour specified: [ " +
+                     terminationBehavior + " ], should be one of 
'terminate-none', 'terminate-dependents', " +
+                     " 'terminate-all' ");
+         }
+     }
+ 
+     /**
+      * Parse Group information
+      *
+      * @param appId Application id
+      * @param tenantId tenant id of tenant which deployed the Application
+      * @param key Generated key for the Application
+      * @param groupCtxts  Group information
+      * @param subscribableInformation Subscribable Information
+      * @param definedGroupCtxts Map [group alias -> Group] with extracted 
Group Information
+      * @return Map [alias -> Group]
+      *
+      * @throws ApplicationDefinitionException if an error occurs in parsing 
Group Information
+      */
+     private Map<String, Group> parseGroups (String appId, int tenantId, 
String key, List<GroupContext> groupCtxts,
+                                            Map<String, 
SubscribableInfoContext> subscribableInformation,
 -                                           Map<String, GroupContext> 
definedGroupCtxts)
++                                           Map<String, GroupContext> 
definedGroupCtxts, Properties properties)
+             throws ApplicationDefinitionException {
+ 
+         Map<String, Group> groupAliasToGroup = new HashMap<String, Group>();
+ 
+         for (GroupContext groupCtxt : groupCtxts) {
 -            Group group = parseGroup(appId, tenantId, key, groupCtxt, 
subscribableInformation, definedGroupCtxts);
++            Group group = parseGroup(appId, tenantId, key, groupCtxt, 
subscribableInformation, definedGroupCtxts, properties);
+             groupAliasToGroup.put(group.getAlias(), group);
+         }
+ 
+         //Set<GroupContext> topLevelGroupContexts = 
getTopLevelGroupContexts(groupAliasToGroup);
+         Set<Group> nestedGroups = new HashSet<Group>();
+         getNestedGroupContexts(nestedGroups, groupAliasToGroup.values());
+         filterDuplicatedGroupContexts(groupAliasToGroup.values(), 
nestedGroups);
+ 
+         return groupAliasToGroup;
+     }
+ 
+     /**
+      * Extracts nested Group information recursively
+      *
+      * @param nestedGroups Nested Groups set to be populated recursively
+      * @param groups Collection of Groups
+      */
+     private void getNestedGroupContexts (Set<Group> nestedGroups, 
Collection<Group> groups) {
+ 
+         if (groups != null) {
+             for (Group group : groups) {
+                 if (group.getGroups() != null) {
+                     nestedGroups.addAll(group.getGroups());
+                     getNestedGroupContexts(nestedGroups, group.getGroups());
+                 }
+             }
+         }
+     }
+ 
+     /**
+      * Filters duplicated Groups from top level
+      *
+      * @param topLevelGroups Top level Groups
+      * @param nestedGroups nested Groups
+      */
+     private void filterDuplicatedGroupContexts (Collection<Group> 
topLevelGroups, Set<Group> nestedGroups) {
+ 
+         for (Group nestedGroup : nestedGroups) {
+             filterNestedGroupFromTopLevel(topLevelGroups, nestedGroup);
+         }
+     }
+ 
+     private void filterNestedGroupFromTopLevel (Collection<Group> 
topLevelGroups, Group nestedGroup) {
+ 
+         Iterator<Group> parentIterator = topLevelGroups.iterator();
+         while (parentIterator.hasNext()) {
+             Group parentGroup = parentIterator.next();
+             // if there is an exactly similar nested Group Context and a top 
level Group Context
+             // it implies that they are duplicates. Should be removed from 
top level.
+             if (parentGroup.equals(nestedGroup)) {
+                 parentIterator.remove();
+             }
+         }
+     }
+ 
+     /**
+      * Parses an individual Group
+      *
+      * @param appId Application id
+      * @param tenantId tenant id of tenant which deployed the Application
+      * @param key Generated key for the Application
+      * @param groupCtxt Group definition information
+      * @param subscribableInfoCtxts Map [cartridge alias -> Group] with 
extracted Subscription Information
+      * @param definedGroupCtxts Map [group alias -> Group] with extracted 
Group Information
+      * @return  Group object
+      *
+      * @throws ApplicationDefinitionException if unable to parse
+      */
+     private Group parseGroup (String appId, int tenantId, String key, 
GroupContext groupCtxt,
+                              Map<String, SubscribableInfoContext> 
subscribableInfoCtxts,
 -                             Map<String, GroupContext> definedGroupCtxts)
++                             Map<String, GroupContext> definedGroupCtxts, 
Properties properties)
+             throws ApplicationDefinitionException {
+ 
+         // check if are in the defined Group set
+         GroupContext definedGroupDef = 
definedGroupCtxts.get(groupCtxt.getAlias());
+         if (definedGroupDef == null) {
+             handleError("Group Definition with name: " + groupCtxt.getName() 
+ ", alias: " +
+                     groupCtxt.getAlias() + " is not found in the all Group 
Definitions collection");
+         }
+ 
+         Group group = new Group(appId, groupCtxt.getName(), 
groupCtxt.getAlias());
+ 
+         group.setAutoscalingPolicy(groupCtxt.getAutoscalingPolicy());
+         group.setDeploymentPolicy(groupCtxt.getDeploymentPolicy());
+         DependencyOrder dependencyOrder = new DependencyOrder();
+         // create the Dependency Ordering
+         String []  startupOrders = getStartupOrderForGroup(groupCtxt);
+         if (startupOrders != null) {
+             
dependencyOrder.setStartupOrders(ParserUtils.convert(startupOrders, groupCtxt));
+         }
+         
dependencyOrder.setTerminationBehaviour(getKillbehaviour(groupCtxt.getName()));
+         group.setDependencyOrder(dependencyOrder);
+ 
+         Map<String, ClusterDataHolder> clusterDataMap;
+ 
+         // get group level Subscribables
+         if (groupCtxt.getSubscribableContexts() != null) {
+             clusterDataMap = parseLeafLevelSubscriptions(appId, tenantId, 
key, groupCtxt.getName(),
 -                    Arrays.asList(groupCtxt.getSubscribableContexts()), 
subscribableInfoCtxts);
++                    Arrays.asList(groupCtxt.getSubscribableContexts()), 
subscribableInfoCtxts, properties);
+             group.setClusterData(clusterDataMap);
+         }
+ 
+         // get nested groups
+         if (groupCtxt.getGroupContexts() != null) {
+             Map<String, Group> nestedGroups = new HashMap<String, Group>();
+             // check sub groups
+             for (GroupContext subGroupCtxt : groupCtxt.getGroupContexts()) {
+                 // get the complete Group Definition
+                 subGroupCtxt = definedGroupCtxts.get(subGroupCtxt.getAlias());
+                 Group nestedGroup = parseGroup(appId, tenantId, key, 
subGroupCtxt,
+                         subscribableInfoCtxts,
 -                        definedGroupCtxts);
++                        definedGroupCtxts, properties);
+                 nestedGroups.put(nestedGroup.getAlias(), nestedGroup);
+             }
+ 
+             group.setGroups(nestedGroups);
+         }
+ 
+         return group;
+     }
+ 
+     /**
+      * Find the startup order
+      *
+      * @param groupContext GroupContext with Group defintion information
+      * @return Set of Startup Orders which are defined in the Group
+      *
+      * @throws ApplicationDefinitionException
+      */
+     private String [] getStartupOrderForGroup(GroupContext groupContext) 
throws ApplicationDefinitionException {
+ 
+         ServiceGroup serviceGroup;
+         try {
+             serviceGroup = 
RegistryManager.getInstance().getServiceGroup(groupContext.getName());
+         } catch (Exception e) {
+             String errorMsg = "Error in getting Service Group Definition for 
[ " + groupContext.getName() +
+                     " ] from Registry";
+             log.error(errorMsg, e);
+             throw new ApplicationDefinitionException(errorMsg, e);
+         }
+ 
+         if (serviceGroup == null) {
+             handleError("Service Group Definition not found for name " + 
groupContext.getName());
+         }
+         
+         if (log.isDebugEnabled()) {
+               log.debug("parsing application ... getStartupOrderForGroup: " + 
groupContext.getName());
+         }
+ 
+         assert serviceGroup != null;
+         if (serviceGroup.getDependencies() != null) {
+               if (log.isDebugEnabled()) {
+               log.debug("parsing application ... getStartupOrderForGroup: 
dependencies != null " );
+             }
+             if (serviceGroup.getDependencies().getStartupOrders() != null) {
+               
+               String [] startupOrders = 
serviceGroup.getDependencies().getStartupOrders();
+               if (log.isDebugEnabled()) {
+                       log.debug("parsing application ... 
getStartupOrderForGroup: startupOrders != null # of: " +  startupOrders.length);
+                 }
+                 return startupOrders;
+             }
+         }
+ 
+         return null;
+     }
+ 
+     /**
+      * Get kill behaviour related to a Group
+      *
+      * @param serviceGroupName Group name
+      * @return String indicating the kill behavior
+      *
+      * @throws ApplicationDefinitionException if an error occurs
+      */
+     private String getKillbehaviour (String serviceGroupName) throws 
ApplicationDefinitionException {
+ 
+         ServiceGroup serviceGroup;
+         try {
+             serviceGroup = 
RegistryManager.getInstance().getServiceGroup(serviceGroupName);
+         } catch (Exception e) {
+             String errorMsg = "Error in getting Service Group Definition for 
[ " + serviceGroupName +
+                     " ] from Registry";
+             log.error(errorMsg, e);
+             throw new ApplicationDefinitionException(errorMsg, e);
+         }
+ 
+         if (serviceGroup == null) {
+             handleError("Service Group Definition not found for name " + 
serviceGroupName);
+         }
+ 
+         assert serviceGroup != null;
+         if (serviceGroup.getDependencies() != null) {
+             return serviceGroup.getDependencies().getKillBehaviour();
+         }
+ 
+         return null;
+ 
+     }
+ 
+     /**
+      * Parse Subscription Information
+      *
+      * @param appId Application id
+      * @param tenantId Tenant id of tenant which deployed the Application
+      * @param key Generated key for the Application
+      * @param groupName Group name (if relevant)
+      * @param subscribableCtxts Subscribable Information
+      * @param subscribableInfoCtxts Map [cartridge alias -> Group] with 
extracted Subscription Information
+      * @return Map [subscription alias -> ClusterDataHolder]
+      *
+      * @throws ApplicationDefinitionException
+      */
+     private Map<String, ClusterDataHolder> parseLeafLevelSubscriptions 
(String appId, int tenantId, String key, String groupName,
+                                                                  
List<SubscribableContext> subscribableCtxts,
 -                                                                 Map<String, 
SubscribableInfoContext> subscribableInfoCtxts)
++                                                                 Map<String, 
SubscribableInfoContext> subscribableInfoCtxts,
++                                                                 Properties 
properties)
+             throws ApplicationDefinitionException {
+ 
+         Map<String, ClusterDataHolder> clusterDataMap = new HashMap<String, 
ClusterDataHolder>();
+ 
+         for (SubscribableContext subscribableCtxt : subscribableCtxts) {
+ 
+             // check is there is a related Subscribable Information
+             SubscribableInfoContext subscribableInfoCtxt = 
subscribableInfoCtxts.get(subscribableCtxt.getAlias());
+             if (subscribableInfoCtxt == null) {
+                 handleError("Related Subscribable Information Ctxt not found 
for Subscribable with alias: "
+                         + subscribableCtxt.getAlias());
+             }
+ 
+             // check if Cartridge Type is valid
+             if (StringUtils.isEmpty(subscribableCtxt.getType())) {
+                 handleError("Invalid Cartridge Type specified : [ "
+                         + subscribableCtxt.getType() + " ]");
+             }
+ 
+             // check if a cartridgeInfo with relevant type is already 
deployed. else, can't continue
+             CartridgeInfo cartridgeInfo =  
getCartridge(subscribableCtxt.getType());
+             if (cartridgeInfo == null) {
+                 handleError("No deployed Cartridge found with type [ " + 
subscribableCtxt.getType() +
+                         " ] for Composite Application");
+             }
+ 
+             // get hostname and cluster id
+             ClusterInformation clusterInfo;
+             assert cartridgeInfo != null;
+             if (cartridgeInfo.getMultiTenant()) {
+                 clusterInfo = new MTClusterInformation();
+             } else {
+                 clusterInfo = new STClusterInformation();
+             }
+ 
+             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, 
subscribableInfoCtxt.getDependencyAliases());
++                    clusterId, hostname, 
subscribableInfoCtxt.getDeploymentPolicy(),
++                    false, isKubernetesCluster, 
subscribableInfoCtxt.getDependencyAliases(), properties);
+ 
+             
appClusterCtxt.setAutoscalePolicyName(subscribableInfoCtxt.getAutoscalingPolicy());
+             this.applicationClusterContexts.add(appClusterCtxt);
+ 
+             // add relevant information to the map
+             clusterDataMap.put(subscribableCtxt.getAlias(), new 
ClusterDataHolder(subscribableCtxt.getType(), clusterId));
+         }
+ 
+         return clusterDataMap;
+     }
+ 
+     /**
+      * Creates a ApplicationClusterContext object to keep information related 
to a Cluster in this Application
+      *
+      * @param appId Application id
+      * @param groupName Group name
+      * @param cartridgeInfo Cartridge information
+      * @param subscriptionKey Generated key for the Application
+      * @param tenantId Tenant Id of the tenant which deployed the Application
+      * @param repoUrl Repository URL
+      * @param alias alias specified for this Subscribable in the Application 
Definition
+      * @param clusterId Cluster id
+      * @param hostname Hostname
+      * @param deploymentPolicy Deployment policy used
 -     * @param isLB if this cluster is an LB
++     * @param isLBCluster if this cluster is an LB
++     * @param isKubernetesCluster if this cluster is a Kubernetes cluster
+      * @return ApplicationClusterContext object with relevant information
+      *
+      * @throws ApplicationDefinitionException If any error occurs
+      */
+     private ApplicationClusterContext createApplicationClusterContext (String 
appId, String groupName, CartridgeInfo cartridgeInfo,
+                                                                        String 
subscriptionKey, int tenantId, String repoUrl,
+                                                                        String 
alias, String clusterId, String hostname,
 -                                                                       String 
deploymentPolicy, boolean isLB, String[] dependencyAliases)
++                                                                       String 
deploymentPolicy, boolean isLBCluster,
++                                                                       
boolean isKubernetesCluster, String[] dependencyAliases,
++                                                                       
Properties properties)
+             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);
++        return new ApplicationClusterContext(cartridgeInfo.getType(), 
clusterId, hostname, textPayload, deploymentPolicy, 
++                isLB, isKubernetesCluster, properties);
+     }
+ 
+     private CartridgeInfo getCartridge (String cartridgeType) throws 
ApplicationDefinitionException {
+ 
+         try {
+             return 
CloudControllerClient.getInstance().getCartrdgeInformation(cartridgeType);
+         } catch (CartridgeInformationException e) {
+             throw new ApplicationDefinitionException(e);
+         }
+     }
+ 
+     private void handleError (String errorMsg) throws 
ApplicationDefinitionException {
+         log.error(errorMsg);
+         throw new ApplicationDefinitionException(errorMsg);
+     }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ApplicationContext.java
index 0000000,1b9c516..b3560c3
mode 000000,100644..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
@@@ -1,0 -1,93 +1,112 @@@
+ /*
+  * 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.applications.pojo;
+ 
 -public class ApplicationContext {
++import org.apache.stratos.cloud.controller.pojo.Properties;
++
++import java.io.Serializable;
++
++public class ApplicationContext implements Serializable {
++
++    private static final long serialVersionUID = 6704036501869668646L;
+ 
+     private int tenantId;
+ 
+     private String tenantDomain;
+ 
+     private String teantAdminUsername;
+ 
+     private String applicationId;
+ 
+     private String alias;
+ 
+     private ComponentContext componentContext;
+ 
+     private SubscribableInfoContext[] subscribableInfoContexts;
+ 
++    private Properties properties;
++
++    public ApplicationContext() {
++    }
++
+     public String getApplicationId() {
+         return applicationId;
+     }
+ 
+     public void setApplicationId(String applicationId) {
+         this.applicationId = applicationId;
+     }
+ 
+     public String getAlias() {
+         return alias;
+     }
+ 
+     public void setAlias(String alias) {
+         this.alias = alias;
+     }
+ 
+     public ComponentContext getComponents() {
+         return componentContext;
+     }
+ 
+     public void setComponents(ComponentContext componentContext) {
+         this.componentContext = componentContext;
+     }
+ 
+     public SubscribableInfoContext[] getSubscribableInfoContext() {
+         return subscribableInfoContexts;
+     }
+ 
+     public void setSubscribableInfoContext(SubscribableInfoContext[] 
subscribableInfoContexts) {
+         this.subscribableInfoContexts = subscribableInfoContexts;
+     }
+ 
+     public int getTenantId() {
+         return tenantId;
+     }
+ 
+     public void setTenantId(int tenantId) {
+         this.tenantId = tenantId;
+     }
+ 
+     public String getTenantDomain() {
+         return tenantDomain;
+     }
+ 
+     public void setTenantDomain(String tenantDomain) {
+         this.tenantDomain = tenantDomain;
+     }
+ 
+     public String getTeantAdminUsername() {
+         return teantAdminUsername;
+     }
+ 
+     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/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ComponentContext.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ComponentContext.java
index 0000000,b39b07f..2816f4e
mode 000000,100644..100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ComponentContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/ComponentContext.java
@@@ -1,0 -1,54 +1,58 @@@
+ /*
+  * 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.applications.pojo;
+ 
 -public class ComponentContext {
++import java.io.Serializable;
++
++public class ComponentContext implements Serializable {
++
++    private static final long serialVersionUID = -3841830873207967496L;
+ 
+     private GroupContext[] groupContexts;
+ 
+     private SubscribableContext[] subscribableContexts;
+ 
+     private DependencyContext dependencyContext;
+ 
+ 
+     public GroupContext[] getGroupContexts() {
+         return groupContexts;
+     }
+ 
+     public void setGroupContexts(GroupContext[] groupContexts) {
+         this.groupContexts = groupContexts;
+     }
+ 
+     public SubscribableContext[] getSubscribableContexts() {
+         return subscribableContexts;
+     }
+ 
+     public void setSubscribableContexts(SubscribableContext[] 
subscribableContexts) {
+         this.subscribableContexts = subscribableContexts;
+     }
+ 
+     public DependencyContext getDependencyContext() {
+         return dependencyContext;
+     }
+ 
+     public void setDependencyContext(DependencyContext dependencyContext) {
+         this.dependencyContext = dependencyContext;
+     }
+ }

http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/DependencyContext.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/DependencyContext.java
index 0000000,ccb17f0..57a57d1
mode 000000,100644..100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/DependencyContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/DependencyContext.java
@@@ -1,0 -1,44 +1,48 @@@
+ /*
+  * 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.applications.pojo;
+ 
+ 
 -public class DependencyContext {
 -    
++import java.io.Serializable;
++
++public class DependencyContext implements Serializable {
++
++    private static final long serialVersionUID = 6211713487242343226L;
++
+     private String [] startupOrdersContexts;
+ 
+     private String terminationBehaviour;
+ 
+     public String getTerminationBehaviour() {
+         return terminationBehaviour;
+     }
+ 
+     public void setTerminationBehaviour(String terminationBehaviour) {
+         this.terminationBehaviour = terminationBehaviour;
+     }
+ 
+       public String [] getStartupOrdersContexts() {
+               return startupOrdersContexts;
+       }
+ 
+       public void setStartupOrdersContexts(String [] startupOrdersContexts) {
+               this.startupOrdersContexts = startupOrdersContexts;
+       }
+ }

http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java
index 0000000,c05a5d5..885cccc
mode 000000,100644..100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/GroupContext.java
@@@ -1,0 -1,84 +1,88 @@@
+ /*
+  * 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.applications.pojo;
+ 
 -public class GroupContext {
++import java.io.Serializable;
++
++public class GroupContext implements Serializable{
++
++    private static final long serialVersionUID = 1595266728968445926L;
+ 
+     private String name;
+ 
+     private String alias;
+ 
+     private String deploymentPolicy;
+ 
+     private String autoscalingPolicy;
+ 
+     private SubscribableContext[] subscribableContexts;
+ 
+     private GroupContext[] groupContexts;
+ 
+ 
+     public String getName() {
+         return name;
+     }
+ 
+     public void setName(String name) {
+         this.name = name;
+     }
+ 
+     public String getAlias() {
+         return alias;
+     }
+ 
+     public void setAlias(String alias) {
+         this.alias = alias;
+     }
+ 
+     public String getDeploymentPolicy() {
+         return deploymentPolicy;
+     }
+ 
+     public void setDeploymentPolicy(String deploymentPolicy) {
+         this.deploymentPolicy = deploymentPolicy;
+     }
+ 
+     public String getAutoscalingPolicy() {
+         return autoscalingPolicy;
+     }
+ 
+     public void setAutoscalingPolicy(String autoscalingPolicy) {
+         this.autoscalingPolicy = autoscalingPolicy;
+     }
+ 
+     public SubscribableContext[] getSubscribableContexts() {
+         return subscribableContexts;
+     }
+ 
+     public void setSubscribableContexts(SubscribableContext[] 
subscribableContexts) {
+         this.subscribableContexts = subscribableContexts;
+     }
+ 
+     public GroupContext[] getGroupContexts() {
+         return groupContexts;
+     }
+ 
+     public void setGroupContexts(GroupContext[] groupContexts) {
+         this.groupContexts = groupContexts;
+     }
+ }

http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableContext.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableContext.java
index 0000000,7ae4864..7a73976
mode 000000,100644..100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableContext.java
@@@ -1,0 -1,44 +1,47 @@@
+ /*
+  * 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.applications.pojo;
+ 
 -public class SubscribableContext {
++import java.io.Serializable;
++
++public class SubscribableContext implements Serializable {
++
++    private static final long serialVersionUID = 3853456523070318925L;
+ 
+     private String type;
+ 
+     private String alias;
+ 
 -
+     public String getType() {
+         return type;
+     }
+ 
+     public void setType(String type) {
+         this.type = type;
+     }
+ 
+     public String getAlias() {
+         return alias;
+     }
+ 
+     public void setAlias(String alias) {
+         this.alias = alias;
+     }
+ }

http://git-wip-us.apache.org/repos/asf/stratos/blob/89fb37af/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
index 0000000,62d32df..20cf3f8
mode 000000,100644..100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/pojo/SubscribableInfoContext.java
@@@ -1,0 -1,103 +1,107 @@@
+ /*
+  * 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.applications.pojo;
+ 
 -public class SubscribableInfoContext {
++import java.io.Serializable;
++
++public class SubscribableInfoContext implements Serializable {
++
++    private static final long serialVersionUID = -6874644941002783034L;
+ 
+     private String alias;
+ 
+     private String deploymentPolicy;
+ 
+     private String autoscalingPolicy;
+ 
+     private String repoUrl;
+ 
+     private boolean privateRepo;
+ 
+     private String repoUsername;
+ 
+     private String repoPassword;
+ 
+     private String[] dependencyAliases;
+ 
+     public String getAlias() {
+         return alias;
+     }
+ 
+     public void setAlias(String alias) {
+         this.alias = alias;
+     }
+ 
+     public String getDeploymentPolicy() {
+         return deploymentPolicy;
+     }
+ 
+     public void setDeploymentPolicy(String deploymentPolicy) {
+         this.deploymentPolicy = deploymentPolicy;
+     }
+ 
+     public String getAutoscalingPolicy() {
+         return autoscalingPolicy;
+     }
+ 
+     public void setAutoscalingPolicy(String autoscalingPolicy) {
+         this.autoscalingPolicy = autoscalingPolicy;
+     }
+ 
+     public String getRepoUrl() {
+         return repoUrl;
+     }
+ 
+     public void setRepoUrl(String repoUrl) {
+         this.repoUrl = repoUrl;
+     }
+ 
+     public boolean isPrivateRepo() {
+         return privateRepo;
+     }
+ 
+     public void setPrivateRepo(boolean privateRepo) {
+         this.privateRepo = privateRepo;
+     }
+ 
+     public String getRepoUsername() {
+         return repoUsername;
+     }
+ 
+     public void setRepoUsername(String repoUsername) {
+         this.repoUsername = repoUsername;
+     }
+ 
+     public String getRepoPassword() {
+         return repoPassword;
+     }
+ 
+     public void setRepoPassword(String repoPassword) {
+         this.repoPassword = repoPassword;
+     }
+ 
+     public String[] getDependencyAliases() {
+         return dependencyAliases;
+     }
+ 
+     public void setDependencyAliases(String[] dependencyAliases) {
+         this.dependencyAliases = dependencyAliases;
+     }
+ }

Reply via email to