Refactoring cloud controller component to simplify the package structure

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

Branch: refs/heads/master
Commit: 8c359dc1bc2d21d7e2ff85b3bd20b5d58345af6f
Parents: 2ec7fed
Author: Imesh Gunaratne <[email protected]>
Authored: Fri Nov 28 21:03:18 2014 +0530
Committer: Imesh Gunaratne <[email protected]>
Committed: Fri Nov 28 21:03:18 2014 +0530

----------------------------------------------------------------------
 .../org.apache.stratos.cloud.controller/pom.xml |   14 +-
 .../controller/axiom/AxiomXpathParserUtil.java  |  261 ---
 .../parser/CloudControllerConfigParser.java     |  200 --
 .../axiom/parser/IaasProviderConfigParser.java  |  306 ---
 .../concurrent/PartitionValidatorCallable.java  |   10 +-
 .../parser/CloudControllerConfigParser.java     |  200 ++
 .../config/parser/IaasProviderConfigParser.java |  306 +++
 .../context/FasterLookUpDataHolder.java         |  479 ++++
 .../deployers/CloudControllerDeployer.java      |    8 +-
 .../deployment/partition/Partition.java         |  179 --
 .../cloud/controller/domain/AppType.java        |   62 +
 .../domain/ApplicationClusterContextDTO.java    |  143 ++
 .../cloud/controller/domain/Cartridge.java      |  404 ++++
 .../controller/domain/CartridgeConfig.java      |  317 +++
 .../cloud/controller/domain/CartridgeInfo.java  |  232 ++
 .../domain/CartridgeInstanceData.java           |  120 +
 .../cloud/controller/domain/ClusterContext.java |  132 ++
 .../domain/CompositeApplicationDefinition.java  |   38 +
 .../controller/domain/ConfigCartridge.java      |   17 +
 .../controller/domain/ConfigDependencies.java   |   26 +
 .../controller/domain/ConfigDependencyPair.java |   29 +
 .../cloud/controller/domain/ConfigGroup.java    |   33 +
 .../cloud/controller/domain/Container.java      |   59 +
 .../domain/ContainerClusterContext.java         |   89 +
 .../controller/domain/DataPublisherConfig.java  |   85 +
 .../cloud/controller/domain/Dependencies.java   |   48 +
 .../cloud/controller/domain/IaasConfig.java     |  174 ++
 .../cloud/controller/domain/IaasProvider.java   |  265 +++
 .../domain/KubernetesClusterContext.java        |  187 ++
 .../controller/domain/LoadbalancerConfig.java   |   73 +
 .../cloud/controller/domain/MemberContext.java  |  242 ++
 .../controller/domain/NetworkInterface.java     |   97 +
 .../controller/domain/NetworkInterfaces.java    |   55 +
 .../cloud/controller/domain/Partition.java      |  179 ++
 .../cloud/controller/domain/Persistence.java    |   53 +
 .../cloud/controller/domain/PortMapping.java    |   69 +
 .../cloud/controller/domain/Registrant.java     |  105 +
 .../cloud/controller/domain/ServiceGroup.java   |   68 +
 .../cloud/controller/domain/TopologyConfig.java |   59 +
 .../stratos/cloud/controller/domain/Volume.java |  126 +
 .../domain/payload/MetaDataHolder.java          |   99 +
 ...inerClusterContextToKubernetesContainer.java |   10 +-
 ...tainerClusterContextToKubernetesService.java |    8 +-
 ...erClusterContextToReplicationController.java |    6 +-
 .../functions/PodToMemberContext.java           |    2 +-
 .../hector/CassandraDataRetriever.java          |  182 --
 .../controller/hive/HiveQueryExecutor.java      |  172 --
 .../cloud/controller/iaas/AWSEC2Iaas.java       |  637 ++++++
 .../cloud/controller/iaas/CloudstackIaas.java   |  540 +++++
 .../cloud/controller/iaas/DockerIaas.java       |  151 ++
 .../stratos/cloud/controller/iaas/GCEIaas.java  |  454 ++++
 .../stratos/cloud/controller/iaas/Iaas.java     |  173 ++
 .../controller/iaas/OpenstackNovaIaas.java      |  740 ++++++
 .../cloud/controller/iaas/VCloudIaas.java       |  262 +++
 .../validators/AWSEC2PartitionValidator.java    |  122 +
 .../CloudstackPartitionValidator.java           |   52 +
 .../validators/DockerPartitionValidator.java    |   78 +
 .../iaas/validators/GCEPartitionValidator.java  |   53 +
 .../OpenstackNovaPartitionValidator.java        |  121 +
 .../iaas/validators/PartitionValidator.java     |   47 +
 .../validators/VCloudPartitionValidator.java    |   55 +
 .../cloud/controller/iaases/AWSEC2Iaas.java     |  638 ------
 .../cloud/controller/iaases/CloudstackIaas.java |  541 -----
 .../cloud/controller/iaases/DockerIaas.java     |  152 --
 .../cloud/controller/iaases/GCEIaas.java        |  455 ----
 .../controller/iaases/OpenstackNovaIaas.java    |  741 ------
 .../cloud/controller/iaases/VCloudIaas.java     |  263 ---
 .../impl/CloudControllerServiceImpl.java        | 2149 ------------------
 .../interfaces/CloudControllerService.java      |  231 --
 .../cloud/controller/interfaces/Iaas.java       |  173 --
 .../CloudControllerServiceComponent.java        |   13 +-
 .../internal/ServiceReferenceHolder.java        |   79 +
 .../jcloud/ComputeServiceBuilderUtil.java       |  188 --
 .../CartridgeInstanceDataPublisher.java         |  213 ++
 .../TopologySynchronizerTaskScheduler.java      |   82 +
 .../application/ApplicationTopicReceiver.java   |   81 +
 .../status/ClusterStatusTopicReceiver.java      |  114 +
 .../status/InstanceStatusTopicReceiver.java     |  111 +
 .../messaging/topology/TopologyBuilder.java     |  962 ++++++++
 .../topology/TopologyEventPublisher.java        |  320 +++
 .../messaging/topology/TopologyManager.java     |  117 +
 .../topology/TopologySynchronizerTask.java      |   67 +
 .../cloud/controller/persist/Deserializer.java  |   96 -
 .../cloud/controller/persist/Serializer.java    |  115 -
 .../stratos/cloud/controller/pojo/AppType.java  |   62 -
 .../pojo/ApplicationClusterContextDTO.java      |  143 --
 .../cloud/controller/pojo/Cartridge.java        |  404 ----
 .../cloud/controller/pojo/CartridgeConfig.java  |  317 ---
 .../cloud/controller/pojo/CartridgeInfo.java    |  232 --
 .../controller/pojo/CartridgeInstanceData.java  |  120 -
 .../cloud/controller/pojo/ClusterContext.java   |  132 --
 .../pojo/CompositeApplicationDefinition.java    |   38 -
 .../cloud/controller/pojo/ConfigCartridge.java  |   17 -
 .../controller/pojo/ConfigDependencies.java     |   29 -
 .../controller/pojo/ConfigDependencyPair.java   |   29 -
 .../cloud/controller/pojo/ConfigGroup.java      |   35 -
 .../cloud/controller/pojo/Container.java        |   59 -
 .../pojo/ContainerClusterContext.java           |   89 -
 .../controller/pojo/DataPublisherConfig.java    |   85 -
 .../cloud/controller/pojo/Dependencies.java     |   48 -
 .../cloud/controller/pojo/IaasConfig.java       |  174 --
 .../cloud/controller/pojo/IaasProvider.java     |  265 ---
 .../pojo/KubernetesClusterContext.java          |  187 --
 .../controller/pojo/LoadbalancerConfig.java     |   73 -
 .../cloud/controller/pojo/MemberContext.java    |  243 --
 .../cloud/controller/pojo/NetworkInterface.java |   97 -
 .../controller/pojo/NetworkInterfaces.java      |   55 -
 .../cloud/controller/pojo/Persistence.java      |   53 -
 .../cloud/controller/pojo/PortMapping.java      |   69 -
 .../cloud/controller/pojo/Registrant.java       |  105 -
 .../cloud/controller/pojo/ServiceGroup.java     |   69 -
 .../cloud/controller/pojo/TopologyConfig.java   |   59 -
 .../stratos/cloud/controller/pojo/Volume.java   |  126 -
 .../controller/pojo/payload/MetaDataHolder.java |   99 -
 .../CartridgeInstanceDataPublisher.java         |  213 --
 .../TopologySynchronizerTaskScheduler.java      |   82 -
 .../application/ApplicationTopicReceiver.java   |   81 -
 .../status/ClusterStatusTopicReceiver.java      |  114 -
 .../status/InstanceStatusTopicReceiver.java     |  113 -
 .../cloud/controller/registry/Deserializer.java |   96 +
 .../controller/registry/RegistryManager.java    |    5 +-
 .../cloud/controller/registry/Serializer.java   |  115 +
 .../runtime/FasterLookUpDataHolder.java         |  479 ----
 .../services/CloudControllerService.java        |  231 ++
 .../services/CloudControllerServiceImpl.java    | 2148 +++++++++++++++++
 .../controller/topology/TopologyBuilder.java    |  962 --------
 .../topology/TopologyEventPublisher.java        |  321 ---
 .../controller/topology/TopologyManager.java    |  117 -
 .../topology/TopologySynchronizerTask.java      |   67 -
 .../controller/util/AxiomXpathParserUtil.java   |  260 +++
 .../controller/util/CloudControllerUtil.java    |   11 +-
 .../util/ComputeServiceBuilderUtil.java         |  187 ++
 .../controller/util/PodActivationWatcher.java   |    6 +-
 .../controller/util/ServiceReferenceHolder.java |   79 -
 .../validate/AWSEC2PartitionValidator.java      |  123 -
 .../validate/CloudstackPartitionValidator.java  |   53 -
 .../validate/DockerPartitionValidator.java      |   79 -
 .../validate/GCEPartitionValidator.java         |   54 -
 .../OpenstackNovaPartitionValidator.java        |  122 -
 .../validate/VCloudPartitionValidator.java      |   56 -
 .../validate/interfaces/PartitionValidator.java |   47 -
 .../src/main/resources/META-INF/services.xml    |    2 +-
 .../service/axiom/AxiomValidationTest.java      |    2 +-
 .../service/axiom/AxiomXpathParserTest.java     |    6 +-
 .../axiom/FasterLookupDataHolderTest.java       |    4 +-
 .../src/test/resources/cloud-controller.xml     |    2 +-
 .../main/resources/conf/cloud-controller.xml    |    4 +-
 .../all/repository/conf/cloud-controller.xml    |    8 +-
 .../cc/repository/conf/cloud-controller.xml     |    6 +-
 149 files changed, 13400 insertions(+), 13782 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/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 f09c150..1b88759 100644
