You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2013/11/28 17:03:40 UTC

[4/8] git commit: more refactoring to CC

more refactoring to CC


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

Branch: refs/heads/master
Commit: 2eaac66e2aa617048f04829979b25e4089003743
Parents: 99f9951
Author: Nirmal Fernando <ni...@apache.org>
Authored: Thu Nov 28 21:26:00 2013 +0530
Committer: Nirmal Fernando <ni...@apache.org>
Committed: Thu Nov 28 21:26:00 2013 +0530

----------------------------------------------------------------------
 .../org.apache.stratos.cloud.controller/pom.xml |   4 +-
 .../axiom/parser/CartridgeConfigParser.java     |  11 +-
 .../parser/CloudControllerConfigParser.java     |   6 +-
 .../axiom/parser/IaasProviderConfigParser.java  |   2 +-
 .../axiom/parser/ServiceConfigParser.java       |  12 +-
 .../controller/deployers/CartridgeDeployer.java |   7 +-
 .../deployers/CloudControllerDeployer.java      |   2 +-
 .../controller/deployers/ServiceDeployer.java   |   2 +-
 .../exception/InvalidIaasProviderException.java |   2 +-
 .../cloud/controller/iaases/AWSEC2Iaas.java     |   2 +-
 .../controller/iaases/OpenstackNovaIaas.java    |   2 +-
 .../cloud/controller/iaases/VCloudIaas.java     |   2 +-
 .../impl/CloudControllerServiceImpl.java        |  12 +-
 .../interfaces/CloudControllerService.java      |  12 +-
 .../cloud/controller/interfaces/Iaas.java       |   2 +-
 .../jcloud/ComputeServiceBuilderUtil.java       |   3 +-
 .../stratos/cloud/controller/pojo/AppType.java  |  62 +++
 .../cloud/controller/pojo/Cartridge.java        | 288 ++++++++++++++
 .../cloud/controller/pojo/CartridgeInfo.java    | 163 ++++++++
 .../controller/pojo/CartridgeInstanceData.java  | 130 +++++++
 .../controller/pojo/DataPublisherConfig.java    |  82 ++++
 .../stratos/cloud/controller/pojo/Host.java     |  73 ++++
 .../cloud/controller/pojo/IaasContext.java      | 162 ++++++++
 .../cloud/controller/pojo/IaasProvider.java     | 271 +++++++++++++
 .../cloud/controller/pojo/LocationScope.java    |  70 ++++
 .../cloud/controller/pojo/PortMapping.java      |  64 ++++
 .../stratos/cloud/controller/pojo/Region.java   | 125 ++++++
 .../cloud/controller/pojo/Registrant.java       |   2 -
 .../cloud/controller/pojo/ServiceContext.java   | 366 ++++++++++++++++++
 .../cloud/controller/pojo/TopologyConfig.java   |  59 +++
 .../stratos/cloud/controller/pojo/Zone.java     |  90 +++++
 .../CartridgeInstanceDataPublisherTask.java     |   5 +
 .../runtime/FasterLookUpDataHolder.java         |   5 +
 .../controller/topology/TopologyBuilder.java    |  43 +--
 .../topology/TopologyEventSender.java           |  29 +-
 .../stratos/cloud/controller/util/AppType.java  |  62 ---
 .../cloud/controller/util/Cartridge.java        | 288 --------------
 .../cloud/controller/util/CartridgeInfo.java    | 165 --------
 .../controller/util/CartridgeInstanceData.java  | 130 -------
 .../controller/util/CloudControllerUtil.java    |  10 +-
 .../controller/util/DataPublisherConfig.java    |  80 ----
 .../stratos/cloud/controller/util/Host.java     |  73 ----
 .../cloud/controller/util/IaasContext.java      | 162 --------
 .../cloud/controller/util/IaasProvider.java     | 271 -------------
 .../cloud/controller/util/LocationScope.java    |  70 ----
 .../cloud/controller/util/PortMapping.java      |  64 ----
 .../stratos/cloud/controller/util/Region.java   | 125 ------
 .../cloud/controller/util/ServiceContext.java   | 382 -------------------
 .../cloud/controller/util/TopologyConfig.java   |  59 ---
 .../stratos/cloud/controller/util/Zone.java     |  90 -----
 .../validate/AWSEC2PartitionValidator.java      |   2 +-
 .../OpenstackNovaPartitionValidator.java        |   2 +-
 .../validate/interfaces/PartitionValidator.java |   2 +-
 .../service/util/ServiceContextTest.java        |   3 +-
 54 files changed, 2108 insertions(+), 2104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/pom.xml
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/pom.xml b/components/org.apache.stratos.cloud.controller/pom.xml
index b9d369b..92bf1ca 100644
--- a/components/org.apache.stratos.cloud.controller/pom.xml
+++ b/components/org.apache.stratos.cloud.controller/pom.xml
@@ -54,7 +54,7 @@
                             org.apache.stratos.cloud.controller.publisher.*,
                             org.apache.stratos.cloud.controller.topic.*,
                             org.apache.stratos.cloud.controller.iaases.*,
-                            org.apache.stratos.cloud.controller.util.*,
+                            org.apache.stratos.cloud.controller.pojo.*,
 				            org.apache.stratos.cloud.controller.deployers.*,
 				            org.apache.stratos.cloud.controller.exception.*,
                         </Export-Package>
@@ -63,7 +63,7 @@
                             !org.apache.stratos.cloud.controller.publisher.*,
                             !org.apache.stratos.cloud.controller.topic.*,
                             !org.apache.stratos.cloud.controller.iaases.*,
-                            !org.apache.stratos.cloud.controller.util.*,
+                            !org.apache.stratos.cloud.controller.pojo.*,
                             !org.apache.stratos.cloud.controller.deployers.*,
                             !org.apache.stratos.cloud.controller.exception.*,
                             org.apache.stratos.cloud.controller.*,

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CartridgeConfigParser.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CartridgeConfigParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CartridgeConfigParser.java
index 0195fc4..911adc0 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CartridgeConfigParser.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CartridgeConfigParser.java
@@ -21,6 +21,7 @@ package org.apache.stratos.cloud.controller.axiom.parser;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+
 import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMElement;
