You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2014/11/28 16:33:46 UTC
[15/15] stratos git commit: Refactoring cloud controller component to
simplify the package structure
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 <im...@apache.org>
Authored: Fri Nov 28 21:03:18 2014 +0530
Committer: Imesh Gunaratne <im...@apache.org>
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;