--- a/components/org.apache.stratos.cloud.controller/pom.xml
+++ b/components/org.apache.stratos.cloud.controller/pom.xml
@@ -50,10 +50,10 @@
                         <Bundle-Name>${project.artifactId}</Bundle-Name>
                         <Export-Package>
                             org.apache.stratos.cloud.controller.interfaces.*,
-                            org.apache.stratos.cloud.controller.publisher.*,
+                            
org.apache.stratos.cloud.controller.messaging.publisher.*,
                             org.apache.stratos.cloud.controller.topic.*,
-                            org.apache.stratos.cloud.controller.topology.*,
-                            org.apache.stratos.cloud.controller.iaases.*,
+                            
org.apache.stratos.cloud.controller.messaging.topology.*,
+                            org.apache.stratos.cloud.controller.iaas.*,
                             org.apache.stratos.cloud.controller.pojo.*,
                             org.apache.stratos.cloud.controller.deployers.*,
                             org.apache.stratos.cloud.controller.exception.*,
@@ -61,14 +61,14 @@
                         </Export-Package>
                         <Private-Package>
                             !org.apache.stratos.cloud.controller.interfaces.*,
-                            !org.apache.stratos.cloud.controller.publisher.*,
+                            
!org.apache.stratos.cloud.controller.messaging.publisher.*,
                             !org.apache.stratos.cloud.controller.topic.*,
-                            !org.apache.stratos.cloud.controller.iaases.*,
+                            !org.apache.stratos.cloud.controller.iaas.*,
                             !org.apache.stratos.cloud.controller.pojo.*,
                             
!org.apache.stratos.cloud.controller.pojo.application.*,
                             !org.apache.stratos.cloud.controller.deployers.*,
                             !org.apache.stratos.cloud.controller.exception.*,
-                            !org.apache.stratos.cloud.controller.topology.*,
+                            
!org.apache.stratos.cloud.controller.messaging.topology.*,
                             org.apache.stratos.cloud.controller.*,
                         </Private-Package>
                         <Import-Package>
@@ -91,7 +91,7 @@
                        <groupId>org.apache.axis2</groupId>
                        <artifactId>axis2-java2wsdl-maven-plugin</artifactId>
                        <configuration>
-                              
<className>org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl</className>
+                              
<className>org.apache.stratos.cloud.controller.services.CloudControllerServiceImpl</className>
                               