@@ -29,12 +30,12 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.axiom.AxiomXpathParserUtil;
 import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException;
+import org.apache.stratos.cloud.controller.pojo.AppType;
+import org.apache.stratos.cloud.controller.pojo.Cartridge;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
+import org.apache.stratos.cloud.controller.pojo.PortMapping;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
-import org.apache.stratos.cloud.controller.util.AppType;
-import org.apache.stratos.cloud.controller.util.Cartridge;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
-import org.apache.stratos.cloud.controller.util.IaasProvider;
-import org.apache.stratos.cloud.controller.util.PortMapping;
 
 /**
  * Parse the cartridge definition files.
@@ -322,7 +323,7 @@ public class CartridgeConfigParser {
     
     /**
      * @param cartridgeElementString Cartridges section as a {@link String}
-     * @param aCartridge             {@link org.apache.stratos.cloud.controller.util.Cartridge} instance.
+     * @param aCartridge             {@link org.apache.stratos.cloud.controller.pojo.Cartridge} instance.
      * @param appTypesNodes          nodes of App types.
      */
     private static void getAppTypes(final String fileName, String cartridgeElementString, Cartridge aCartridge,

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CloudControllerConfigParser.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CloudControllerConfigParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CloudControllerConfigParser.java
index e90ccd3..9b2cb5e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CloudControllerConfigParser.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CloudControllerConfigParser.java
@@ -31,11 +31,11 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.axiom.AxiomXpathParserUtil;
 import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException;
+import org.apache.stratos.cloud.controller.pojo.DataPublisherConfig;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
+import org.apache.stratos.cloud.controller.pojo.TopologyConfig;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
-import org.apache.stratos.cloud.controller.util.DataPublisherConfig;
-import org.apache.stratos.cloud.controller.util.IaasProvider;
-import org.apache.stratos.cloud.controller.util.TopologyConfig;
 import org.wso2.securevault.SecretResolver;
 import org.wso2.securevault.SecretResolverFactory;
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/IaasProviderConfigParser.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/IaasProviderConfigParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/IaasProviderConfigParser.java
index 4038314..ef759f5 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/IaasProviderConfigParser.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/IaasProviderConfigParser.java
@@ -29,8 +29,8 @@ import org.apache.axiom.om.OMNode;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
-import org.apache.stratos.cloud.controller.util.IaasProvider;
 import org.wso2.securevault.SecretResolver;
 import org.wso2.securevault.SecretResolverFactory;
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/ServiceConfigParser.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/ServiceConfigParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/ServiceConfigParser.java
index 2c335ae..540ec2c 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/ServiceConfigParser.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/ServiceConfigParser.java
@@ -31,13 +31,13 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.axiom.AxiomXpathParserUtil;
 import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException;
+import org.apache.stratos.cloud.controller.pojo.AppType;
+import org.apache.stratos.cloud.controller.pojo.Cartridge;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
+import org.apache.stratos.cloud.controller.pojo.PortMapping;
+import org.apache.stratos.cloud.controller.pojo.ServiceContext;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
-import org.apache.stratos.cloud.controller.util.AppType;
-import org.apache.stratos.cloud.controller.util.Cartridge;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
-import org.apache.stratos.cloud.controller.util.IaasProvider;
-import org.apache.stratos.cloud.controller.util.PortMapping;
-import org.apache.stratos.cloud.controller.util.ServiceContext;
 
 /**
  * Parse the cartridge definition files.
@@ -504,7 +504,7 @@ public class ServiceConfigParser {
      * @param cartridgeElementString
      *            Cartridges section as a {@link String}
      * @param aCartridge
-     *            {@link org.apache.stratos.cloud.controller.util.Cartridge} instance.
+     *            {@link org.apache.stratos.cloud.controller.pojo.Cartridge} instance.
      * @param appTypesNodes
      *            nodes of App types.
      */

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CartridgeDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CartridgeDeployer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CartridgeDeployer.java
index 863d508..d2c50fa 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CartridgeDeployer.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CartridgeDeployer.java
@@ -32,6 +32,11 @@ import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor;
 import org.apache.stratos.cloud.controller.exception.CloudControllerException;
 import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException;
 import org.apache.stratos.cloud.controller.interfaces.Iaas;
+import org.apache.stratos.cloud.controller.pojo.Cartridge;
+import org.apache.stratos.cloud.controller.pojo.Host;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
+import org.apache.stratos.cloud.controller.pojo.Region;
+import org.apache.stratos.cloud.controller.pojo.Zone;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
 import org.apache.stratos.cloud.controller.topology.TopologyBuilder;
 import org.apache.stratos.cloud.controller.util.*;
@@ -44,7 +49,7 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
- * All the {@link org.apache.stratos.cloud.controller.util.Cartridge}s will get deployed / undeployed / updated via this class.
+ * All the {@link org.apache.stratos.cloud.controller.pojo.Cartridge}s will get deployed / undeployed / updated via this class.
  */
 public class CartridgeDeployer extends AbstractDeployer{
     

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CloudControllerDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CloudControllerDeployer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CloudControllerDeployer.java
index 34b652a..82ffddb 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CloudControllerDeployer.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/CloudControllerDeployer.java
@@ -28,8 +28,8 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.axiom.AxiomXpathParser;
 import org.apache.stratos.cloud.controller.axiom.AxiomXpathParserUtil;
 import org.apache.stratos.cloud.controller.axiom.parser.CloudControllerConfigParser;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
-import org.apache.stratos.cloud.controller.util.IaasProvider;
 
 import java.util.ArrayList;
 import java.util.List;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/ServiceDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/ServiceDeployer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/ServiceDeployer.java
index a0418ae..2875ce5 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/ServiceDeployer.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployers/ServiceDeployer.java
@@ -30,8 +30,8 @@ import org.apache.stratos.cloud.controller.axiom.AxiomXpathParserUtil;
 import org.apache.stratos.cloud.controller.axiom.parser.ServiceConfigParser;
 import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException;
 import org.apache.stratos.cloud.controller.topology.TopologyBuilder;
+import org.apache.stratos.cloud.controller.pojo.ServiceContext;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
-import org.apache.stratos.cloud.controller.util.ServiceContext;
 import org.wso2.carbon.utils.CarbonUtils;
 
 import java.io.File;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidIaasProviderException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidIaasProviderException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidIaasProviderException.java
index ee98f0e..be61028 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidIaasProviderException.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidIaasProviderException.java
@@ -18,7 +18,7 @@
  */
 package org.apache.stratos.cloud.controller.exception;
 
-import org.apache.stratos.cloud.controller.util.IaasProvider;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
 
 /**
  * Throws when a {@link IaasProvider} is evaluated to be invalid.

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java
index a591607..d79c266 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java
@@ -30,9 +30,9 @@ import org.apache.stratos.cloud.controller.exception.InvalidRegionException;
 import org.apache.stratos.cloud.controller.exception.InvalidZoneException;
 import org.apache.stratos.cloud.controller.interfaces.Iaas;
 import org.apache.stratos.cloud.controller.jcloud.ComputeServiceBuilderUtil;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
-import org.apache.stratos.cloud.controller.util.IaasProvider;
 import org.apache.stratos.cloud.controller.validate.AWSEC2PartitionValidator;
 import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
 import org.jclouds.aws.ec2.AWSEC2ApiMetadata;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java
index 07f7aff..6e445a3 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java
@@ -31,9 +31,9 @@ import org.apache.stratos.cloud.controller.exception.InvalidRegionException;
 import org.apache.stratos.cloud.controller.exception.InvalidZoneException;
 import org.apache.stratos.cloud.controller.interfaces.Iaas;
 import org.apache.stratos.cloud.controller.jcloud.ComputeServiceBuilderUtil;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
-import org.apache.stratos.cloud.controller.util.IaasProvider;
 import org.apache.stratos.cloud.controller.validate.OpenstackNovaPartitionValidator;
 import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
 import org.jclouds.compute.ComputeServiceContext;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java
index 6b2951a..ec5d69d 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java
@@ -24,7 +24,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.exception.CloudControllerException;
 import org.apache.stratos.cloud.controller.interfaces.Iaas;
 import org.apache.stratos.cloud.controller.jcloud.ComputeServiceBuilderUtil;
-import org.apache.stratos.cloud.controller.util.IaasProvider;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
 import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
 import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.compute.domain.Template;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index c259f73..b6aed38 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -24,6 +24,9 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor;
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
+import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.cloud.controller.exception.CloudControllerException;
 import org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException;
 import org.apache.stratos.cloud.controller.exception.InvalidClusterException;
@@ -34,9 +37,14 @@ import org.apache.stratos.cloud.controller.exception.UnregisteredClusterExceptio
 import org.apache.stratos.cloud.controller.interfaces.CloudControllerService;
 import org.apache.stratos.cloud.controller.interfaces.Iaas;
 import org.apache.stratos.cloud.controller.persist.Deserializer;
+import org.apache.stratos.cloud.controller.pojo.Cartridge;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 import org.apache.stratos.cloud.controller.pojo.ClusterContext;
+import org.apache.stratos.cloud.controller.pojo.IaasContext;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
 import org.apache.stratos.cloud.controller.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.pojo.Registrant;
+import org.apache.stratos.cloud.controller.pojo.ServiceContext;
 import org.apache.stratos.cloud.controller.publisher.CartridgeInstanceDataPublisherTask;
 import org.apache.stratos.cloud.controller.registry.RegistryManager;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
@@ -46,9 +54,6 @@ import org.apache.stratos.cloud.controller.topology.TopologyEventMessageDelegato
 import org.apache.stratos.cloud.controller.topology.TopologyManager;
 import org.apache.stratos.cloud.controller.util.*;
 import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
-import org.apache.stratos.messaging.domain.policy.DeploymentPolicy;
-import org.apache.stratos.messaging.domain.policy.Partition;
-import org.apache.stratos.messaging.domain.policy.PartitionGroup;
 import org.jclouds.compute.ComputeService;
 import org.jclouds.compute.domain.ComputeMetadata;
 import org.jclouds.compute.domain.NodeMetadata;
@@ -1378,7 +1383,6 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         validator.setIaasProvider(iaasProvider);
         validator.validate(partition.getId(),
                            CloudControllerUtil.toJavaUtilProperties(partition.getProperties()));
-        TopologyBuilder.handlePartitionCreated(partition);
 
         return true;
     }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
index 9494007..bae0922 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
@@ -18,16 +18,16 @@
  */
 package org.apache.stratos.cloud.controller.interfaces;
 
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException;
 import org.apache.stratos.cloud.controller.exception.InvalidClusterException;
 import org.apache.stratos.cloud.controller.exception.InvalidMemberException;
 import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
 import org.apache.stratos.cloud.controller.exception.UnregisteredCartridgeException;
 import org.apache.stratos.cloud.controller.exception.UnregisteredClusterException;
+import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 import org.apache.stratos.cloud.controller.pojo.Registrant;
-import org.apache.stratos.cloud.controller.util.CartridgeInfo;
-import org.apache.stratos.messaging.domain.policy.DeploymentPolicy;
-import org.apache.stratos.messaging.domain.policy.Partition;
 
 /**
  * This API provides a way to communicate with underline
@@ -177,7 +177,7 @@ public interface CloudControllerService {
      * 
      * @param cartridgeType
      *            type of the cartridge.
-     * @return {@link org.apache.stratos.cloud.controller.util.CartridgeInfo} of the given cartridge type or <code>null</code>.
+     * @return {@link org.apache.stratos.cloud.controller.pojo.CartridgeInfo} of the given cartridge type or <code>null</code>.
      * @throws UnregisteredCartridgeException if there is no registered cartridge with this type.
      */
     public CartridgeInfo getCartridgeInfo(String cartridgeType) throws UnregisteredCartridgeException;
@@ -194,10 +194,10 @@ public interface CloudControllerService {
 //    public int getPendingInstanceCount(String clusterId);
 
     /**
-     * Calling this method will result in returning the types of {@link org.apache.stratos.cloud.controller.util.Cartridge}s
+     * Calling this method will result in returning the types of {@link org.apache.stratos.cloud.controller.pojo.Cartridge}s
      * registered in Cloud Controller.
      * 
-     * @return String array containing types of registered {@link org.apache.stratos.cloud.controller.util.Cartridge}s.
+     * @return String array containing types of registered {@link org.apache.stratos.cloud.controller.pojo.Cartridge}s.
      */
     public String[] getRegisteredCartridges();
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java
index e652cf2..31b2ca4 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/Iaas.java
@@ -24,7 +24,7 @@ import org.jclouds.compute.domain.Template;
 import org.apache.stratos.cloud.controller.exception.InvalidHostException;
 import org.apache.stratos.cloud.controller.exception.InvalidRegionException;
 import org.apache.stratos.cloud.controller.exception.InvalidZoneException;
-import org.apache.stratos.cloud.controller.util.IaasProvider;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
 import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/jcloud/ComputeServiceBuilderUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/jcloud/ComputeServiceBuilderUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/jcloud/ComputeServiceBuilderUtil.java
index 7b27f9a..0beba42 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/jcloud/ComputeServiceBuilderUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/jcloud/ComputeServiceBuilderUtil.java
@@ -20,11 +20,12 @@ package org.apache.stratos.cloud.controller.jcloud;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.inject.Module;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.exception.CloudControllerException;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
-import org.apache.stratos.cloud.controller.util.IaasProvider;
 import org.jclouds.ContextBuilder;
 import org.jclouds.compute.ComputeServiceContext;
 import org.jclouds.enterprise.config.EnterpriseConfigurationModule;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/AppType.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/AppType.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/AppType.java
new file mode 100644
index 0000000..135a695
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/AppType.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.pojo;
+
+import java.io.Serializable;
+
+/**
+ * domain mapping related data.
+ *
+ */
+public class AppType implements Serializable{
+	
+    private static final long serialVersionUID = 3550489774139807168L;
+	private String name;
+	private boolean appSpecificMapping = true;
+	
+	public AppType(){
+		
+	}
+	
+	public AppType(String name){
+		this.setName(name);
+	}
+	
+	public AppType(String name, boolean appSpecificMapping){
+		this.setName(name);
+		this.setAppSpecificMapping(appSpecificMapping);
+	}
+
+	public String getName() {
+	    return name;
+    }
+
+	public void setName(String name) {
+	    this.name = name;
+    }
+
+	public boolean isAppSpecificMapping() {
+	    return appSpecificMapping;
+    }
+
+	public void setAppSpecificMapping(boolean appSpecificMapping) {
+	    this.appSpecificMapping = appSpecificMapping;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java
new file mode 100644
index 0000000..0062403
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java
@@ -0,0 +1,288 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.pojo;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * Holds information regarding a Cartridge.
+ */
+public class Cartridge implements Serializable{
+
+    private static final long serialVersionUID = 6637409027085059072L;
+
+	private String type;
+    
+    private String hostName;
+    
+    private String provider;
+    
+    private String displayName;
+    
+    private String description;
+    
+    private String baseDir;
+    
+    private String version;
+    
+    private boolean multiTenant;
+    
+    private List<PortMapping> portMappings = new ArrayList<PortMapping>();
+    
+    private List<AppType> appTypeMappings = new ArrayList<AppType>();
+    
+    /**
+     * Property map of this Cartridge.
+     */
+    private Map<String, String> properties = new HashMap<String, String>();
+    
+    /**
+     * A Cartridge can have 1..n {@link IaasProvider}s
+     */
+    private List<IaasProvider> iaases = new ArrayList<IaasProvider>();
+    
+    private List<String> deploymentDirs = new ArrayList<String>();
+    
+    private IaasProvider lastlyUsedIaas;
+    
+    /**
+     * Key - partition id
+     * Value - Corresponding IaasProvider.
+     */
+    private Map<String, IaasProvider> partitionToIaasProvider = new ConcurrentHashMap<String, IaasProvider>();
+    
+    public Cartridge(){}
+    
+    public Cartridge(String type, String host, String provider, String version, boolean multiTenant) {
+        this.type = type;
+        this.hostName = host;
+        this.provider = provider;
+        this.version = version;
+        this.multiTenant = multiTenant;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+    
+    public void addIaasProvider(String partitionId, IaasProvider iaasProvider) {
+        partitionToIaasProvider.put(partitionId, iaasProvider);
+    }
+    
+    public void addIaasProviders(Map<String, IaasProvider> map) {
+        for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext();) {
+            String key = (String) iterator.next();
+            IaasProvider value = map.get(key);
+            
+            partitionToIaasProvider.put(key, value);
+        }
+    }
+    
+    public IaasProvider getIaasProviderOfPartition(String partitionId) {
+        return partitionToIaasProvider.get(partitionId);
+    }
+
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+    
+    public String getProperty(String key) {
+        return properties.get(key);
+    }
+
+    public void setProperties(Map<String, String> properties) {
+        this.properties = properties;
+    }
+    
+    public void addIaasProvider(IaasProvider iaas) {
+        for (IaasProvider anIaas : iaases) {
+            if(anIaas.equals(iaas)){
+                int idx = iaases.indexOf(anIaas);
+                iaases.remove(idx);
+                iaases.add(idx, iaas);
+                return;
+            }
+        }
+        this.iaases.add(iaas);
+    }
+    
+    public IaasProvider getIaasProvider(String iaasType){
+    	for (IaasProvider iaas : iaases) {
+	        if(iaas.getType().equals(iaasType)){
+	        	return iaas;
+	        }
+        }
+    	
+    	return null;
+    }
+
+    public List<IaasProvider> getIaases() {
+        return iaases;
+    }
+
+    public void setIaases(List<IaasProvider> iaases) {
+        this.iaases = iaases;
+    }
+    
+	public boolean equals(Object obj) {
+		if (obj instanceof Cartridge) {
+			return this.type.equals(((Cartridge)obj).getType());
+		}
+		return false;
+	}
+    
+    public int hashCode() {
+        return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers
+            append(type).
+            toHashCode();
+    }
+
+    public IaasProvider getLastlyUsedIaas() {
+        return lastlyUsedIaas;
+    }
+
+    public void setLastlyUsedIaas(IaasProvider lastlyUsedIaas) {
+        this.lastlyUsedIaas = lastlyUsedIaas;
+    }
+
+//    public boolean isJcloudsObjectsBuilt() {
+//        return isJcloudsObjectsBuilt;
+//    }
+//
+//    public void setJcloudsObjectsBuilt(boolean isJcloudsObjectsBuilt) {
+//        this.isJcloudsObjectsBuilt = isJcloudsObjectsBuilt;
+//    }
+
+	public String getDisplayName() {
+		return displayName;
+	}
+
+	public void setDisplayName(String displayName) {
+		this.displayName = displayName;
+	}
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+	public String getHostName() {
+	    return hostName;
+    }
+
+	public void setHostName(String hostName) {
+	    this.hostName = hostName;
+    }
+	
+	public void reset(){
+//		lastlyUsedIaas = null;
+	}
+
+	public List<String> getDeploymentDirs() {
+	    return deploymentDirs;
+    }
+
+	public void setDeploymentDirs(List<String> deploymentDirs) {
+	    this.deploymentDirs = deploymentDirs;
+    }
+	
+	public void addDeploymentDir(String dir){
+		deploymentDirs.add(dir);
+	}
+	
+	public void addPortMapping(PortMapping mapping){
+		portMappings.add(mapping);
+	}
+	
+	public void addAppType(AppType type){
+		appTypeMappings.add(type);
+	}
+
+	public String getProvider() {
+	    return provider;
+    }
+
+	public void setProvider(String provider) {
+	    this.provider = provider;
+    }
+
+	public String getVersion() {
+		return version;
+	}
+
+	public void setVersion(String version) {
+		this.version = version;
+	}
+
+	public boolean isMultiTenant() {
+		return multiTenant;
+	}
+
+	public void setMultiTenant(boolean multiTenant) {
+		this.multiTenant = multiTenant;
+	}
+
+	public String getBaseDir() {
+	    return baseDir;
+    }
+
+	public void setBaseDir(String baseDir) {
+	    this.baseDir = baseDir;
+    }
+
+	public List<PortMapping> getPortMappings() {
+	    return portMappings;
+    }
+
+	public void setPortMappings(List<PortMapping> portMappings) {
+	    this.portMappings = portMappings;
+    }
+
+	public List<AppType> getAppTypeMappings() {
+    	return appTypeMappings;
+    }
+
+	public void setAppTypeMappings(List<AppType> appTypeMappings) {
+    	this.appTypeMappings = appTypeMappings;
+    }
+
+    public Map<String, IaasProvider> getPartitionToIaasProvider() {
+        return partitionToIaasProvider;
+    }
+
+    public void setPartitionToIaasProvider(Map<String, IaasProvider> partitionToIaasProvider) {
+        this.partitionToIaasProvider = partitionToIaasProvider;
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeInfo.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeInfo.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeInfo.java
new file mode 100644
index 0000000..1121c4e
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeInfo.java
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.pojo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Holds useful information for externals, regarding a Cartridge.
+ */
+public class CartridgeInfo {
+
+    private String type;
+    
+    private String hostName;
+    
+    private String displayName;
+    
+    private String description;
+    
+    private String[] deploymentDirs;
+    
+    private PortMapping[] portMappings;
+    
+    private AppType[] appTypes;
+    
+    private String provider;
+    
+    private String version;
+    
+    private boolean multiTenant;
+    
+    private String baseDir;
+    
+    private Property[] properties;
+    
+    public CartridgeInfo(){
+    	
+    }
+    
+    public CartridgeInfo(String type, String host, String desc, List<String> deploymentDirs, String provider) {
+        this.type = type;
+        this.hostName = host;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDisplayName() {
+		return displayName;
+	}
+
+	public void setDisplayName(String displayName) {
+		this.displayName = displayName;
+	}
+
+	public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+	public String getHostName() {
+	    return hostName;
+    }
+
+	public void setHostName(String hostName) {
+	    this.hostName = hostName;
+    }
+
+	public String[] getDeploymentDirs() {
+	    return deploymentDirs;
+    }
+
+	public void setDeploymentDirs(List<String> deploymentDirsList) {
+		if(deploymentDirsList == null){
+			deploymentDirsList = new ArrayList<String>();
+		}
+	    this.deploymentDirs = new String[deploymentDirsList.size()];
+	    
+	    deploymentDirsList.toArray(deploymentDirs);
+	    
+    }
+	
+    public String getProvider() {
+	    return provider;
+    }
+
+	public void setProvider(String provider) {
+	    this.provider = provider;
+    }
+
+	public String getVersion() {
+		return version;
+	}
+
+	public void setVersion(String version) {
+		this.version = version;
+	}
+
+	public boolean isMultiTenant() {
+		return multiTenant;
+	}
+
+	public void setMultiTenant(boolean multiTenant) {
+		this.multiTenant = multiTenant;
+	}
+
+	public String getBaseDir() {
+	    return baseDir;
+    }
+
+	public void setBaseDir(String baseDir) {
+	    this.baseDir = baseDir;
+    }
+
+	public PortMapping[] getPortMappings() {
+	    return portMappings;
+    }
+
+	public void setPortMappings(PortMapping[] portMappings) {
+	    this.portMappings = portMappings;
+    }
+
+	public AppType[] getAppTypes() {
+	    return appTypes;
+    }
+
+	public void setAppTypes(AppType[] appTypes) {
+	    this.appTypes = appTypes;
+    }
+
+	public Property[] getProperties() {
+	    return properties;
+    }
+
+	public void setProperties(Property[] properties) {
+	    this.properties = properties;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeInstanceData.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeInstanceData.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeInstanceData.java
new file mode 100644
index 0000000..a08d032
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeInstanceData.java
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.pojo;
+
+import org.jclouds.compute.domain.NodeMetadata;
+
+/**
+ * This class holds the data to be published to BAM.
+ */
+public class CartridgeInstanceData {
+
+    // Cartridge type
+    private String type;
+    
+    private String nodeId;
+    
+    private String domain;
+    
+    private String subDomain;
+    
+    private String iaas;
+    
+    private String status;
+    
+    private String tenantRange;
+    
+    private String alias;
+    
+    private boolean isMultiTenant;
+    
+    private NodeMetadata metaData;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getNodeId() {
+        return nodeId;
+    }
+
+    public void setNodeId(String nodeId) {
+        this.nodeId = nodeId;
+    }
+
+    public String getDomain() {
+        return domain;
+    }
+
+    public void setDomain(String domain) {
+        this.domain = domain;
+    }
+
+    public String getSubDomain() {
+        return subDomain;
+    }
+
+    public void setSubDomain(String subDomain) {
+        this.subDomain = subDomain;
+    }
+
+    public String getIaas() {
+        return iaas;
+    }
+
+    public void setIaas(String iaas) {
+        this.iaas = iaas;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public NodeMetadata getMetaData() {
+        return metaData;
+    }
+
+    public void setMetaData(NodeMetadata metaData) {
+        this.metaData = metaData;
+    }
+
+    public String getTenantRange() {
+        return tenantRange;
+    }
+
+    public void setTenantRange(String tenantRange) {
+        this.tenantRange = tenantRange;
+    }
+
+    public boolean isMultiTenant() {
+        return isMultiTenant;
+    }
+
+    public void setMultiTenant(boolean isMultiTenant) {
+        this.isMultiTenant = isMultiTenant;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+    
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/DataPublisherConfig.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/DataPublisherConfig.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/DataPublisherConfig.java
new file mode 100644
index 0000000..9e35926
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/DataPublisherConfig.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.pojo;
+
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
+
+/**
+ * @author nirmal
+ *
+ */
+public class DataPublisherConfig {
+
+    private String bamUsername = CloudControllerConstants.DEFAULT_BAM_SERVER_USER_NAME;
+    private String bamPassword = CloudControllerConstants.DEFAULT_BAM_SERVER_PASSWORD;
+    private String dataPublisherCron = CloudControllerConstants.PUB_CRON_EXPRESSION;
+    private String cassandraConnUrl = CloudControllerConstants.DEFAULT_CASSANDRA_URL;
+    private String cassandraUser = CloudControllerConstants.DEFAULT_CASSANDRA_USER;
+    private String cassandraPassword = CloudControllerConstants.DEFAULT_CASSANDRA_PASSWORD;
+    
+    public String getBamUsername() {
+        return bamUsername;
+    }
+
+    public void setBamUsername(String bamUsername) {
+        this.bamUsername = bamUsername;
+    }
+
+    public String getBamPassword() {
+        return bamPassword;
+    }
+
+    public void setBamPassword(String bamPassword) {
+        this.bamPassword = bamPassword;
+    }
+
+    public String getDataPublisherCron() {
+        return dataPublisherCron;
+    }
+
+    public void setDataPublisherCron(String dataPublisherCron) {
+        this.dataPublisherCron = dataPublisherCron;
+    }
+    public String getCassandraConnUrl() {
+        return cassandraConnUrl;
+    }
+
+    public void setCassandraConnUrl(String cassandraHostAddr) {
+        this.cassandraConnUrl = cassandraHostAddr;
+    }
+
+    public String getCassandraUser() {
+        return cassandraUser;
+    }
+
+    public void setCassandraUser(String cassandraUser) {
+        this.cassandraUser = cassandraUser;
+    }
+
+    public String getCassandraPassword() {
+        return cassandraPassword;
+    }
+
+    public void setCassandraPassword(String cassandraPassword) {
+        this.cassandraPassword = cassandraPassword;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Host.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Host.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Host.java
new file mode 100644
index 0000000..f8d586b
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Host.java
@@ -0,0 +1,73 @@
+package org.apache.stratos.cloud.controller.pojo;
+
+import org.jclouds.compute.ComputeService;
+import org.jclouds.compute.domain.Template;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Host extends Zone {
+    private String id;
+    private String type;
+    private Map<String, String> properties = new HashMap<String, String>();
+
+    private transient ComputeService computeService;
+
+    private transient Template template;
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+     public Map<String, String> getProperties() {
+        return properties;
+    }
+
+    public void setProperties(Map<String, String> properties) {
+        this.properties = properties;
+    }
+
+     public void setProperty(String key, String value) {
+
+        if (key != null && value != null) {
+            getProperties().put(key, value);
+        }
+    }
+
+    public String getProperty(String key) {
+        if(getProperties().get(key) != null) {
+            return getProperties().get(key);
+        } else {
+            return super.getProperty(key);
+        }
+    }
+
+     public ComputeService getComputeService() {
+        return computeService;
+    }
+
+    public void setComputeService(ComputeService computeService) {
+        this.computeService = computeService;
+    }
+
+    public Template getTemplate() {
+        return template;
+    }
+
+    public void setTemplate(Template template) {
+        this.template = template;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasContext.java
new file mode 100644
index 0000000..b5d8e95
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasContext.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.pojo;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jclouds.compute.domain.NodeMetadata;
+
+/**
+ * 
+ * Holds runtime data of an IaaS
+ */
+public class IaasContext implements Serializable{
+	
+    private static final long serialVersionUID = 3370272526949562217L;
+
+	private String type;
+	
+	private List<String> nodeIds;
+	
+	/**
+	 * Key - node id
+	 * Value - public ip
+	 */
+	private Map<String, String> nodeToPublicIp;
+	
+	/**
+	 * Key - node id
+	 * Value - NodeMetadata object which has information on this node.
+	 */
+	private transient Map<String, NodeMetadata> nodes;
+	
+	private List<String> toBeRemovedNodeIds;
+	
+	public IaasContext(String iaasType) {
+		this.type = iaasType;
+		nodeToPublicIp = new HashMap<String, String>();
+		nodeIds = new ArrayList<String>();
+		nodes = new HashMap<String, NodeMetadata>();
+		toBeRemovedNodeIds = new ArrayList<String>();
+    }
+
+	public Map<String, String> getNodeToPublicIp() {
+		return nodeToPublicIp;
+	}
+	
+	public Map<String, NodeMetadata> getNodes() {
+		return nodes;
+	}
+	
+	public void setToBeRemovedNodeIds(List<String> list) {
+		this.toBeRemovedNodeIds = list;
+	}
+	
+	public List<String> getAllNodeIds() {
+		List<String> allNodeIds = new ArrayList<String>(nodeIds);
+		allNodeIds.addAll(toBeRemovedNodeIds);
+		return allNodeIds;
+	}
+	
+	public List<String> getNodeIds() {
+		return nodeIds;
+	}
+	
+	public List<String> getToBeRemovedNodeIds() {
+		return toBeRemovedNodeIds;
+	}
+	
+	public boolean didISpawn(String nodeId) {
+		if(nodeIds.contains(nodeId) || toBeRemovedNodeIds.contains(nodeId)){
+			return true;
+		}
+		return false;
+	}
+	
+	public void addNodeId(String nodeId) {
+		nodeIds.add(nodeId);
+	}
+	
+	public void addNodeToPublicIp(String nodeId, String publicIp) {
+		nodeToPublicIp.put(nodeId, publicIp);
+	}
+	
+	public void addToBeRemovedNodeId(String nodeId) {
+		toBeRemovedNodeIds.add(nodeId);
+	}
+	
+	public void removeNodeId(String nodeId) {
+		if(nodeIds.remove(nodeId)){
+			toBeRemovedNodeIds.add(nodeId);
+		}
+	}
+	
+	public void removeToBeRemovedNodeId(String nodeId) {
+		toBeRemovedNodeIds.remove(nodeId);
+	}
+	
+	public void setNodeIds(List<String> nodeIds) {
+		this.nodeIds = nodeIds;
+	}
+	
+	public String lastlySpawnedNode() {
+		return nodeIds.get(nodeIds.size()-1);
+	}
+	
+	public void addNodeMetadata(NodeMetadata node) {
+	    if(nodes == null){
+	        nodes = new HashMap<String, NodeMetadata>();
+	    }
+		nodes.put(node.getId(), node);
+	}
+	
+    public void removeNodeMetadata(NodeMetadata node) {
+        if (nodes != null) {
+            nodes.remove(node.getId());
+        }
+    }
+	
+	public void removeNodeIdToPublicIp(String nodeId){
+		nodeToPublicIp.remove(nodeId);
+	}
+	
+	public NodeMetadata getNode(String nodeId) {
+	    if(nodes == null) {
+	        return null;
+	    }
+		return nodes.get(nodeId);
+	}
+	
+	public String getPublicIp(String nodeId){
+		return nodeToPublicIp.get(nodeId);
+	}
+
+	public String getType() {
+        return type;
+    }
+
+	public void setType(String type) {
+        this.type = type;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java
new file mode 100644
index 0000000..bffd6cf
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java
@@ -0,0 +1,271 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.pojo;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.stratos.cloud.controller.interfaces.Iaas;
+import org.jclouds.compute.ComputeService;
+import org.jclouds.compute.domain.Template;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This is the basic data structure which holds an IaaS specific details.
+ * NOTE: If you add a new attribute, please assign it in the constructor too.
+ */
+public class IaasProvider implements Serializable{
+   
+    private static final long serialVersionUID = -940288190885166118L;
+
+	/**
+     * Type of the IaasProvider.
+     */
+    private String type;
+
+    private List<Region>  listOfRegions;
+    
+    /**
+     * Fully qualified class name of an implementation of {@link org.apache.stratos.cloud.controller.interfaces.Iaas}
+     */
+    private String className;
+    
+    /**
+     * human description of this IaaS provider
+     */
+    private String name;
+    
+    /**
+     * Property map of this IaaS provider.
+     */
+    private Map<String, String> properties = new HashMap<String, String>();
+    
+    /**
+     * Image identifier.
+     */
+    private String image;
+    
+
+    /**
+     * Scale up order and scale down order of the IaaS.
+     */
+    private int scaleUpOrder = -1, scaleDownOrder = -1;
+    
+    private String provider, identity, credential;
+    
+    private transient ComputeService computeService;
+    
+    private transient Template template;
+    
+    private byte[] payload;
+    
+    /** 
+     * Corresponding {@link org.apache.stratos.cloud.controller.interfaces.Iaas} implementation
+     */
+    private transient Iaas iaas;
+    
+    public IaasProvider(){}
+    
+    public IaasProvider(IaasProvider anIaasProvider){
+    	this.type = anIaasProvider.getType();
+    	this.name = anIaasProvider.getName();
+    	this.className = anIaasProvider.getClassName();
+    	this.properties = anIaasProvider.getProperties();
+    	this.image = anIaasProvider.getImage();
+    	this.scaleUpOrder = anIaasProvider.getScaleUpOrder();
+    	this.scaleDownOrder = anIaasProvider.getScaleDownOrder();
+    	this.provider = anIaasProvider.getProvider();
+    	this.identity = anIaasProvider.getIdentity();
+    	this.credential = anIaasProvider.getCredential();
+    	this.computeService = anIaasProvider.getComputeService();
+    	this.template = anIaasProvider.getTemplate();
+    	this.payload = anIaasProvider.getPayload();
+    	this.iaas = anIaasProvider.getIaas();
+    }
+    
+    public String getType() {
+        return type;
+    }
+    
+    public void setType(String id) {
+        this.type = id;
+    }
+    
+    public String getProperty(String key) {
+        return properties.get(key);
+    }
+
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+    
+    public void setProperty(String key, String value) {
+        
+        if(key != null && value != null){
+            properties.put(key, value);
+        }
+    }
+
+    public void setProperties(Map<String, String> properties) {
+        this.properties = properties;
+    }
+
+    public String getImage() {
+        return image;
+    }
+
+    public void setImage(String image) {
+        this.image = image;
+    }
+
+    public int getScaleUpOrder() {
+        return scaleUpOrder;
+    }
+
+    public void setScaleUpOrder(int scaleUpOrder) {
+        this.scaleUpOrder = scaleUpOrder;
+    }
+
+    public int getScaleDownOrder() {
+        return scaleDownOrder;
+    }
+
+    public void setScaleDownOrder(int scaleDownOrder) {
+        this.scaleDownOrder = scaleDownOrder;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getProvider() {
+        return provider;
+    }
+
+    public void setProvider(String provider) {
+        this.provider = provider;
+    }
+
+    public String getIdentity() {
+        return identity;
+    }
+
+    public void setIdentity(String identity) {
+        this.identity = identity;
+    }
+
+    public String getCredential() {
+        return credential;
+    }
+
+    public void setCredential(String credential) {
+        this.credential = credential;
+    }
+
+    public ComputeService getComputeService() {
+        return computeService;
+    }
+
+    public void setComputeService(ComputeService computeService) {
+        this.computeService = computeService;
+    }
+
+    public Template getTemplate() {
+        return template;
+    }
+
+    public void setTemplate(Template template) {
+        this.template = template;
+    }
+    
+    
+
+    public boolean equals(Object o) {
+        if(o instanceof IaasProvider){
+            return ((IaasProvider) o).getType().equals(this.getType());
+        }
+        
+        return false;
+    }
+    
+    public int hashCode() {
+        return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers
+            append(type).
+            toHashCode();
+    }
+    
+    public IaasProvider copy(){
+		return new IaasProvider(this);
+	}
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+    public byte [] getPayload() {
+        return payload;
+    }
+
+    public void setPayload(byte[]payload) {
+        this.payload = payload;
+    }
+
+    public Iaas getIaas() {
+        return iaas;
+    }
+
+    public void setIaas(Iaas iaas) {
+        this.iaas = iaas;
+    }
+    
+    public void reset(){
+//    	nodeIds = new ArrayList<String>();
+//    	nodes = new HashMap<String, NodeMetadata>();
+//    	toBeRemovedNodeIds = new ArrayList<String>();
+    }
+
+    /**
+     * Partition the IaaS using different region
+     */
+    public List<Region> getListOfRegions() {
+        return listOfRegions;
+    }
+
+    public void setListOfRegions(List<Region> listOfRegions) {
+        this.listOfRegions = listOfRegions;
+    }
+
+    public void addRegion(Region region) {
+        this.listOfRegions.add(region);
+    }
+
+    public void removeRegion(Region region) {
+        this.listOfRegions.remove(region);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/LocationScope.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/LocationScope.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/LocationScope.java
new file mode 100644
index 0000000..777cf3b
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/LocationScope.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.pojo;
+
+/**
+ * this contains the scope of a IaaS spanned across the geography.
+ */
+public class LocationScope {
+    private String zone;
+    private String network;
+    private String host;
+    private String region;
+    private String cloud;
+
+    public String getZone() {
+        return zone;
+    }
+
+    public void setZone(String zone) {
+        this.zone = zone;
+    }
+
+    public String getNetwork() {
+        return network;
+    }
+
+    public void setNetwork(String network) {
+        this.network = network;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public String getRegion() {
+        return region;
+    }
+
+    public void setRegion(String region) {
+        this.region = region;
+    }
+
+    public String getCloud() {
+        return cloud;
+    }
+
+    public void setCloud(String cloud) {
+        this.cloud = cloud;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/PortMapping.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/PortMapping.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/PortMapping.java
new file mode 100644
index 0000000..65b52f7
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/PortMapping.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.pojo;
+
+import java.io.Serializable;
+
+public class PortMapping implements Serializable{
+	
+    private static final long serialVersionUID = -5387564414633460306L;
+	private String protocol;
+	private String port;
+	private String proxyPort;
+	
+	public PortMapping(){
+		
+	}
+	
+	public PortMapping(String protocol, String port, String proxyPort){
+		this.protocol = protocol;
+		this.port = port;
+		this.proxyPort = proxyPort;
+	}
+
+	public String getProtocol() {
+    	return protocol;
+    }
+
+	public void setProtocol(String protocol) {
+    	this.protocol = protocol;
+    }
+
+	public String getPort() {
+    	return port;
+    }
+
+	public void setPort(String port) {
+    	this.port = port;
+    }
+
+	public String getProxyPort() {
+    	return proxyPort;
+    }
+
+	public void setProxyPort(String proxyPort) {
+    	this.proxyPort = proxyPort;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Region.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Region.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Region.java
new file mode 100644
index 0000000..fb1558f
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Region.java
@@ -0,0 +1,125 @@
+package org.apache.stratos.cloud.controller.pojo;
+
+import org.jclouds.compute.ComputeService;
+import org.jclouds.compute.domain.Template;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Region extends IaasProvider {
+    private String imageId;
+    private String identity;
+    private String credential;
+    private String id;
+    private String type;
+    private List<Zone> listOfZones;
+
+    private transient ComputeService computeService;
+
+    private transient Template template;
+
+    private Map<String, String> properties = new HashMap<String, String>();
+
+    public String getProperty(String key) {
+        if(getProperties().get(key) != null) {
+            return getProperties().get(key);
+        } else {
+            return super.getProperty(key);
+        }
+    }
+
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+
+    public void setProperty(String key, String value) {
+
+        if (key != null && value != null) {
+            getProperties().put(key, value);
+        }
+    }
+
+    public void setProperties(Map<String, String> properties) {
+        this.properties = properties;
+    }
+
+
+    public String getImageId() {
+        return imageId;
+    }
+
+    public void setImageId(String imageId) {
+        this.imageId = imageId;
+    }
+
+    public String getIdentity() {
+        if(identity == null) {
+            return super.getIdentity();
+        }
+        return identity;
+    }
+
+    public void setIdentity(String identity) {
+        this.identity = identity;
+    }
+
+    public String getCredential() {
+        if(credential == null) {
+            return super.getCredential();
+        }
+        return credential;
+    }
+
+    public void setCredential(String credential) {
+        this.credential = credential;
+    }
+
+    public ComputeService getComputeService() {
+        return computeService;
+    }
+
+    public void setComputeService(ComputeService computeService) {
+        this.computeService = computeService;
+    }
+
+    public Template getTemplate() {
+        return template;
+    }
+
+    public void setTemplate(Template template) {
+        this.template = template;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public List<Zone> getListOfZones() {
+        return listOfZones;
+    }
+
+    public void setListOfZones(List<Zone> listOfZones) {
+        this.listOfZones = listOfZones;
+    }
+
+    public void addZone(Zone zone) {
+        this.listOfZones.add(zone);
+    }
+
+    public void removeZone(Zone zone) {
+        this.listOfZones.remove(zone);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/2eaac66e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Registrant.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Registrant.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Registrant.java
index 812abaf..4ef14cc 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Registrant.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Registrant.java
@@ -18,8 +18,6 @@
  */
 package org.apache.stratos.cloud.controller.pojo;
 
-import org.apache.stratos.messaging.util.Properties;
-
 /**
  * Upon a new subscription, Stratos Manager would send this POJO.
  * @author nirmal