<outputFileName>target/generated-resources/wsdl/CloudControllerService.wsdl</outputFileName>
                               <serviceName>CloudControllerService</serviceName>
                        </configuration>

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java
deleted file mode 100644
index 9ad2777..0000000
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParserUtil.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.stratos.cloud.controller.axiom;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNode;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.impl.dom.DOOMAbstractFactory;
-import org.apache.axiom.om.impl.dom.ElementImpl;
-import org.apache.axiom.om.xpath.AXIOMXPath;
-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.util.*;
-import org.jaxen.JaxenException;
-import org.w3c.dom.Element;
-import org.wso2.securevault.SecretResolver;
-import org.wso2.securevault.SecretResolverFactory;
-import org.xml.sax.SAXException;
-
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.transform.Source;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import javax.xml.validation.Validator;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * This class is parsing configuration files using Axiom Xpath.
- */
-public class AxiomXpathParserUtil {
-
-    private static final Log LOG = 
LogFactory.getLog(AxiomXpathParserUtil.class);
-    
-    private AxiomXpathParserUtil(){}
-    
-    public static OMElement parse(File xmlSource) throws 
MalformedConfigurationFileException,
-        IllegalArgumentException {
-
-        OMElement documentElement;
-
-        if (xmlSource == null) {
-            String msg = "File is null.";
-            LOG.error(msg);
-            throw new IllegalArgumentException(msg);
-        }
-
-        try {
-            documentElement = new 
StAXOMBuilder(xmlSource.getPath()).getDocumentElement();
-            return documentElement;
-
-        } catch (XMLStreamException e) {
-            String msg = "Failed to parse the configuration file : " + 
xmlSource.getPath();
-            LOG.error(msg, e);
-            throw new MalformedConfigurationFileException(msg, e);
-        } catch (FileNotFoundException e) {
-            String msg = "Configuration file cannot be found : " + 
xmlSource.getPath();
-            LOG.error(msg);
-            throw new MalformedConfigurationFileException(msg);
-        }
-
-    }
-
-    private static Element getDOMElement(final OMElement omElement) {
-
-        // Get the StAX reader from the created element
-        XMLStreamReader llomReader = omElement.getXMLStreamReader();
-
-        // Create the DOOM OMFactory
-        OMFactory doomFactory = DOOMAbstractFactory.getOMFactory();
-
-        // Create the new builder
-        StAXOMBuilder doomBuilder = new StAXOMBuilder(doomFactory, llomReader);
-
-        // Get the document element
-        OMElement newElem = doomBuilder.getDocumentElement();
-
-        return newElem instanceof Element ? (Element) newElem : null;
-    }
-
-    private static OMElement getElement(final Object obj) {
-        OMNode node;
-        if ((obj instanceof OMNode) && (node = (OMNode) obj).getType() == 
OMNode.ELEMENT_NODE) {
-
-            OMElement element = (OMElement) node;
-
-            return element;
-
-        }
-
-        return null;
-    }
-
-    public static OMElement getElement(final String fileName, final OMElement 
rootElt,
-        final String eltStr, final String xpath) {
-        List<?> nodes = getMatchingNodes(xpath, rootElt);
-        neglectingWarn(fileName, eltStr, nodes.size());
-        OMElement element = getElement(nodes.get(0));
-        return element;
-    }
-
-    public static OMElement getFirstChildElement(final OMElement root, final 
String childName) {
-        Iterator<?> it = root.getChildrenWithName(new QName(childName));
-        if (it.hasNext()) {
-            return (OMElement) it.next();
-        }
-
-        return null;
-    }
-
-    private static void neglectingWarn(final String fileName, final String 
elt, final int size) {
-        if (size > 1) {
-            LOG.warn(fileName + " contains more than one " + elt + " 
elements!" +
-                     " Elements other than the first will be neglected.");
-        }
-    }
-
-    public static void plainTextWarn(final String elt) {
-        LOG.warn("Unable to find a value for " + elt + " element from Secure 
Vault." +
-                 "Hence we will try to assign the plain text value (if 
specified).");
-    }
-
-    /**
-     * @param xpath
-     *            XPATH expression to be read.
-     * @param elt
-     *            OMElement to be used for the search.
-     * @return List matching OMNode list
-     */
-    @SuppressWarnings("unchecked")
-    public static OMNode getFirstMatchingNode(final String xpath, final 
OMElement elt) throws MalformedConfigurationFileException{
-
-        AXIOMXPath axiomXpath;
-        List<OMNode> nodeList = null;
-        try {
-            axiomXpath = new AXIOMXPath(xpath);
-            nodeList = axiomXpath.selectNodes(elt);
-            return nodeList.isEmpty() ?  null : nodeList.get(0);
-        } catch (JaxenException e) {
-            String msg = "Error occurred while reading the Xpath (" + xpath + 
")";
-            LOG.error(msg, e);
-            throw new MalformedConfigurationFileException(msg, e);
-        }
-
-    }
-
-    /**
-     * @param xpath
-     *            XPATH expression to be read.
-     * @return List matching list
-     */
-    @SuppressWarnings("unchecked")
-    public static List<OMNode> getMatchingNodes(OMElement elt, final String 
xpath) throws MalformedConfigurationFileException{
-
-        AXIOMXPath axiomXpath;
-        List<OMNode> nodeList = null;
-        try {
-            axiomXpath = new AXIOMXPath(xpath);
-            nodeList = axiomXpath.selectNodes(elt);
-            return nodeList;
-        } catch (JaxenException e) {
-            String msg = "Error occurred while reading the Xpath (" + xpath + 
")";
-            LOG.error(msg, e);
-            throw new MalformedConfigurationFileException(msg, e);
-        }
-
-    }
-
-    /**
-     * @param xpath
-     *            XPATH expression to be read.
-     * @param elt
-     *            OMElement to be used for the search.
-     * @return List matching OMNode list
-     */
-    @SuppressWarnings("unchecked")
-    public static List<OMNode> getMatchingNodes(final String xpath, final 
OMElement elt) throws MalformedConfigurationFileException{
-
-        AXIOMXPath axiomXpath;
-        List<OMNode> nodeList = null;
-        try {
-            axiomXpath = new AXIOMXPath(xpath);
-            nodeList = axiomXpath.selectNodes(elt);
-            return nodeList;
-        } catch (JaxenException e) {
-            String msg = "Error occurred while reading the Xpath (" + xpath + 
")";
-            LOG.error(msg, e);
-            throw new MalformedConfigurationFileException(msg, e);
-        }
-
-    }
-
-    public static void validate(final OMElement omElement, final File 
schemaFile) throws SAXException, IOException {
-
-        Element sourceElement;
-
-        // if the OMElement is created using DOM implementation use it
-        if (omElement instanceof ElementImpl) {
-            sourceElement = (Element) omElement;
-        } else { // else convert from llom to dom
-            sourceElement = getDOMElement(omElement);
-        }
-
-        // Create a SchemaFactory capable of understanding WXS schemas.
-
-        // Load a WXS schema, represented by a Schema instance.
-        SchemaFactory factory = 
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-        Source source = new StreamSource(schemaFile);
-
-        // Create a Validator object, which can be used to validate
-        // an instance document.
-        Schema schema = factory.newSchema(source);
-        Validator validator = schema.newValidator();
-
-        // Validate the DOM tree.
-        validator.validate(new DOMSource(sourceElement));
-    }
-
-    public static String resolveSecret(final OMElement docElt, final OMElement 
elt) {
-        // retrieve the value using secure vault
-        SecretResolver secretResolver = SecretResolverFactory.create(docElt, 
false);
-
-        String alias = elt.getAttributeValue(new QName(
-                CloudControllerConstants.ALIAS_NAMESPACE,
-                CloudControllerConstants.ALIAS_ATTRIBUTE,
-                CloudControllerConstants.ALIAS_ATTRIBUTE_PREFIX));
-
-        // retrieve the secured password
-        if (secretResolver != null && secretResolver.isInitialized() &&
-                secretResolver.isTokenProtected(alias)) {
-            return secretResolver.resolve(alias);
-        }
-        return null;
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/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
deleted file mode 100644
index 95860b8..0000000
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/CloudControllerConfigParser.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one 
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
- * KIND, either express or implied.  See the License for the 
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.stratos.cloud.controller.axiom.parser;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.xml.namespace.QName;
-
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMNode;
-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;
-
-/**
- * Parse the cloud-controller.xml
- *
- *
- */
-public class CloudControllerConfigParser {
-    private static final Log log = 
LogFactory.getLog(CloudControllerConfigParser.class);
-    private static final String FILE_NAME = "cloud-controller.xml";
-
-    /**
-     * Parse the cloud-controller.xml file.
-     * @param elt document element.
-     * @throws MalformedConfigurationFileException
-     */
-    public static void parse(OMElement elt) throws 
MalformedConfigurationFileException {
-
-        extractIaasProviders(elt, AxiomXpathParserUtil.getMatchingNodes(elt, 
CloudControllerConstants.IAAS_PROVIDER_XPATH));
-        extractDataPublisherConfig(elt, 
AxiomXpathParserUtil.getElement(FILE_NAME, elt, 
CloudControllerConstants.DATA_PUBLISHER_ELEMENT,
-                                        
CloudControllerConstants.DATA_PUBLISHER_XPATH));
-        extractTopologySyncConfig(elt, 
AxiomXpathParserUtil.getElement(FILE_NAME, elt, 
CloudControllerConstants.TOPOLOGY_SYNC_ELEMENT,
-                        CloudControllerConstants.TOPOLOGY_SYNC_XPATH));
-    }
-
-
-
-
-    private static void extractIaasProviders(OMElement elt, List<OMNode> 
nodeList) {
-        List<IaasProvider> iaasProviders = 
FasterLookUpDataHolder.getInstance().getIaasProviders();
-
-        if (iaasProviders == null) {
-            FasterLookUpDataHolder.getInstance()
-                    .setIaasProviders((iaasProviders = new 
ArrayList<IaasProvider>()));
-        }
-
-        // this is a valid scenario. User can have 0..1 iaas provider elements
-        // in cloud-controller xml.
-        if (nodeList == null || nodeList.isEmpty()) {
-            log.debug("No IaasProvider element found in "+FILE_NAME);
-            return;
-        }
-        
-        for (OMNode node : nodeList) {
-            
iaasProviders.add(IaasProviderConfigParser.getIaasProvider(FILE_NAME, elt, 
node, null));
-        }
-    }
-    
-    private static void extractDataPublisherConfig(OMElement rootElt, 
OMElement element) {
-        if (element == null) {
-            log.debug("No data publisher config found in "+FILE_NAME);
-            return;
-        }
-
-        FasterLookUpDataHolder dataHolder = 
FasterLookUpDataHolder.getInstance();
-        // get enable attribute
-        boolean isEnable =
-                Boolean.parseBoolean(element.getAttributeValue(new QName(
-                        CloudControllerConstants.ENABLE_ATTR)));
-        dataHolder.setEnableBAMDataPublisher(isEnable);
-
-        if (isEnable) {
-            // get bam server info
-            OMElement childElement =
-                    AxiomXpathParserUtil.getFirstChildElement(element,
-                            CloudControllerConstants.BAM_SERVER_ELEMENT);
-            OMElement elt;
-
-            DataPublisherConfig config = new DataPublisherConfig();
-            dataHolder.setDataPubConfig(config);
-            
-            if (childElement != null) {
-                // set bam user name
-                elt =
-                        AxiomXpathParserUtil.getFirstChildElement(childElement,
-                                
CloudControllerConstants.BAM_SERVER_ADMIN_USERNAME_ELEMENT);
-                if (elt != null) {
-                    config.setBamUsername(elt.getText());
-                }
-                // set bam password
-                elt =
-                        AxiomXpathParserUtil.getFirstChildElement(childElement,
-                                
CloudControllerConstants.BAM_SERVER_ADMIN_PASSWORD_ELEMENT);
-                if (elt != null) {
-                    String password = 
AxiomXpathParserUtil.resolveSecret(rootElt, elt);
-                    if (password == null) {
-                        
AxiomXpathParserUtil.plainTextWarn(CloudControllerConstants.BAM_SERVER_ADMIN_PASSWORD_ELEMENT);
-                        password = elt.getText();
-                    }
-
-                    if (password != null) {
-                        config.setBamPassword(password);
-                    }
-                }
-            }
-
-            // set cron
-            childElement = AxiomXpathParserUtil.getFirstChildElement(element, 
CloudControllerConstants.CRON_ELEMENT);
-            if (childElement != null) {
-                config.setDataPublisherCron(childElement.getText());
-            }
-
-            // set cassandra info
-            childElement = AxiomXpathParserUtil.getFirstChildElement(element, 
CloudControllerConstants.CASSANDRA_INFO_ELEMENT);
-
-            if (childElement != null) {
-                // set connection url
-                elt = AxiomXpathParserUtil.getFirstChildElement(childElement, 
CloudControllerConstants.CONNECTION_URL_ELEMENT);
-                if (elt != null) {
-                    config.setCassandraConnUrl(elt.getText());
-                }
-
-                // set user name
-                elt = AxiomXpathParserUtil.getFirstChildElement(childElement, 
CloudControllerConstants.USER_NAME_ELEMENT);
-                if (elt != null) {
-                    config.setCassandraUser(elt.getText());
-                }
-                // set password
-                elt = AxiomXpathParserUtil.getFirstChildElement(childElement, 
CloudControllerConstants.PASSWORD_ELEMENT);
-                if (elt != null) {
-                    String password = 
AxiomXpathParserUtil.resolveSecret(rootElt, elt);
-                    if (password == null) {
-                        
AxiomXpathParserUtil.plainTextWarn(CloudControllerConstants.PASSWORD_ELEMENT);
-                        password = elt.getText();
-                    }
-
-                    if (password != null) {
-                        config.setCassandraPassword(password);
-                    }
-                }
-            }
-
-        }
-    }
-
-    private static void extractTopologySyncConfig(OMElement elt, OMElement 
element) {
-
-        if (element == null) {
-            log.debug("No Topology sync config is found "+FILE_NAME);
-            return;
-        }
-
-        // get enable attribute
-        boolean isEnable =
-                Boolean.parseBoolean(element.getAttributeValue(new QName(
-                        CloudControllerConstants.ENABLE_ATTR)));
-
-        FasterLookUpDataHolder dataHolder = 
FasterLookUpDataHolder.getInstance();
-
-        dataHolder.setEnableTopologySync(isEnable);
-        if (!isEnable) {
-            if (log.isWarnEnabled()) {
-                log.warn("Topology synchronization is disabled!");
-            }
-        }
-
-        if (isEnable) {
-            TopologyConfig topologyConfig = new TopologyConfig();
-            // load properties
-            IaasProviderConfigParser.loadProperties(FILE_NAME, element, 
topologyConfig.getProperties());
-
-            dataHolder.setTopologyConfig(topologyConfig);
-        }
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/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
deleted file mode 100644
index 7830a2c..0000000
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/parser/IaasProviderConfigParser.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one 
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
- * KIND, either express or implied.  See the License for the 
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.stratos.cloud.controller.axiom.parser;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-
-import org.apache.axiom.om.OMElement;
-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.wso2.securevault.SecretResolver;
-import org.wso2.securevault.SecretResolverFactory;
-
-/**
- * Parse the iaas providers.
- *
- *
- */
-public class IaasProviderConfigParser {
-    private static final Log log = 
LogFactory.getLog(IaasProviderConfigParser.class);
-
-    public static IaasProvider getIaasProvider(final String fileName, final 
OMElement elt, final OMNode item, List<IaasProvider> iaases) {
-
-        IaasProvider iaas = null;
-
-        if (item.getType() == OMNode.ELEMENT_NODE) {
-
-            OMElement iaasElt = (OMElement) item;
-
-            if (iaases != null) {
-                // check whether this is a reference to a predefined IaaS.
-                for (IaasProvider iaasProvider : iaases) {
-                    if (iaasProvider.getType()
-                            .equals(iaasElt.getAttribute(new QName(
-                                    CloudControllerConstants.TYPE_ATTR))
-                                    .getAttributeValue())) {
-                        iaas = new IaasProvider(iaasProvider);
-                        break;
-                    }
-                }
-            }
-
-            if (iaas == null) {
-                iaas = new IaasProvider();
-            }
-
-            if (iaas.getType() == null) {
-                iaas.setType(iaasElt.getAttribute(new 
QName(CloudControllerConstants.TYPE_ATTR))
-                        .getAttributeValue());
-            }
-
-            if ("".equals(iaas.getType())) {
-                String msg =
-                        "'" + CloudControllerConstants.IAAS_PROVIDER_ELEMENT + 
"' element's '" +
-                                CloudControllerConstants.TYPE_ATTR +
-                                "' attribute should be specified!";
-
-                handleException(msg);
-
-            }
-
-            // this is not mandatory
-            String name =
-                    (iaasElt.getAttribute(new 
QName(CloudControllerConstants.NAME_ATTR)) == null)
-                            ? iaas.getName()
-                            : iaasElt.getAttributeValue(new QName(
-                            CloudControllerConstants.NAME_ATTR));
-
-            iaas.setName(name);
-
-            String xpath = 
CloudControllerConstants.IAAS_PROVIDER_ELEMENT_XPATH;
-
-            // load other elements
-            loadClassName(fileName, iaas, iaasElt);
-            loadProvider(fileName, iaas, iaasElt);
-            loadProperties(fileName, iaasElt, iaas.getProperties());
-            loadTemplate(fileName, iaas, iaasElt);
-            loadIdentity(fileName, elt, iaas, iaasElt);
-            loadCredentials(fileName, elt, iaas, iaasElt, xpath);
-        }
-
-        return iaas;
-    }
-    
-    private static void loadClassName(final String fileName, final 
IaasProvider iaas, final OMElement iaasElt) {
-
-        Iterator<?> it =
-                iaasElt.getChildrenWithName(new QName(
-                        CloudControllerConstants.CLASS_NAME_ELEMENT));
-
-        if (it.hasNext()) {
-            OMElement classNameElt = (OMElement) it.next();
-            iaas.setClassName(classNameElt.getText());
-        }
-
-        if (it.hasNext()) {
-            log.warn(" file contains more than one " +
-                    CloudControllerConstants.CLASS_NAME_ELEMENT + " elements!" 
+
-                    " Elements other than the first will be neglected.");
-        }
-
-        if (iaas.getClassName() == null) {
-            String msg =
-                    "Essential '" + 
CloudControllerConstants.CLASS_NAME_ELEMENT + "' element " +
-                            "has not specified in " + fileName;
-            handleException(msg);
-        }
-
-    }
-
-    private static void loadCredentials(final String fileName, final OMElement 
elt, final IaasProvider iaas, final OMElement iaasElt,
-                                        final String xpath) {
-
-        Iterator<?> it =
-                iaasElt.getChildrenWithName(new QName(
-                        CloudControllerConstants.CREDENTIAL_ELEMENT));
-
-        if (it.hasNext()) {
-            OMElement credentialElt = (OMElement) it.next();
-
-            // retrieve the value using secure vault
-            SecretResolver secretResolver = SecretResolverFactory.create(elt, 
false);
-            String alias = credentialElt.getAttributeValue(new QName(
-                    CloudControllerConstants.ALIAS_NAMESPACE,
-                    CloudControllerConstants.ALIAS_ATTRIBUTE,
-                    CloudControllerConstants.ALIAS_ATTRIBUTE_PREFIX));
-
-            // retrieve the secured password
-            if (secretResolver != null && secretResolver.isInitialized() &&
-                    secretResolver.isTokenProtected(alias)) {
-                iaas.setCredential(secretResolver.resolve(alias));
-            }
-
-            // if we still cannot find a value, we try to assign the value 
which
-            // is specified
-            // in the element, if any
-            if (iaas.getCredential() == null) {
-                log.warn("Unable to find a value for " + 
CloudControllerConstants.CREDENTIAL_ELEMENT +
-                        " element from Secure Vault." +
-                        "Hence we will try to assign the plain text value (if 
specified).");
-                iaas.setCredential(credentialElt.getText());
-            }
-        }
-
-        if (it.hasNext()) {
-            log.warn(fileName + " contains more than one " +
-                    CloudControllerConstants.CREDENTIAL_ELEMENT + " elements!" 
+
-                    " Elements other than the first will be neglected.");
-        }
-
-        if (iaas.getCredential() == null) {
-            String msg =
-                    "Essential '" + 
CloudControllerConstants.CREDENTIAL_ELEMENT + "' element" +
-                            " has not specified in " + fileName;
-            handleException(msg);
-        }
-
-    }
-
-
-    private static void loadIdentity(final String fileName, final OMElement 
elt, final IaasProvider iaas, final OMElement iaasElt) {
-
-        Iterator<?> it =
-                iaasElt.getChildrenWithName(new 
QName(CloudControllerConstants.IDENTITY_ELEMENT));
-
-        if (it.hasNext()) {
-            OMElement identityElt = (OMElement) it.next();
-
-            // retrieve the value using secure vault
-            SecretResolver secretResolver = SecretResolverFactory.create(elt, 
false);
-            String alias = identityElt.getAttributeValue(new QName(
-                    CloudControllerConstants.ALIAS_NAMESPACE,
-                    CloudControllerConstants.ALIAS_ATTRIBUTE,
-                    CloudControllerConstants.ALIAS_ATTRIBUTE_PREFIX));
-
-            // retrieve the secured password
-            if (secretResolver != null && secretResolver.isInitialized() &&
-                    secretResolver.isTokenProtected(alias)) {
-                iaas.setIdentity(secretResolver.resolve(alias));
-            }
-
-            // if we still cannot find a value, we try to assign the value 
which
-            // is specified
-            // in the element, if any
-            if (iaas.getIdentity() == null) {
-                log.warn("Unable to find a value for " + 
CloudControllerConstants.IDENTITY_ELEMENT +
-                        " element from Secure Vault." +
-                        "Hence we will try to assign the plain text value (if 
specified).");
-                iaas.setIdentity(identityElt.getText());
-            }
-        }
-
-        if (it.hasNext()) {
-            log.warn(fileName + " contains more than one " + 
CloudControllerConstants.IDENTITY_ELEMENT +
-                    " elements!" + " Elements other than the first will be 
neglected.");
-        }
-
-        if (iaas.getIdentity() == null) {
-            String msg =
-                    "Essential '" + CloudControllerConstants.IDENTITY_ELEMENT 
+ "' element" +
-                            " has not specified in " + fileName;
-            handleException(msg);
-        }
-
-    }
-
-
-
-    public static void loadProperties(final String fileName, final OMElement 
elt, final Map<String, String> propertyMap) {
-
-        Iterator<?> it =
-                elt.getChildrenWithName(new 
QName(CloudControllerConstants.PROPERTY_ELEMENT));
-
-        while (it.hasNext()) {
-            OMElement prop = (OMElement) it.next();
-
-            if (prop.getAttribute(new 
QName(CloudControllerConstants.PROPERTY_NAME_ATTR)) == null ||
-                    prop.getAttribute(new 
QName(CloudControllerConstants.PROPERTY_VALUE_ATTR)) == null) {
-
-                String msg =
-                        "Property element's, name and value attributes should 
be specified " +
-                                "in " + fileName;
-
-                handleException(msg);
-            }
-
-            propertyMap.put(prop.getAttribute(new 
QName(CloudControllerConstants.PROPERTY_NAME_ATTR))
-                    .getAttributeValue(),
-                    prop.getAttribute(new 
QName(CloudControllerConstants.PROPERTY_VALUE_ATTR))
-                            .getAttributeValue());
-        }
-
-    }
-
-    private static void loadProvider(final String fileName, final IaasProvider 
iaas, final OMElement iaasElt) {
-
-        Iterator<?> it =
-                iaasElt.getChildrenWithName(new 
QName(CloudControllerConstants.PROVIDER_ELEMENT));
-
-        if (it.hasNext()) {
-            OMElement providerElt = (OMElement) it.next();
-            iaas.setProvider(providerElt.getText());
-        }
-
-        if (it.hasNext()) {
-            log.warn(fileName + " contains more than one " + 
CloudControllerConstants.PROVIDER_ELEMENT +
-                    " elements!" + " Elements other than the first will be 
neglected.");
-        }
-
-        if (iaas.getProvider() == null) {
-            String msg =
-                    "Essential '" + CloudControllerConstants.PROVIDER_ELEMENT 
+ "' element " +
-                            "has not specified in " + fileName;
-            handleException(msg);
-        }
-
-    }
-
-
-    private static void loadTemplate(final String fileName, final IaasProvider 
iaas, final OMElement iaasElt) {
-
-        Iterator<?> it =
-                iaasElt.getChildrenWithName(new 
QName(CloudControllerConstants.IMAGE_ID_ELEMENT));
-
-        if (it.hasNext()) {
-            OMElement imageElt = (OMElement) it.next();
-            iaas.setImage(imageElt.getText());
-        }
-
-        if (it.hasNext()) {
-            log.warn(fileName + " contains more than one " + 
CloudControllerConstants.IMAGE_ID_ELEMENT +
-                    " elements!" + " Elements other than the first will be 
neglected.");
-        }
-
-    }
-
-    
-    private static void handleException(final String msg) throws 
MalformedConfigurationFileException{
-        log.error(msg);
-        throw new MalformedConfigurationFileException(msg);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java
index d0c2276..dd32202 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java
@@ -22,14 +22,14 @@ import java.util.concurrent.Callable;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+import org.apache.stratos.cloud.controller.domain.Partition;
 import 
org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException;
 import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
-import org.apache.stratos.cloud.controller.interfaces.Iaas;
-import org.apache.stratos.cloud.controller.pojo.Cartridge;
-import org.apache.stratos.cloud.controller.pojo.IaasProvider;
+import org.apache.stratos.cloud.controller.iaas.Iaas;
+import org.apache.stratos.cloud.controller.domain.Cartridge;
+import org.apache.stratos.cloud.controller.domain.IaasProvider;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
-import 
org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
+import org.apache.stratos.cloud.controller.iaas.validators.PartitionValidator;
 
 public class PartitionValidatorCallable implements Callable<IaasProvider> {
        

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/CloudControllerConfigParser.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/CloudControllerConfigParser.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/CloudControllerConfigParser.java
new file mode 100644
index 0000000..4f85f9e
--- /dev/null
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/CloudControllerConfigParser.java
@@ -0,0 +1,200 @@
+/*
+ * 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.config.parser;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNode;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.util.AxiomXpathParserUtil;
+import 
org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException;
+import org.apache.stratos.cloud.controller.domain.DataPublisherConfig;
+import org.apache.stratos.cloud.controller.domain.IaasProvider;
+import org.apache.stratos.cloud.controller.domain.TopologyConfig;
+import org.apache.stratos.cloud.controller.context.FasterLookUpDataHolder;
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
+
+/**
+ * Parse the cloud-controller.xml
+ *
+ *
+ */
+public class CloudControllerConfigParser {
+    private static final Log log = 
LogFactory.getLog(CloudControllerConfigParser.class);
+    private static final String FILE_NAME = "cloud-controller.xml";
+
+    /**
+     * Parse the cloud-controller.xml file.
+     * @param elt document element.
+     * @throws MalformedConfigurationFileException
+     */
+    public static void parse(OMElement elt) throws 
MalformedConfigurationFileException {
+
+        extractIaasProviders(elt, AxiomXpathParserUtil.getMatchingNodes(elt, 
CloudControllerConstants.IAAS_PROVIDER_XPATH));
+        extractDataPublisherConfig(elt, 
AxiomXpathParserUtil.getElement(FILE_NAME, elt, 
CloudControllerConstants.DATA_PUBLISHER_ELEMENT,
+                                        
CloudControllerConstants.DATA_PUBLISHER_XPATH));
+        extractTopologySyncConfig(elt, 
AxiomXpathParserUtil.getElement(FILE_NAME, elt, 
CloudControllerConstants.TOPOLOGY_SYNC_ELEMENT,
+                        CloudControllerConstants.TOPOLOGY_SYNC_XPATH));
+    }
+
+
+
+
+    private static void extractIaasProviders(OMElement elt, List<OMNode> 
nodeList) {
+        List<IaasProvider> iaasProviders = 
FasterLookUpDataHolder.getInstance().getIaasProviders();
+
+        if (iaasProviders == null) {
+            FasterLookUpDataHolder.getInstance()
+                    .setIaasProviders((iaasProviders = new 
ArrayList<IaasProvider>()));
+        }
+
+        // this is a valid scenario. User can have 0..1 iaas provider elements
+        // in cloud-controller xml.
+        if (nodeList == null || nodeList.isEmpty()) {
+            log.debug("No IaasProvider element found in "+FILE_NAME);
+            return;
+        }
+        
+        for (OMNode node : nodeList) {
+            
iaasProviders.add(IaasProviderConfigParser.getIaasProvider(FILE_NAME, elt, 
node, null));
+        }
+    }
+    
+    private static void extractDataPublisherConfig(OMElement rootElt, 
OMElement element) {
+        if (element == null) {
+            log.debug("No data publisher config found in "+FILE_NAME);
+            return;
+        }
+
+        FasterLookUpDataHolder dataHolder = 
FasterLookUpDataHolder.getInstance();
+        // get enable attribute
+        boolean isEnable =
+                Boolean.parseBoolean(element.getAttributeValue(new QName(
+                        CloudControllerConstants.ENABLE_ATTR)));
+        dataHolder.setEnableBAMDataPublisher(isEnable);
+
+        if (isEnable) {
+            // get bam server info
+            OMElement childElement =
+                    AxiomXpathParserUtil.getFirstChildElement(element,
+                            CloudControllerConstants.BAM_SERVER_ELEMENT);
+            OMElement elt;
+
+            DataPublisherConfig config = new DataPublisherConfig();
+            dataHolder.setDataPubConfig(config);
+            
+            if (childElement != null) {
+                // set bam user name
+                elt =
+                        AxiomXpathParserUtil.getFirstChildElement(childElement,
+                                
CloudControllerConstants.BAM_SERVER_ADMIN_USERNAME_ELEMENT);
+                if (elt != null) {
+                    config.setBamUsername(elt.getText());
+                }
+                // set bam password
+                elt =
+                        AxiomXpathParserUtil.getFirstChildElement(childElement,
+                                
CloudControllerConstants.BAM_SERVER_ADMIN_PASSWORD_ELEMENT);
+                if (elt != null) {
+                    String password = 
AxiomXpathParserUtil.resolveSecret(rootElt, elt);
+                    if (password == null) {
+                        
AxiomXpathParserUtil.plainTextWarn(CloudControllerConstants.BAM_SERVER_ADMIN_PASSWORD_ELEMENT);
+                        password = elt.getText();
+                    }
+
+                    if (password != null) {
+                        config.setBamPassword(password);
+                    }
+                }
+            }
+
+            // set cron
+            childElement = AxiomXpathParserUtil.getFirstChildElement(element, 
CloudControllerConstants.CRON_ELEMENT);
+            if (childElement != null) {
+                config.setDataPublisherCron(childElement.getText());
+            }
+
+            // set cassandra info
+            childElement = AxiomXpathParserUtil.getFirstChildElement(element, 
CloudControllerConstants.CASSANDRA_INFO_ELEMENT);
+
+            if (childElement != null) {
+                // set connection url
+                elt = AxiomXpathParserUtil.getFirstChildElement(childElement, 
CloudControllerConstants.CONNECTION_URL_ELEMENT);
+                if (elt != null) {
+                    config.setCassandraConnUrl(elt.getText());
+                }
+
+                // set user name
+                elt = AxiomXpathParserUtil.getFirstChildElement(childElement, 
CloudControllerConstants.USER_NAME_ELEMENT);
+                if (elt != null) {
+                    config.setCassandraUser(elt.getText());
+                }
+                // set password
+                elt = AxiomXpathParserUtil.getFirstChildElement(childElement, 
CloudControllerConstants.PASSWORD_ELEMENT);
+                if (elt != null) {
+                    String password = 
AxiomXpathParserUtil.resolveSecret(rootElt, elt);
+                    if (password == null) {
+                        
AxiomXpathParserUtil.plainTextWarn(CloudControllerConstants.PASSWORD_ELEMENT);
+                        password = elt.getText();
+                    }
+
+                    if (password != null) {
+                        config.setCassandraPassword(password);
+                    }
+                }
+            }
+
+        }
+    }
+
+    private static void extractTopologySyncConfig(OMElement elt, OMElement 
element) {
+
+        if (element == null) {
+            log.debug("No Topology sync config is found "+FILE_NAME);
+            return;
+        }
+
+        // get enable attribute
+        boolean isEnable =
+                Boolean.parseBoolean(element.getAttributeValue(new QName(
+                        CloudControllerConstants.ENABLE_ATTR)));
+
+        FasterLookUpDataHolder dataHolder = 
FasterLookUpDataHolder.getInstance();
+
+        dataHolder.setEnableTopologySync(isEnable);
+        if (!isEnable) {
+            if (log.isWarnEnabled()) {
+                log.warn("Topology synchronization is disabled!");
+            }
+        }
+
+        if (isEnable) {
+            TopologyConfig topologyConfig = new TopologyConfig();
+            // load properties
+            IaasProviderConfigParser.loadProperties(FILE_NAME, element, 
topologyConfig.getProperties());
+
+            dataHolder.setTopologyConfig(topologyConfig);
+        }
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/IaasProviderConfigParser.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/IaasProviderConfigParser.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/IaasProviderConfigParser.java
new file mode 100644
index 0000000..91bb580
--- /dev/null
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/config/parser/IaasProviderConfigParser.java
@@ -0,0 +1,306 @@
+/*
+ * 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.config.parser;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+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.domain.IaasProvider;
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
+import org.wso2.securevault.SecretResolver;
+import org.wso2.securevault.SecretResolverFactory;
+
+/**
+ * Parse the iaas providers.
+ *
+ *
+ */
+public class IaasProviderConfigParser {
+    private static final Log log = 
LogFactory.getLog(IaasProviderConfigParser.class);
+
+    public static IaasProvider getIaasProvider(final String fileName, final 
OMElement elt, final OMNode item, List<IaasProvider> iaases) {
+
+        IaasProvider iaas = null;
+
+        if (item.getType() == OMNode.ELEMENT_NODE) {
+
+            OMElement iaasElt = (OMElement) item;
+
+            if (iaases != null) {
+                // check whether this is a reference to a predefined IaaS.
+                for (IaasProvider iaasProvider : iaases) {
+                    if (iaasProvider.getType()
+                            .equals(iaasElt.getAttribute(new QName(
+                                    CloudControllerConstants.TYPE_ATTR))
+                                    .getAttributeValue())) {
+                        iaas = new IaasProvider(iaasProvider);
+                        break;
+                    }
+                }
+            }
+
+            if (iaas == null) {
+                iaas = new IaasProvider();
+            }
+
+            if (iaas.getType() == null) {
+                iaas.setType(iaasElt.getAttribute(new 
QName(CloudControllerConstants.TYPE_ATTR))
+                        .getAttributeValue());
+            }
+
+            if ("".equals(iaas.getType())) {
+                String msg =
+                        "'" + CloudControllerConstants.IAAS_PROVIDER_ELEMENT + 
"' element's '" +
+                                CloudControllerConstants.TYPE_ATTR +
+                                "' attribute should be specified!";
+
+                handleException(msg);
+
+            }
+
+            // this is not mandatory
+            String name =
+                    (iaasElt.getAttribute(new 
QName(CloudControllerConstants.NAME_ATTR)) == null)
+                            ? iaas.getName()
+                            : iaasElt.getAttributeValue(new QName(
+                            CloudControllerConstants.NAME_ATTR));
+
+            iaas.setName(name);
+
+            String xpath = 
CloudControllerConstants.IAAS_PROVIDER_ELEMENT_XPATH;
+
+            // load other elements
+            loadClassName(fileName, iaas, iaasElt);
+            loadProvider(fileName, iaas, iaasElt);
+            loadProperties(fileName, iaasElt, iaas.getProperties());
+            loadTemplate(fileName, iaas, iaasElt);
+            loadIdentity(fileName, elt, iaas, iaasElt);
+            loadCredentials(fileName, elt, iaas, iaasElt, xpath);
+        }
+
+        return iaas;
+    }
+    
+    private static void loadClassName(final String fileName, final 
IaasProvider iaas, final OMElement iaasElt) {
+
+        Iterator<?> it =
+                iaasElt.getChildrenWithName(new QName(
+                        CloudControllerConstants.CLASS_NAME_ELEMENT));
+
+        if (it.hasNext()) {
+            OMElement classNameElt = (OMElement) it.next();
+            iaas.setClassName(classNameElt.getText());
+        }
+
+        if (it.hasNext()) {
+            log.warn(" file contains more than one " +
+                    CloudControllerConstants.CLASS_NAME_ELEMENT + " elements!" 
+
+                    " Elements other than the first will be neglected.");
+        }
+
+        if (iaas.getClassName() == null) {
+            String msg =
+                    "Essential '" + 
CloudControllerConstants.CLASS_NAME_ELEMENT + "' element " +
+                            "has not specified in " + fileName;
+            handleException(msg);
+        }
+
+    }
+
+    private static void loadCredentials(final String fileName, final OMElement 
elt, final IaasProvider iaas, final OMElement iaasElt,
+                                        final String xpath) {
+
+        Iterator<?> it =
+                iaasElt.getChildrenWithName(new QName(
+                        CloudControllerConstants.CREDENTIAL_ELEMENT));
+
+        if (it.hasNext()) {
+            OMElement credentialElt = (OMElement) it.next();
+
+            // retrieve the value using secure vault
+            SecretResolver secretResolver = SecretResolverFactory.create(elt, 
false);
+            String alias = credentialElt.getAttributeValue(new QName(
+                    CloudControllerConstants.ALIAS_NAMESPACE,
+                    CloudControllerConstants.ALIAS_ATTRIBUTE,
+                    CloudControllerConstants.ALIAS_ATTRIBUTE_PREFIX));
+
+            // retrieve the secured password
+            if (secretResolver != null && secretResolver.isInitialized() &&
+                    secretResolver.isTokenProtected(alias)) {
+                iaas.setCredential(secretResolver.resolve(alias));
+            }
+
+            // if we still cannot find a value, we try to assign the value 
which
+            // is specified
+            // in the element, if any
+            if (iaas.getCredential() == null) {
+                log.warn("Unable to find a value for " + 
CloudControllerConstants.CREDENTIAL_ELEMENT +
+                        " element from Secure Vault." +
+                        "Hence we will try to assign the plain text value (if 
specified).");
+                iaas.setCredential(credentialElt.getText());
+            }
+        }
+
+        if (it.hasNext()) {
+            log.warn(fileName + " contains more than one " +
+                    CloudControllerConstants.CREDENTIAL_ELEMENT + " elements!" 
+
+                    " Elements other than the first will be neglected.");
+        }
+
+        if (iaas.getCredential() == null) {
+            String msg =
+                    "Essential '" + 
CloudControllerConstants.CREDENTIAL_ELEMENT + "' element" +
+                            " has not specified in " + fileName;
+            handleException(msg);
+        }
+
+    }
+
+
+    private static void loadIdentity(final String fileName, final OMElement 
elt, final IaasProvider iaas, final OMElement iaasElt) {
+
+        Iterator<?> it =
+                iaasElt.getChildrenWithName(new 
QName(CloudControllerConstants.IDENTITY_ELEMENT));
+
+        if (it.hasNext()) {
+            OMElement identityElt = (OMElement) it.next();
+
+            // retrieve the value using secure vault
+            SecretResolver secretResolver = SecretResolverFactory.create(elt, 
false);
+            String alias = identityElt.getAttributeValue(new QName(
+                    CloudControllerConstants.ALIAS_NAMESPACE,
+                    CloudControllerConstants.ALIAS_ATTRIBUTE,
+                    CloudControllerConstants.ALIAS_ATTRIBUTE_PREFIX));
+
+            // retrieve the secured password
+            if (secretResolver != null && secretResolver.isInitialized() &&
+                    secretResolver.isTokenProtected(alias)) {
+                iaas.setIdentity(secretResolver.resolve(alias));
+            }
+
+            // if we still cannot find a value, we try to assign the value 
which
+            // is specified
+            // in the element, if any
+            if (iaas.getIdentity() == null) {
+                log.warn("Unable to find a value for " + 
CloudControllerConstants.IDENTITY_ELEMENT +
+                        " element from Secure Vault." +
+                        "Hence we will try to assign the plain text value (if 
specified).");
+                iaas.setIdentity(identityElt.getText());
+            }
+        }
+
+        if (it.hasNext()) {
+            log.warn(fileName + " contains more than one " + 
CloudControllerConstants.IDENTITY_ELEMENT +
+                    " elements!" + " Elements other than the first will be 
neglected.");
+        }
+
+        if (iaas.getIdentity() == null) {
+            String msg =
+                    "Essential '" + CloudControllerConstants.IDENTITY_ELEMENT 
+ "' element" +
+                            " has not specified in " + fileName;
+            handleException(msg);
+        }
+
+    }
+
+
+
+    public static void loadProperties(final String fileName, final OMElement 
elt, final Map<String, String> propertyMap) {
+
+        Iterator<?> it =
+                elt.getChildrenWithName(new 
QName(CloudControllerConstants.PROPERTY_ELEMENT));
+
+        while (it.hasNext()) {
+            OMElement prop = (OMElement) it.next();
+
+            if (prop.getAttribute(new 
QName(CloudControllerConstants.PROPERTY_NAME_ATTR)) == null ||
+                    prop.getAttribute(new 
QName(CloudControllerConstants.PROPERTY_VALUE_ATTR)) == null) {
+
+                String msg =
+                        "Property element's, name and value attributes should 
be specified " +
+                                "in " + fileName;
+
+                handleException(msg);
+            }
+
+            propertyMap.put(prop.getAttribute(new 
QName(CloudControllerConstants.PROPERTY_NAME_ATTR))
+                    .getAttributeValue(),
+                    prop.getAttribute(new 
QName(CloudControllerConstants.PROPERTY_VALUE_ATTR))
+                            .getAttributeValue());
+        }
+
+    }
+
+    private static void loadProvider(final String fileName, final IaasProvider 
iaas, final OMElement iaasElt) {
+
+        Iterator<?> it =
+                iaasElt.getChildrenWithName(new 
QName(CloudControllerConstants.PROVIDER_ELEMENT));
+
+        if (it.hasNext()) {
+            OMElement providerElt = (OMElement) it.next();
+            iaas.setProvider(providerElt.getText());
+        }
+
+        if (it.hasNext()) {
+            log.warn(fileName + " contains more than one " + 
CloudControllerConstants.PROVIDER_ELEMENT +
+                    " elements!" + " Elements other than the first will be 
neglected.");
+        }
+
+        if (iaas.getProvider() == null) {
+            String msg =
+                    "Essential '" + CloudControllerConstants.PROVIDER_ELEMENT 
+ "' element " +
+                            "has not specified in " + fileName;
+            handleException(msg);
+        }
+
+    }
+
+
+    private static void loadTemplate(final String fileName, final IaasProvider 
iaas, final OMElement iaasElt) {
+
+        Iterator<?> it =
+                iaasElt.getChildrenWithName(new 
QName(CloudControllerConstants.IMAGE_ID_ELEMENT));
+
+        if (it.hasNext()) {
+            OMElement imageElt = (OMElement) it.next();
+            iaas.setImage(imageElt.getText());
+        }
+
+        if (it.hasNext()) {
+            log.warn(fileName + " contains more than one " + 
CloudControllerConstants.IMAGE_ID_ELEMENT +
+                    " elements!" + " Elements other than the first will be 
neglected.");
+        }
+
+    }
+
+    
+    private static void handleException(final String msg) throws 
MalformedConfigurationFileException{
+        log.error(msg);
+        throw new MalformedConfigurationFileException(msg);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/FasterLookUpDataHolder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/FasterLookUpDataHolder.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/FasterLookUpDataHolder.java
new file mode 100644
index 0000000..a4dd041
--- /dev/null
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/FasterLookUpDataHolder.java
@@ -0,0 +1,479 @@
+/*
+ * 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.context;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.domain.*;
+import org.apache.stratos.cloud.controller.registry.RegistryManager;
+import org.wso2.carbon.databridge.agent.thrift.AsyncDataPublisher;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledFuture;
+
+/**
+ * This object holds all runtime data and provides faster access. This is a 
Singleton class.
+ */
+public class FasterLookUpDataHolder implements Serializable{
+
+    private static final long serialVersionUID = -2662307358852779897L;
+    
+    private static final Log log = 
LogFactory.getLog(FasterLookUpDataHolder.class);
+
+       private static volatile FasterLookUpDataHolder ctxt;
+
+       /* We keep following maps in order to make the look up time, small. */
+       
+       /**
+     * Key - cluster id
+     * Value - list of {@link MemberContext}
+     */
+    private Map<String, List<MemberContext>> clusterIdToMemberContext = new 
ConcurrentHashMap<String, List<MemberContext>>();
+    
+
+    /**
+        * Key - member id
+        * Value - {@link MemberContext}
+        */
+       private Map<String, MemberContext> memberIdToContext = new 
ConcurrentHashMap<String, MemberContext>();
+       
+       /**
+     * Key - member id
+     * Value - ScheduledFuture task
+     */
+    private transient Map<String, ScheduledFuture<?>> memberIdToScheduledTask 
= new ConcurrentHashMap<String, ScheduledFuture<?>>();
+       
+       /**
+        * Key - Kubernetes cluster id
+        * Value - {@link 
org.apache.stratos.cloud.controller.domain.KubernetesClusterContext}
+        */
+       private Map<String, KubernetesClusterContext> 
kubClusterIdToKubClusterContext =
+                       new ConcurrentHashMap<String, 
KubernetesClusterContext>();
+       
+       /**
+        * Key - cluster id
+        * Value - {@link 
org.apache.stratos.cloud.controller.domain.ClusterContext}
+        */
+       private Map<String, ClusterContext> clusterIdToContext = new 
ConcurrentHashMap<String, ClusterContext>();
+       
+       /**
+        * This works as a cache to hold already validated partitions against a 
cartridge type.
+        * Key - cartridge type
+        * Value - list of partition ids
+        */
+       private Map<String, List<String>> cartridgeTypeToPartitionIds = new 
ConcurrentHashMap<String, List<String>>();
+       
+       /**
+     * Thread pool used in this task to execute parallel tasks.
+     */
+    private transient ExecutorService executor = 
Executors.newFixedThreadPool(20);
+       
+       /**
+        * List of registered {@link 
org.apache.stratos.cloud.controller.domain.Cartridge}s
+        */
+       private List<Cartridge> cartridges;
+       
+       /**
+        * List of deployed service groups
+        */
+       private List<ServiceGroup> serviceGroups;
+
+       /**
+        * List of IaaS Providers.
+        */
+       private List<IaasProvider> iaasProviders;
+
+
+       private String serializationDir;
+       private boolean enableBAMDataPublisher;
+       private transient DataPublisherConfig dataPubConfig;
+       private boolean enableTopologySync;
+       private transient TopologyConfig topologyConfig;
+
+       private transient AsyncDataPublisher dataPublisher;
+       private String streamId;
+       private boolean isPublisherRunning;
+       private boolean isTopologySyncRunning;
+
+
+       public static FasterLookUpDataHolder getInstance() {
+
+               if (ctxt == null) {
+                       synchronized (FasterLookUpDataHolder.class) {
+                               if (ctxt == null && 
RegistryManager.getInstance() != null) {
+
+                                       Object obj = 
RegistryManager.getInstance().retrieve();
+                                       if (obj != null) {
+                                               if (obj instanceof 
FasterLookUpDataHolder) {
+                                                       ctxt = 
(FasterLookUpDataHolder) obj;
+                                               }
+                                       } 
+                               }
+                               if(ctxt == null) {
+                                       ctxt = new FasterLookUpDataHolder();
+                               }
+                       }
+               }
+
+               return ctxt;
+       }
+
+       private FasterLookUpDataHolder() {
+
+               cartridges = new ArrayList<Cartridge>();
+               serviceGroups = new ArrayList<ServiceGroup>();
+       }
+
+       public List<Cartridge> getCartridges() {
+               return cartridges;
+       }
+       
+       public void setCartridges(List<Cartridge> cartridges) {
+           this.cartridges = cartridges;
+       }
+       
+       public void setServiceGroups(List<ServiceGroup> serviceGroups) {
+               this.serviceGroups = serviceGroups;
+       }
+       
+       public List<ServiceGroup> getServiceGroups() {
+               return this.serviceGroups;
+       }
+
+
+       public Cartridge getCartridge(String cartridgeType) {
+               for (Cartridge cartridge : cartridges) {
+                       if (cartridge.getType().equals(cartridgeType)) {
+                               return cartridge;
+                       }
+               }
+
+               return null;
+       }
+       
+       public void addCartridge(Cartridge newCartridges) {
+       
+               cartridges.add(newCartridges);
+       }
+
+       public void removeCartridges(List<Cartridge> cartridges) {
+               if (this.cartridges != null) {
+                       this.cartridges.removeAll(cartridges);
+               }
+
+       }
+       
+       public ServiceGroup getServiceGroup(String name) {
+               for (ServiceGroup serviceGroup : serviceGroups) {
+                       if (serviceGroup.getName().equals(name)) {
+                               return serviceGroup;
+                       }
+               }
+
+               return null;
+       }
+       
+       public void addServiceGroup(ServiceGroup newServiceGroup) {
+               this.serviceGroups.add(newServiceGroup);
+       }
+       
+       public void removeServiceGroup(List<ServiceGroup> serviceGroup) {
+               if (this.serviceGroups != null) {
+                       this.serviceGroups.removeAll(serviceGroup);
+               }
+       }
+       
+       public IaasProvider getIaasProvider(String type) {
+           if(type == null) {
+               return null;
+           }
+           
+           for (IaasProvider iaasProvider : iaasProviders) {
+            if(type.equals(iaasProvider.getType())) {
+                return iaasProvider;
+            }
+        }
+           return null;
+       }
+
+       public List<IaasProvider> getIaasProviders() {
+               return iaasProviders;
+       }
+
+       public void setIaasProviders(List<IaasProvider> iaasProviders) {
+               this.iaasProviders = iaasProviders;
+       }
+
+       public String getSerializationDir() {
+               return serializationDir;
+       }
+
+       public void setSerializationDir(String serializationDir) {
+               this.serializationDir = serializationDir;
+       }
+
+       public AsyncDataPublisher getDataPublisher() {
+               return dataPublisher;
+       }
+
+       public void setDataPublisher(AsyncDataPublisher dataPublisher) {
+               this.dataPublisher = dataPublisher;
+       }
+
+       public String getStreamId() {
+               return streamId;
+       }
+
+       public void setStreamId(String streamId) {
+               this.streamId = streamId;
+       }
+
+       public boolean getEnableBAMDataPublisher() {
+               return enableBAMDataPublisher;
+       }
+
+       public void setEnableBAMDataPublisher(boolean enableBAMDataPublisher) {
+               this.enableBAMDataPublisher = enableBAMDataPublisher;
+       }
+
+       public boolean isPublisherRunning() {
+               return isPublisherRunning;
+       }
+
+       public void setPublisherRunning(boolean isPublisherRunning) {
+               this.isPublisherRunning = isPublisherRunning;
+       }
+
+       public boolean getEnableTopologySync() {
+               return enableTopologySync;
+       }
+
+       public void setEnableTopologySync(boolean enableTopologySync) {
+               this.enableTopologySync = enableTopologySync;
+       }
+
+       public boolean isTopologySyncRunning() {
+           return isTopologySyncRunning;
+    }
+
+       public void setTopologySyncRunning(boolean isTopologySyncRunning) {
+           this.isTopologySyncRunning = isTopologySyncRunning;
+    }
+
+       public TopologyConfig getTopologyConfig() {
+               return topologyConfig;
+       }
+
+       public void setTopologyConfig(TopologyConfig topologyConfig) {
+               this.topologyConfig = topologyConfig;
+       }
+
+    public DataPublisherConfig getDataPubConfig() {
+        return dataPubConfig;
+    }
+
+    public void setDataPubConfig(DataPublisherConfig dataPubConfig) {
+        this.dataPubConfig = dataPubConfig;
+    }
+    
+    public void addMemberContext(MemberContext ctxt) {
+        memberIdToContext.put(ctxt.getMemberId(), ctxt);
+        
+        List<MemberContext> ctxts;
+        
+        if((ctxts = clusterIdToMemberContext.get(ctxt.getClusterId())) == 
null) {
+            ctxts = new ArrayList<MemberContext>();
+        } 
+        if(ctxts.contains(ctxt)) {
+               ctxts.remove(ctxt);
+        }
+        ctxts.add(ctxt);
+        clusterIdToMemberContext.put(ctxt.getClusterId(), ctxts);
+        if(log.isDebugEnabled()) {
+               
+               log.debug("Added Member Context to the information model. 
"+ctxt);
+        }
+    }
+    
+    public void addScheduledFutureJob(String memberId, ScheduledFuture<?> job) 
{
+        memberIdToScheduledTask.put(memberId, job);
+    }
+    
+    public List<MemberContext> removeMemberContextsOfCluster(String clusterId) 
{
+        List<MemberContext> ctxts = clusterIdToMemberContext.remove(clusterId);
+        if(ctxts == null) {
+            return new ArrayList<MemberContext>();
+        }
+        for (MemberContext memberContext : ctxts) {
+            String memberId = memberContext.getMemberId();
+            memberIdToContext.remove(memberId);
+            stopTask(memberIdToScheduledTask.remove(memberId));
+        }
+        if(log.isDebugEnabled()) {
+               
+               log.debug("Removed Member Context from the information model. 
"+ctxt);
+        }
+        return ctxts;
+    }
+    
+    public MemberContext removeMemberContext(String memberId, String 
clusterId) {
+       MemberContext returnedCtxt = memberIdToContext.remove(memberId);
+        List<MemberContext> ctxts = clusterIdToMemberContext.get(clusterId);
+
+        if (ctxts != null) {
+            
+            List<MemberContext> newCtxts =  new 
ArrayList<MemberContext>(ctxts);
+            
+            for (Iterator<MemberContext> iterator = newCtxts.iterator(); 
iterator.hasNext();) {
+                MemberContext memberContext = (MemberContext) iterator.next();
+                if(memberId.equals(memberContext.getMemberId())) {
+                    if(log.isDebugEnabled()) {
+                        
+                        log.debug("MemberContext [id]: "+memberId+" removed 
from information model.");
+                    }
+                    iterator.remove();
+                }
+            }
+            
+            clusterIdToMemberContext.put(clusterId, newCtxts);
+        }
+        
+        stopTask(memberIdToScheduledTask.remove(memberId));
+        
+        return returnedCtxt;
+        
+    }
+    
+    private void stopTask(ScheduledFuture<?> task) {
+        if (task != null) {
+            
+            task.cancel(true);
+            log.info("Scheduled Pod Activation Watcher task canceled.");
+        }
+    }
+    
+    public MemberContext getMemberContextOfMemberId(String memberId) {
+        return memberIdToContext.get(memberId);
+    }
+    
+    public List<MemberContext> getMemberContextsOfClusterId(String clusterId) {
+        return clusterIdToMemberContext.get(clusterId);
+    }
+
+    public Map<String, List<MemberContext>> getClusterIdToMemberContext() {
+        return clusterIdToMemberContext;
+    }
+    
+    public void setClusterIdToMemberContext(Map<String, List<MemberContext>> 
clusterIdToMemberContext) {
+        this.clusterIdToMemberContext = clusterIdToMemberContext;
+    }
+
+    public Map<String, MemberContext> getMemberIdToContext() {
+        return memberIdToContext;
+    }
+
+    public void setMemberIdToContext(Map<String, MemberContext> 
memberIdToContext) {
+        this.memberIdToContext = memberIdToContext;
+    }
+
+    public void addClusterContext(ClusterContext ctxt) {
+        clusterIdToContext.put(ctxt.getClusterId(), ctxt);
+    }
+    
+    public ClusterContext getClusterContext(String clusterId) {
+        return clusterIdToContext.get(clusterId);
+    }
+    
+    public ClusterContext removeClusterContext(String clusterId) {
+        return clusterIdToContext.remove(clusterId);
+    }
+    
+    public Map<String, ClusterContext> getClusterIdToContext() {
+        return clusterIdToContext;
+    }
+
+    public void setClusterIdToContext(Map<String, ClusterContext> 
clusterIdToContext) {
+        this.clusterIdToContext = clusterIdToContext;
+    }
+
+       public ExecutorService getExecutor() {
+               return executor;
+       }
+
+       public void setExecutor(ExecutorService executor) {
+               this.executor = executor;
+       }
+
+       public Map<String, List<String>> getCartridgeTypeToPartitionIds() {
+               return cartridgeTypeToPartitionIds;
+       }
+
+       public void setCartridgeTypeToPartitionIds(
+                       Map<String, List<String>> cartridgeTypeToPartitionIds) {
+               this.cartridgeTypeToPartitionIds = cartridgeTypeToPartitionIds;
+       }
+       
+       public void addToCartridgeTypeToPartitionIdMap(String cartridgeType, 
String partitionId) {
+               List<String> list = 
this.cartridgeTypeToPartitionIds.get(cartridgeType);
+               
+               if(list == null) {
+                       list = new ArrayList<String>();
+               }
+               
+               list.add(partitionId);
+               this.cartridgeTypeToPartitionIds.put(cartridgeType, list);
+       }
+       
+       public void removeFromCartridgeTypeToPartitionIds(String cartridgeType) 
{
+               this.cartridgeTypeToPartitionIds.remove(cartridgeType);
+       }
+
+       public Map<String, KubernetesClusterContext> 
getKubClusterIdToKubClusterContext() {
+               return kubClusterIdToKubClusterContext;
+       }
+       
+       public KubernetesClusterContext getKubernetesClusterContext(String 
kubClusterId) {
+               return kubClusterIdToKubClusterContext.get(kubClusterId);
+       }
+       
+       public void addKubernetesClusterContext(KubernetesClusterContext ctxt) {
+               
this.kubClusterIdToKubClusterContext.put(ctxt.getKubernetesClusterId(), ctxt);
+       }
+
+       public void setKubClusterIdToKubClusterContext(
+                       Map<String, KubernetesClusterContext> 
kubClusterIdToKubClusterContext) {
+               this.kubClusterIdToKubClusterContext = 
kubClusterIdToKubClusterContext;
+       }
+
+    public Map<String, ScheduledFuture<?>> getMemberIdToScheduledTask() {
+        return memberIdToScheduledTask;
+    }
+
+    public void setMemberIdToScheduledTask(Map<String, ScheduledFuture<?>> 
memberIdToScheduledTask) {
+        this.memberIdToScheduledTask = memberIdToScheduledTask;
+    }
+       
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/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 0b60e97..3fe4ded 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
@@ -25,10 +25,10 @@ import org.apache.axis2.deployment.DeploymentException;
 import org.apache.axis2.deployment.repository.util.DeploymentFileData;
 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.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.AxiomXpathParserUtil;
+import 
org.apache.stratos.cloud.controller.config.parser.CloudControllerConfigParser;
+import org.apache.stratos.cloud.controller.domain.IaasProvider;
+import org.apache.stratos.cloud.controller.context.FasterLookUpDataHolder;
 
 import java.util.ArrayList;
 import java.util.List;

Reply via email to