You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2013/07/04 14:26:36 UTC
[05/10] Apache Stratos Cloud Controller Component refactoring
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/35006acc/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/pom.xml
----------------------------------------------------------------------
diff --git a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/pom.xml b/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/pom.xml
deleted file mode 100644
index db3e774..0000000
--- a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/pom.xml
+++ /dev/null
@@ -1,324 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (c) 2009-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- ~
- ~ Licensed 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
- <parent>
- <groupId>org.wso2.carbon</groupId>
- <artifactId>stratos-components</artifactId>
- <version>2.1.0</version>
- <relativePath>../../pom.xml</relativePath>
- </parent>
-
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.wso2.carbon</groupId>
- <artifactId>org.wso2.carbon.stratos.cloud.controller</artifactId>
- <packaging>bundle</packaging>
- <version>2.1.3</version>
- <name>WSO2 Carbon - Stratos Cloud Controller</name>
- <url>http://wso2.org</url>
-
- <build>
- <plugins>
- <!--plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-shade-plugin</artifactId>
- <version>1.7.1</version>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>shade</goal>
- </goals>
- <configuration>
- <artifactSet>
- <includes>
- <include>org.jclouds:*</include>
- <include>org.jclouds.*:*</include>
- </includes>
- </artifactSet>
- <filtering>true</filtering>
- <filters>
- <filter>
- <artifact>org.jclouds*:*</artifact>
- <includes>
- <include>META-INF/services/org.jclouds.apis.ApiMetadata</include>
- <include>META-INF/services/org.jclouds.providers.ProviderMetadata</include>
- </includes>
- </filter>
- </filters>
- <transformers>
- <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer">
- </transformer>
- </transformers>
- </configuration>
- </execution>
- </executions>
- </plugin-->
- <!--plugin>
- <groupId>org.apache.axis2</groupId>
- <artifactId>axis2-aar-maven-plugin</artifactId>
- <version>1.4</version>
- <extensions>true</extensions>
- </plugin-->
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-scr-plugin</artifactId>
- </plugin>
-
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <version>1.4.0</version>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
- <Bundle-Name>${project.artifactId}</Bundle-Name>
- <Export-Package>
- org.wso2.carbon.stratos.cloud.controller.interfaces.*,
- org.wso2.carbon.stratos.cloud.controller.publisher.*,
- org.wso2.carbon.stratos.cloud.controller.topic.*,
- org.wso2.carbon.stratos.cloud.controller.iaases.*,
- org.wso2.carbon.stratos.cloud.controller.util.*
- </Export-Package>
- <Private-Package>
- org.wso2.carbon.stratos.cloud.controller.*,
- !org.wso2.carbon.stratos.cloud.controller.interfaces,
- !org.wso2.carbon.stratos.cloud.controller.publisher,
- !org.wso2.carbon.stratos.cloud.controller.topic,
- !org.wso2.carbon.stratos.cloud.controller.iaases
- </Private-Package>
- <Import-Package>
- !org.apache.commons.logging,
- org.apache.commons.logging; version=0.0.0,
- org.wso2.carbon.utils.*,
- <!--org.jclouds.compute*;version="${jclouds.version}";resolution:=optional,
- org.jclouds*;version="${jclouds.version}",-->
- *; resolution:=optional
- </Import-Package>
- <DynamicImport-Package>*</DynamicImport-Package>
-
- <Axis2Deployer>CloudControllerDeployer</Axis2Deployer>
-
- <Axis2Deployer>CartridgeDeployer</Axis2Deployer>
-
- <Axis2Deployer>ServiceDeployer</Axis2Deployer>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>org.wso2.carbon</groupId>
- <artifactId>org.wso2.carbon.core</artifactId>
- <version>4.1.0</version>
- </dependency>
- <dependency>
- <groupId>org.wso2.carbon</groupId>
- <artifactId>org.wso2.carbon.utils</artifactId>
- <version>4.1.0</version>
- </dependency>
- <dependency>
- <groupId>org.wso2.carbon</groupId>
- <artifactId>org.wso2.carbon.lb.common</artifactId>
- <version>4.1.3</version>
- </dependency>
- <dependency>
- <groupId>org.wso2.carbon</groupId>
- <artifactId>org.wso2.carbon.securevault</artifactId>
- <version>${wso2carbon.version}</version>
- </dependency>
- <dependency>
- <groupId>org.hectorclient.wso2</groupId>
- <artifactId>hector-core</artifactId>
- <version>1.1.0.wso2v1</version>
- <exclusions>
- <exclusion>
- <groupId>com.google.guava.wso2</groupId>
- <artifactId>guava</artifactId>
- </exclusion>
- </exclusions>
-
- </dependency>
- <dependency>
- <groupId>com.google.guava.wso2</groupId>
- <artifactId>guava</artifactId>
- <version>${google.guava.wso2.version}</version>
- </dependency>
- <dependency>
- <groupId>org.wso2.andes.wso2</groupId>
- <artifactId>andes-client</artifactId>
- <version>0.13.wso2v3</version>
- </dependency>
- <dependency>
- <groupId>org.apache.geronimo.specs.wso2</groupId>
- <artifactId>geronimo-jms_1.1_spec</artifactId>
- <version>${orbit.version.geronimo-jms_1.1_spec}</version>
- </dependency>
-
- <dependency>
- <groupId>org.wso2.carbon</groupId>
- <artifactId>org.wso2.carbon.analytics.hive.stub</artifactId>
- <version>4.1.0</version>
- </dependency>
-
- <!-- Jclouds dependencies -->
- <dependency>
- <groupId>org.jclouds</groupId>
- <artifactId>jclouds-core</artifactId>
- <version>${jclouds.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds</groupId>
- <artifactId>jclouds-compute</artifactId>
- <version>${jclouds.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds.api</groupId>
- <artifactId>vcloud</artifactId>
- <version>1.6.0-wso2v1</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds.driver</groupId>
- <artifactId>jclouds-bouncycastle</artifactId>
- <version>${jclouds.version}</version>
- <exclusions>
- <exclusion>
- <groupId>org.bouncycastle</groupId>
- <artifactId>bcprov-jdk16</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.jclouds.driver</groupId>
- <artifactId>jclouds-sshj</artifactId>
- <version>${jclouds.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds.driver</groupId>
- <artifactId>jclouds-log4j</artifactId>
- <version>${jclouds.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds.driver</groupId>
- <artifactId>jclouds-enterprise</artifactId>
- <version>${jclouds.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds.api</groupId>
- <artifactId>ec2</artifactId>
- <version>${jclouds.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds.provider</groupId>
- <artifactId>aws-ec2</artifactId>
- <version>${jclouds.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds.api</groupId>
- <artifactId>openstack-nova</artifactId>
- <version>${jclouds.wso2.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds.api</groupId>
- <artifactId>openstack-keystone</artifactId>
- <version>${jclouds.wso2.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds</groupId>
- <artifactId>jclouds-scriptbuilder</artifactId>
- <version>${jclouds.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds.common</groupId>
- <artifactId>aws-common</artifactId>
- <version>${jclouds.version}</version>
- </dependency>
- <dependency>
- <groupId>com.jamesmurty.utils.wso2</groupId>
- <artifactId>java-xmlbuilder</artifactId>
- <version>0.4.wso2v1</version>
- </dependency>
- <dependency>
- <groupId>org.jclouds.api</groupId>
- <artifactId>vcloud</artifactId>
- <version>1.6.0-wso2v1</version>
- </dependency>
- <dependency>
- <groupId>com.google.code.gson</groupId>
- <artifactId>gson</artifactId>
- <version>${gson2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.google.guice.wso2</groupId>
- <artifactId>guice</artifactId>
- <version>${google.guice.wso2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.google.guice.assistedinject.wso2</groupId>
- <artifactId>guice-assistedinject</artifactId>
- <version>${com.google.guice.assistedinject.wso2.version}</version>
- </dependency>
- <dependency>
- <groupId>com.sun.jersey</groupId>
- <artifactId>jersey-core</artifactId>
- <version>${sun.jersey.version}</version>
- </dependency>
- <dependency>
- <groupId>net.oauth.core</groupId>
- <artifactId>oauth</artifactId>
- <version>20100527</version>
- </dependency>
- <dependency>
- <groupId>commons-io.wso2</groupId>
- <artifactId>commons-io</artifactId>
- <version>2.0.0.wso2v1</version>
- </dependency>
- <dependency>
- <groupId>rhino.wso2</groupId>
- <artifactId>js</artifactId>
- <version>1.7.0.R1-wso2v3</version>
- </dependency>
- <dependency>
- <groupId>org.wso2.carbon</groupId>
- <artifactId>org.wso2.carbon.cartridge.messages</artifactId>
- <version>2.1.1</version>
- </dependency>
- <dependency>
- <groupId>org.wso2.carbon</groupId>
- <artifactId>org.wso2.carbon.databridge.agent.thrift</artifactId>
- <version>4.1.0</version>
- </dependency>
- <dependency>
- <groupId>org.wso2.carbon</groupId>
- <artifactId>org.wso2.carbon.ntask.core</artifactId>
- <version>4.1.0</version>
- </dependency>
- </dependencies>
- <properties>
- <gson2.version>2.2</gson2.version>
- <jclouds.version>1.5.0-beta.5</jclouds.version>
- <jclouds.wso2.version>1.5.0-beta.5.wso2v1</jclouds.wso2.version>
- <com.google.guice.assistedinject.wso2.version>3.0.wso2v1</com.google.guice.assistedinject.wso2.version>
- <sun.jersey.version>1.12</sun.jersey.version>
- </properties>
-</project>
-
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/35006acc/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/axiom/AxiomXpathParser.java
----------------------------------------------------------------------
diff --git a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/axiom/AxiomXpathParser.java b/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/axiom/AxiomXpathParser.java
deleted file mode 100644
index d6c722c..0000000
--- a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/axiom/AxiomXpathParser.java
+++ /dev/null
@@ -1,1263 +0,0 @@
-/*
- * Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. 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.wso2.carbon.stratos.cloud.controller.axiom;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-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 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.jaxen.JaxenException;
-import org.w3c.dom.Element;
-import org.wso2.carbon.stratos.cloud.controller.exception.CloudControllerException;
-import org.wso2.carbon.stratos.cloud.controller.exception.MalformedConfigurationFileException;
-import org.wso2.carbon.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
-import org.wso2.carbon.stratos.cloud.controller.util.AppType;
-import org.wso2.carbon.stratos.cloud.controller.util.Cartridge;
-import org.wso2.carbon.stratos.cloud.controller.util.CloudControllerConstants;
-import org.wso2.carbon.stratos.cloud.controller.util.CloudControllerUtil;
-import org.wso2.carbon.stratos.cloud.controller.util.IaasProvider;
-import org.wso2.carbon.stratos.cloud.controller.util.PortMapping;
-import org.wso2.carbon.stratos.cloud.controller.util.ServiceContext;
-import org.wso2.securevault.SecretResolver;
-import org.wso2.securevault.SecretResolverFactory;
-
-/**
- * This class is parsing configuration files using Axiom Xpath.
- */
-public class AxiomXpathParser {
-
- private static final Log log = LogFactory.getLog(AxiomXpathParser.class);
- private OMElement documentElement;
- private final File xmlSource;
-
- public AxiomXpathParser(final File xmlFile) {
- xmlSource = xmlFile;
- }
-
- /**
- * @param cartridgeElement Cartridges section as a {@link String}
- * @param aCartridge {@link Cartridge} instance.
- * @param appTypesNodes nodes of App types.
- */
- private void getAppTypes(String cartridgeElementString, Cartridge aCartridge,
- List<?> appTypesNodes) {
- Object nodeObj;
- if (!appTypesNodes.isEmpty()) {
- if ((nodeObj = appTypesNodes.get(0)) instanceof OMNode) {
- OMNode appTypeNode = (OMNode) nodeObj;
-
- if (appTypeNode.getType() == OMNode.ELEMENT_NODE) {
-
- OMElement appTypesElt = (OMElement) appTypeNode;
-
- for (Iterator<?> iterator =
- appTypesElt.getChildrenWithName(new QName(
- CloudControllerConstants.APP_TYPE_ELEMENT)); iterator.hasNext();) {
- OMElement appElt = (OMElement) iterator.next();
-
- String name =
- appElt.getAttributeValue(new QName(
- CloudControllerConstants.NAME_ATTR));
- String appSpecificMapping =
- appElt.getAttributeValue(new QName(
- CloudControllerConstants.APP_SPECIFIC_MAPPING_ATTR));
-
- AppType appType;
-
- if (appSpecificMapping == null) {
- appType = new AppType(name);
- } else {
- appType =
- new AppType(name,
- Boolean.valueOf(appSpecificMapping));
- }
-
- aCartridge.addAppType(appType);
- }
-
- } else {
- String msg =
- "Essential '" + CloudControllerConstants.APP_TYPE_ELEMENT +
- "' element cannot" + " be found in " +
- cartridgeElementString + " of " +
- xmlSource;
- handleException(msg);
- }
-
- }
- }
- }
-
- /**
- * @return a List of {@link Cartridge}s.
- */
- public List<Cartridge> getCartridgesList() {
-
- FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance();
-
- List<IaasProvider> iaasProviders = dataHolder.getIaasProviders();
-
- if (iaasProviders == null) {
- dataHolder.setIaasProviders((iaasProviders = new ArrayList<IaasProvider>()));
- }
-
- List<Cartridge> cartridges = new ArrayList<Cartridge>();
-
- String xpath = CloudControllerConstants.CARTRIDGES_ELEMENT_XPATH;
-
- // cartridges can be found from this XPATH
- List<?> cartridgeNodes = getMatchingNodes(xpath, documentElement);
-
- if (cartridgeNodes == null || cartridgeNodes.isEmpty()) {
- // or from this XPATH
- xpath = CloudControllerConstants.CARTRIDGE_ELEMENT_XPATH;
- cartridgeNodes = getMatchingNodes(xpath, documentElement);
- }
-
- if (cartridgeNodes == null || cartridgeNodes.isEmpty()) {
- log.warn("No cartridge found in this configuration file : " + xmlSource.getPath());
- return cartridges;
- }
-
- for (Object obj : cartridgeNodes) {
-
- if (obj instanceof OMNode) {
- OMNode cartridgeNode = (OMNode) obj;
-
- if (cartridgeNode.getType() == OMNode.ELEMENT_NODE) {
-
- OMElement cartridgeElement = (OMElement) cartridgeNode;
-
- // retrieve Attributes of a Cartridge definition
- String type = cartridgeElement.getAttributeValue(new QName(
- CloudControllerConstants.TYPE_ATTR));
- String host = cartridgeElement.getAttributeValue(new QName(
- CloudControllerConstants.HOST_ATTR));
- String provider = cartridgeElement.getAttributeValue(new QName(
- CloudControllerConstants.PROVIDER_ATTR));
-
- String version =
- cartridgeElement.getAttributeValue(new QName(
- CloudControllerConstants.VERSION_ATTR));
-
- boolean multiTenant = Boolean.valueOf(cartridgeElement.getAttributeValue(new QName(
- CloudControllerConstants.MULTI_TENANT_ATTR)));
-
- Cartridge aCartridge;
-
- if ((aCartridge = dataHolder.getCartridge(type)) == null) {
-
- aCartridge = new Cartridge(type, host, provider, version, multiTenant);
- }
-
- // read displayName
- Iterator<?> itName =
- cartridgeElement.getChildrenWithName(new QName(
- CloudControllerConstants.DISPLAY_NAME_ELEMENT));
-
- if (itName.hasNext()) {
- OMElement name = (OMElement) itName.next();
-
- aCartridge.setDisplayName(name.getText());
- }
-
- // read description
- Iterator<?> it =
- cartridgeElement.getChildrenWithName(new QName(
- CloudControllerConstants.DESCRIPTION_ELEMENT));
-
- if (it.hasNext()) {
- OMElement desc = (OMElement) it.next();
-
- aCartridge.setDescription(desc.getText());
- }
-
- // load properties of this cartridge
- loadProperties(cartridgeElement, aCartridge.getProperties());
-
- // retrieve the list of IaaS providers
- List<?> iaasProviderNodes = getMatchingNodes(xpath + CloudControllerConstants.IAAS_PROVIDER_ELEMENT_XPATH,
- cartridgeElement);
-
- getIaasProviders(iaasProviders, cartridgeElement.toString(), aCartridge, iaasProviderNodes);
-
- // load dirs
- List<?> deploymentNodes = getMatchingNodes(xpath + CloudControllerConstants.DEPLOYMENT_ELEMENT_XPATH,
- cartridgeElement);
- setDeploymentDirs(cartridgeElement.toString(), aCartridge, deploymentNodes);
-
- // load port mappings
- List<?> portMappingNodes =
- getMatchingNodes(xpath +
- CloudControllerConstants.PORT_MAPPING_ELEMENT_XPATH,
- cartridgeElement);
- getPortMappings(cartridgeElement.toString(), aCartridge, portMappingNodes);
-
- // load appTypes
- List<?> appTypesNodes =
- getMatchingNodes(xpath +
- CloudControllerConstants.APP_TYPES_ELEMENT_XPATH,
- cartridgeElement);
- getAppTypes(cartridgeElement.toString(), aCartridge, appTypesNodes);
-
- cartridges.add(aCartridge);
-
- if (dataHolder.getCartridge(type) == null) {
- dataHolder.addCartridge(aCartridge);
- }
- }
- }
- }
-
- return cartridges;
-
- }
-
- /**
- * @param iaasProviders
- * @param cartridgeElementString
- * @param aCartridge
- * @param iaasProviderNodes
- */
- private void getIaasProviders(List<IaasProvider> iaasProviders,
- String cartridgeElementString, Cartridge aCartridge,
- List<?> iaasProviderNodes) {
- for (Object nodeObj : iaasProviderNodes) {
- if (nodeObj instanceof OMNode) {
- OMNode iaasProviderNode = (OMNode) nodeObj;
-
- if (iaasProviderNode.getType() == OMNode.ELEMENT_NODE) {
-
- OMElement iaasElt = (OMElement) iaasProviderNode;
-
- // add the IaasProvider to this cartridge
- aCartridge.addIaasProvider(getIaasProvider(iaasElt, iaasProviders));
-
- } else {
- String msg =
- "Essential '" +
- CloudControllerConstants.IAAS_PROVIDER_ELEMENT +
- "' element cannot" + " be found in " +
- cartridgeElementString + " of " +
- xmlSource;
- handleException(msg);
- }
-
- }
- }
- }
-
- private 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 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;
- }
-
- private OMElement getElement(final OMElement rootElt, final String eltStr, final String xpath) {
- List<?> nodes = getMatchingNodes(xpath, rootElt);
- neglectingWarn(eltStr, nodes.size());
- OMElement element = getElement(nodes.get(0));
- return element;
- }
-
- private OMElement getFirstChildElement(final OMElement root, final String childName) {
- Iterator<?> it = root.getChildrenWithName(new QName(childName));
- if (it.hasNext()) {
- return (OMElement) it.next();
- }
-
- return null;
- }
-
- /**
- *
- * @param xpath
- * XPATH expression to be read.
- * @param elt
- * OMElement to be used for the search.
- * @return List matching OMNode list
- */
- @SuppressWarnings("unchecked")
- public OMNode getFirstMatchingNode(final String xpath, final OMElement elt) {
-
- AXIOMXPath axiomXpath;
- List<OMNode> nodeList = null;
- try {
- axiomXpath = new AXIOMXPath(xpath);
- nodeList = axiomXpath.selectNodes(elt);
- } catch (JaxenException e) {
- String msg = "Error occurred while reading the Xpath (" + xpath + ")";
- log.error(msg, e);
- throw new CloudControllerException(msg, e);
- }
-
- return nodeList != null ? nodeList.get(0) : null;
- }
-
- private IaasProvider getIaasProvider(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(iaas, iaasElt);
- loadMaxInstanceLimit(iaas, iaasElt);
- loadProperties(iaasElt, iaas.getProperties());
- loadTemplate(iaas, iaasElt);
- loadScalingOrders(iaas, iaasElt);
- loadProvider(iaas, iaasElt);
- loadIdentity(iaas, iaasElt);
- loadCredentials(iaas, iaasElt, xpath);
- }
-
- return iaas;
- }
-
- /**
- *
- * @param xpath
- * XPATH expression to be read.
- * @return List matching OMNode list
- */
- @SuppressWarnings("unchecked")
- public List<OMNode> getMatchingNodes(final String xpath) {
-
- AXIOMXPath axiomXpath;
- List<OMNode> nodeList = null;
- try {
- axiomXpath = new AXIOMXPath(xpath);
- nodeList = axiomXpath.selectNodes(documentElement);
- } catch (JaxenException e) {
- String msg = "Error occurred while reading the Xpath (" + xpath + ")";
- log.error(msg, e);
- throw new CloudControllerException(msg, e);
- }
-
- return nodeList;
- }
-
- /**
- *
- * @param xpath
- * XPATH expression to be read.
- * @param elt
- * OMElement to be used for the search.
- * @return List matching OMNode list
- */
- @SuppressWarnings("unchecked")
- public List<OMNode> getMatchingNodes(final String xpath, final OMElement elt) {
-
- AXIOMXPath axiomXpath;
- List<OMNode> nodeList = null;
- try {
- axiomXpath = new AXIOMXPath(xpath);
- nodeList = axiomXpath.selectNodes(elt);
- } catch (JaxenException e) {
- String msg = "Error occurred while reading the Xpath (" + xpath + ")";
- log.error(msg, e);
- throw new CloudControllerException(msg, e);
- }
-
- return nodeList;
- }
-
- /**
- * @param cartridgeElement Cartridges section as a {@link String}
- * @param aCartridge {@link Cartridge} instance.
- * @param portMappingNodes nodes of port mapping elements
- */
- private void getPortMappings(String cartridgeElementString, Cartridge aCartridge,
- List<?> portMappingNodes) {
- Object nodeObj;
- if (!portMappingNodes.isEmpty()) {
- if ((nodeObj = portMappingNodes.get(0)) instanceof OMNode) {
- OMNode portMappingNode = (OMNode) nodeObj;
-
- if (portMappingNode.getType() == OMNode.ELEMENT_NODE) {
-
- OMElement portMappingElt = (OMElement) portMappingNode;
-
- for (Iterator<?> iterator =
- portMappingElt.getChildrenWithName(new QName(
- CloudControllerConstants.HTTP_ELEMENT)); iterator.hasNext();) {
- OMElement httpElt = (OMElement) iterator.next();
-
- String port =
- httpElt.getAttributeValue(new QName(
- CloudControllerConstants.PORT_ATTR));
- String proxyPort =
- httpElt.getAttributeValue(new QName(
- CloudControllerConstants.PROXY_PORT_ATTR));
-
- PortMapping mapping =
- new PortMapping(
- CloudControllerConstants.HTTP_ELEMENT,
- port, proxyPort);
-
- aCartridge.addPortMapping(mapping);
- }
-
- for (Iterator<?> iterator =
- portMappingElt.getChildrenWithName(new QName(
- CloudControllerConstants.HTTPS_ELEMENT)); iterator.hasNext();) {
- OMElement httpsElt = (OMElement) iterator.next();
-
- String port =
- httpsElt.getAttributeValue(new QName(
- CloudControllerConstants.PORT_ATTR));
- String proxyPort =
- httpsElt.getAttributeValue(new QName(
- CloudControllerConstants.PROXY_PORT_ATTR));
-
- PortMapping mapping =
- new PortMapping(
- CloudControllerConstants.HTTPS_ELEMENT,
- port, proxyPort);
-
- aCartridge.addPortMapping(mapping);
- }
-
- } else {
- String msg =
- "Essential '" +
- CloudControllerConstants.PORT_MAPPING_ELEMENT +
- "' element cannot" + " be found in " +
- cartridgeElementString + " of " +
- xmlSource;
- handleException(msg);
- }
-
- }
- }
- }
-
- public List<ServiceContext> getServiceContexts() {
-
- List<ServiceContext> serviceContextList = new ArrayList<ServiceContext>();
-
- // services can be found from this XPATH
- String xpath = CloudControllerConstants.SERVICES_ELEMENT_XPATH;
- List<?> serviceNodes = getMatchingNodes(xpath, documentElement);
-
- if (serviceNodes == null || serviceNodes.isEmpty()) {
- // or from this XPATH
- xpath = CloudControllerConstants.SERVICE_ELEMENT_XPATH;
- serviceNodes = getMatchingNodes(xpath, documentElement);
- }
-
- if (serviceNodes == null || serviceNodes.isEmpty()) {
- log.warn("No service found in this configuration file : " + xmlSource.getPath());
- return serviceContextList;
- }
-
- for (Object obj : serviceNodes) {
- ServiceContext serviceCtxt = new ServiceContext();
-
- // set the definition file
- serviceCtxt.setFile(xmlSource);
-
- if (obj instanceof OMNode) {
- OMNode serviceNode = (OMNode) obj;
-
- if (serviceNode.getType() == OMNode.ELEMENT_NODE) {
-
- OMElement node = (OMElement) serviceNode;
-
- if (node.getAttribute(new QName(CloudControllerConstants.SERVICE_DOMAIN_ATTR)) == null) {
- String msg =
- "Essential '" + CloudControllerConstants.SERVICE_DOMAIN_ATTR + "' " +
- "attribute of '" + CloudControllerConstants.SERVICE_ELEMENT +
- "' element cannot be found in " + xmlSource;
-
- handleException(msg);
- }
-
- // set domain name
- serviceCtxt.setDomainName(node.getAttribute(new QName(
- CloudControllerConstants.SERVICE_DOMAIN_ATTR))
- .getAttributeValue());
-
- // set sub domain
- serviceCtxt.setSubDomainName(node.getAttribute(new QName(
- CloudControllerConstants.SERVICE_SUB_DOMAIN_ATTR))
- .getAttributeValue());
-
- // set tenant range
- serviceCtxt.setTenantRange(node.getAttribute(new QName(
- CloudControllerConstants.SERVICE_TENANT_RANGE_ATTR))
- .getAttributeValue());
-
- OMNode cartridgeNode =
- getFirstMatchingNode(xpath +
- CloudControllerConstants.CARTRIDGE_ELEMENT_XPATH,
- node);
-
- if (cartridgeNode != null && cartridgeNode.getType() == OMNode.ELEMENT_NODE) {
-
- OMElement cartridgeElt = (OMElement) cartridgeNode;
-
- String type =
- cartridgeElt.getAttribute(new QName(CloudControllerConstants.TYPE_ATTR))
- .getAttributeValue();
-
- if ("".equals(type)) {
- String msg =
- "Essential '" + CloudControllerConstants.TYPE_ATTR + "' " +
- " attribute of '" +
- CloudControllerConstants.CARTRIDGE_ELEMENT + "' of '" +
- CloudControllerConstants.SERVICE_ELEMENT +
- "' element cannot be found in " + xmlSource;
-
- handleException(msg);
- }
-
- // set Cartridge type
- serviceCtxt.setCartridgeType(type);
-
- }
- if (serviceCtxt.getCartridgeType() == null) {
- String msg =
- "Essential '" + CloudControllerConstants.CARTRIDGE_ELEMENT +
- "' element" + " has not specified in " + xmlSource;
- handleException(msg);
- }
-
- // load payload
- loadPayload(getMatchingNodes(xpath + CloudControllerConstants.PAYLOAD_ELEMENT_XPATH,
- node), serviceCtxt);
-
- // load host name
- loadHostName(getMatchingNodes(xpath + CloudControllerConstants.HOST_ELEMENT_XPATH,
- node), serviceCtxt);
-
- // load properties
- loadProperties(node, serviceCtxt.getProperties());
-
- }
- }
-
- FasterLookUpDataHolder.getInstance().addServiceContext(serviceCtxt);
- // add each domain specific template to list
- serviceContextList.add(serviceCtxt);
- }
-
- return serviceContextList;
-
- }
-
- public File getXmlSource() {
- return xmlSource;
- }
-
- private void handleException(final String msg) {
- log.error(msg);
- throw new MalformedConfigurationFileException(msg);
- }
-
- private void handleException(final String msg, final Exception e) {
- log.error(msg, e);
- throw new MalformedConfigurationFileException(msg, e);
- }
-
- private void loadClassName(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(xmlSource + " 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 " + xmlSource;
- handleException(msg);
- }
-
- }
-
- private void loadCredentials(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(documentElement, false);
- String alias =
- credentialElt.getAttributeValue(new QName(
- CloudControllerConstants.ALIAS_ATTRIBUTE));
-
- // 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(xmlSource + " 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 " + xmlSource;
- handleException(msg);
- }
-
- }
-
- private void loadHostName(final List<OMNode> nodes, final ServiceContext serviceCtxt) {
-
- if (nodes == null || nodes.isEmpty()) {
- return;
- }
-
- // read host element
- if (nodes.get(0).getType() == OMNode.ELEMENT_NODE) {
-
- OMElement node = (OMElement) nodes.get(0);
-
- if (node.getText() != null) {
- serviceCtxt.setHostName(node.getText());
- }
-
- }
- }
-
- private void loadIdentity(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(documentElement, false);
- String alias =
- identityElt.getAttributeValue(new QName(
- CloudControllerConstants.ALIAS_ATTRIBUTE));
-
- // 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(xmlSource + " 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 " + xmlSource;
- handleException(msg);
- }
-
- }
-
- private void loadMaxInstanceLimit(IaasProvider iaas, final OMElement iaasElt) {
-
- Iterator<?> it =
- iaasElt.getChildrenWithName(new QName(
- CloudControllerConstants.MAX_INSTANCE_LIMIT_ELEMENT));
-
- if (it.hasNext()) {
- OMElement maxInstanceLimitElt = (OMElement) it.next();
-
- try {
- iaas.setMaxInstanceLimit(Integer.parseInt(maxInstanceLimitElt.getText()));
- } catch (NumberFormatException e) {
- String msg =
- CloudControllerConstants.MAX_INSTANCE_LIMIT_ELEMENT +
- " element contained" + " in " + xmlSource + "" +
- " has a value which is not an Integer value.";
- handleException(msg, e);
- }
-
- }
-
- if (it.hasNext()) {
- log.warn(xmlSource + " contains more than one " +
- CloudControllerConstants.MAX_INSTANCE_LIMIT_ELEMENT + " elements!" +
- " Elements other than the first will be neglected.");
- }
-
- }
-
- private void loadPayload(final List<OMNode> nodes, final ServiceContext serviceCtxt) {
-
- if (nodes == null || nodes.isEmpty()) {
- return;
- }
-
- // read payload element
- if (nodes.get(0).getType() == OMNode.ELEMENT_NODE) {
-
- OMElement node = (OMElement) nodes.get(0);
-
- if (node.getText() != null) {
- byte[] payload = CloudControllerUtil.getBytesFromFile(node.getText());
- serviceCtxt.setPayload(payload);
-
- }
-
- }
-
- }
-
- private void loadProperties(final OMElement iaasElt, final Map<String, String> propertyMap) {
-
- Iterator<?> it =
- iaasElt.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 " + xmlSource;
-
- handleException(msg);
- }
-
- propertyMap.put(prop.getAttribute(new QName(CloudControllerConstants.PROPERTY_NAME_ATTR))
- .getAttributeValue(),
- prop.getAttribute(new QName(CloudControllerConstants.PROPERTY_VALUE_ATTR))
- .getAttributeValue());
- }
-
- }
-
- private void loadProvider(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(xmlSource + " 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 " + xmlSource;
- handleException(msg);
- }
-
- }
-
- private void loadScalingOrders(final IaasProvider iaas, final OMElement iaasElt) {
- // set scale up order
- Iterator<?> it =
- iaasElt.getChildrenWithName(new QName(
- CloudControllerConstants.SCALE_UP_ORDER_ELEMENT));
-
- if (it.hasNext()) {
- OMElement scaleUpOrderElt = (OMElement) it.next();
-
- try {
- iaas.setScaleUpOrder(Integer.parseInt(scaleUpOrderElt.getText()));
- } catch (NumberFormatException e) {
- String msg =
- CloudControllerConstants.SCALE_UP_ORDER_ELEMENT + " element contained" +
- " in " + xmlSource + "" +
- " has a value which is not an Integer value.";
- handleException(msg, e);
- }
- }
-
- if (it.hasNext()) {
- log.warn(xmlSource + " contains more than one " +
- CloudControllerConstants.SCALE_UP_ORDER_ELEMENT + " elements!" +
- " Elements other than the first will be neglected.");
- }
-
- if (iaas.getScaleUpOrder() == -1) {
- String msg =
- "Essential '" + CloudControllerConstants.SCALE_UP_ORDER_ELEMENT + "' element" +
- " has not specified in " + xmlSource;
- handleException(msg);
- }
-
- // set scale down order
- it = iaasElt.getChildrenWithName(new QName(CloudControllerConstants.SCALE_DOWN_ORDER_ELEMENT));
-
- if (it.hasNext()) {
- OMElement scaleDownElt = (OMElement) it.next();
-
- try {
- iaas.setScaleDownOrder(Integer.parseInt(scaleDownElt.getText()));
- } catch (NumberFormatException e) {
- String msg =
- CloudControllerConstants.SCALE_DOWN_ORDER_ELEMENT + " element contained" +
- " in " + xmlSource + "" +
- " has a value which is not an Integer value.";
- handleException(msg, e);
- }
- }
-
- if (it.hasNext()) {
- log.warn(xmlSource + " contains more than one " +
- CloudControllerConstants.SCALE_DOWN_ORDER_ELEMENT + " elements!" +
- " Elements other than the first will be neglected.");
- }
-
- if (iaas.getScaleDownOrder() == -1) {
- String msg =
- "Essential '" + CloudControllerConstants.SCALE_DOWN_ORDER_ELEMENT + "' element" +
- " has not specified in " + xmlSource;
- handleException(msg);
- }
-
- }
-
- private void loadTemplate(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(xmlSource + " contains more than one " + CloudControllerConstants.IMAGE_ID_ELEMENT +
- " elements!" + " Elements other than the first will be neglected.");
- }
-
- }
-
- private void neglectingWarn(final String elt, final int size) {
- if (size > 1) {
- log.warn(xmlSource + " contains more than one " + elt + " elements!" +
- " Elements other than the first will be neglected.");
- }
- }
-
- public void parse() {
-
- if (xmlSource.exists()) {
- try {
- documentElement = new StAXOMBuilder(xmlSource.getPath()).getDocumentElement();
-
- } catch (Exception ex) {
- String msg = "Error occurred when parsing the " + xmlSource.getPath() + ".";
- handleException(msg, ex);
- }
- } else {
- String msg = "Configuration file cannot be found : " + xmlSource.getPath();
- handleException(msg);
- }
- }
-
- private 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).");
- }
-
- private String resolveSecret(final OMElement elt) {
- // retrieve the value using secure vault
- SecretResolver secretResolver = SecretResolverFactory.create(documentElement, false);
-
- String alias = elt.getAttributeValue(new QName(CloudControllerConstants.ALIAS_ATTRIBUTE));
-
- // retrieve the secured password
- if (secretResolver != null && secretResolver.isInitialized() &&
- secretResolver.isTokenProtected(alias)) {
-
- return secretResolver.resolve(alias);
-
- }
-
- return null;
- }
-
- public void setDataPublisherRelatedData() {
-
- String eltStr = CloudControllerConstants.DATA_PUBLISHER_ELEMENT;
- // get dataPublisher element
- OMElement element =
- getElement(documentElement, eltStr,
- CloudControllerConstants.DATA_PUBLISHER_XPATH);
-
- if (element == null) {
- 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 =
- getFirstChildElement(element,
- CloudControllerConstants.BAM_SERVER_ELEMENT);
- OMElement elt;
-
- if (childElement != null) {
- // set bam user name
- elt =
- getFirstChildElement(childElement,
- CloudControllerConstants.BAM_SERVER_ADMIN_USERNAME_ELEMENT);
- if (elt != null) {
- dataHolder.setBamUsername(elt.getText());
- }
- // set bam password
- elt =
- getFirstChildElement(childElement,
- CloudControllerConstants.BAM_SERVER_ADMIN_PASSWORD_ELEMENT);
- if (elt != null) {
- String password = resolveSecret(elt);
- if (password == null) {
- plainTextWarn(CloudControllerConstants.BAM_SERVER_ADMIN_PASSWORD_ELEMENT);
- password = elt.getText();
- }
-
- if (password != null) {
- dataHolder.setBamPassword(password);
- }
- }
- }
-
- // set cron
- childElement = getFirstChildElement(element, CloudControllerConstants.CRON_ELEMENT);
- if (childElement != null) {
- dataHolder.setDataPublisherCron(childElement.getText());
- }
-
- // set cassandra info
- childElement = getFirstChildElement(element, CloudControllerConstants.CASSANDRA_INFO_ELEMENT);
-
- if (childElement != null) {
- // set connection url
- elt = getFirstChildElement(childElement, CloudControllerConstants.CONNECTION_URL_ELEMENT);
- if (elt != null) {
- dataHolder.setCassandraConnUrl(elt.getText());
- }
-
- // set user name
- elt = getFirstChildElement(childElement, CloudControllerConstants.USER_NAME_ELEMENT);
- if (elt != null) {
- dataHolder.setCassandraUser(elt.getText());
- }
- // set password
- elt = getFirstChildElement(childElement, CloudControllerConstants.PASSWORD_ELEMENT);
- if (elt != null) {
- String password = resolveSecret(elt);
- if (password == null) {
- plainTextWarn(CloudControllerConstants.PASSWORD_ELEMENT);
- password = elt.getText();
- }
-
- if (password != null) {
- dataHolder.setCassandraPassword(password);
- }
- }
- }
-
- }
-
- }
-
- /**
- * @param cartridgeElement Cartridges section as a {@link String}
- * @param aCartridge {@link Cartridge} instance.
- * @param deploymentNodes list of deployment directory nodes
- */
- private void setDeploymentDirs(String cartridgeElementString, Cartridge aCartridge,
- List<?> deploymentNodes) {
- Object nodeObj;
- if ((nodeObj = deploymentNodes.get(0)) instanceof OMNode) {
- OMNode deploymentNode = (OMNode) nodeObj;
-
- if (deploymentNode.getType() == OMNode.ELEMENT_NODE) {
-
- OMElement deployElt = (OMElement) deploymentNode;
-
- if (deployElt.getAttributeValue(new QName(
- CloudControllerConstants.BASE_DIR_ATTR)) != null) {
-
- aCartridge.setBaseDir(deployElt.getAttributeValue(new QName(
- CloudControllerConstants.BASE_DIR_ATTR)));
- }
-
- for (Iterator<?> iterator =
- deployElt.getChildrenWithName(new QName(
- CloudControllerConstants.DIRECTORY_ELEMENT)); iterator.hasNext();) {
- OMElement dir = (OMElement) iterator.next();
- aCartridge.addDeploymentDir(dir.getText());
- }
-
- } else {
- String msg =
- "Essential '" + CloudControllerConstants.DEPLOYMENT_ELEMENT +
- "' element cannot" + " be found in " +
- cartridgeElementString + " of " + xmlSource;
- handleException(msg);
- }
-
- }
- }
-
- public void setIaasProvidersList() {
-
- List<IaasProvider> iaasProviders = FasterLookUpDataHolder.getInstance().getIaasProviders();
-
- if (iaasProviders == null) {
- FasterLookUpDataHolder.getInstance()
- .setIaasProviders((iaasProviders = new ArrayList<IaasProvider>()));
- }
-
- List<OMNode> nodeList = getMatchingNodes(CloudControllerConstants.IAAS_PROVIDER_XPATH);
-
- // this is a valid scenario. User can have 0..1 iaas provider elements
- // in cloud-controller xml.
- if (nodeList == null || nodeList.isEmpty()) {
- return;
- }
-
- for (OMNode node : nodeList) {
- iaasProviders.add(getIaasProvider(node, iaasProviders));
- }
-
- }
-
-
- public void setTopologySyncRelatedData() {
-
- String eltStr = CloudControllerConstants.TOPOLOGY_SYNC_ELEMENT;
- // get topologySync element
- OMElement element =
- getElement(documentElement, eltStr,
- CloudControllerConstants.TOPOLOGY_SYNC_XPATH);
-
- if (element == null) {
- return;
- }
-
- // get enable attribute
- boolean isEnable =
- Boolean.parseBoolean(element.getAttributeValue(new QName(
- CloudControllerConstants.ENABLE_ATTR)));
-
- FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance();
- dataHolder.setEnableTopologySync(isEnable);
-
- if (isEnable) {
- // get MB server info
- OMElement childElement =
- getFirstChildElement(element,
- CloudControllerConstants.MB_SERVER_ELEMENT);
-
- if (childElement != null) {
- // set MB server IP
- dataHolder.setMBServerUrl(childElement.getText());
- }
-
- // set cron
- childElement = getFirstChildElement(element, CloudControllerConstants.CRON_ELEMENT);
- if (childElement != null) {
- dataHolder.setTopologySynchronizerCron(childElement.getText());
- }
-
- }
-
- }
-
- public boolean validate(final File schemaFile) throws Exception {
- validate(documentElement, schemaFile);
- return true;
- }
-
- public void validate(final OMElement omElement, final File schemaFile) throws Exception {
-
- 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));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/35006acc/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/concurrent/ThreadExecutor.java
----------------------------------------------------------------------
diff --git a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/concurrent/ThreadExecutor.java b/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/concurrent/ThreadExecutor.java
deleted file mode 100644
index 43baf76..0000000
--- a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/concurrent/ThreadExecutor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
-*
-* WSO2 Inc. 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.wso2.carbon.stratos.cloud.controller.concurrent;
-
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-/**
- * This class can be used to create a thread pool, and hand over new jobs to the pool.
- */
-public class ThreadExecutor {
- private ExecutorService executor;
-
- public ThreadExecutor(int poolSize) {
- executor = Executors.newFixedThreadPool(poolSize);
- }
-
- public void execute(Runnable job){
- executor.execute(job);
- }
-
- public void executeAll(Runnable[] jobs){
- for (Runnable job : jobs) {
-
- executor.execute(job);
- }
- }
-
- public void shutdown() {
- // This will make the executor accept no new threads
- // and finish all existing threads in the queue
- executor.shutdown();
- // Wait until all threads are finished
- while (!executor.isTerminated()) {}
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/35006acc/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/consumers/TopologyBuilder.java
----------------------------------------------------------------------
diff --git a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/consumers/TopologyBuilder.java b/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/consumers/TopologyBuilder.java
deleted file mode 100644
index 46f5261..0000000
--- a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/consumers/TopologyBuilder.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package org.wso2.carbon.stratos.cloud.controller.consumers;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.BlockingQueue;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.wso2.carbon.lb.common.conf.structure.Node;
-import org.wso2.carbon.lb.common.conf.structure.NodeBuilder;
-import org.wso2.carbon.lb.common.conf.util.Constants;
-import org.wso2.carbon.stratos.cloud.controller.exception.CloudControllerException;
-import org.wso2.carbon.stratos.cloud.controller.util.CloudControllerConstants;
-import org.wso2.carbon.stratos.cloud.controller.util.DeclarativeServiceReferenceHolder;
-import org.wso2.carbon.stratos.cloud.controller.util.ServiceContext;
-
-/**
- * This class is responsible for generating the service topology and
- * publishing it to a topic.
- */
-public class TopologyBuilder implements Runnable {
-
- private BlockingQueue<List<ServiceContext>> sharedQueue;
- private static File topologyFile, backup;
- private static final Log log = LogFactory.getLog(TopologyBuilder.class);
- private static DeclarativeServiceReferenceHolder data = DeclarativeServiceReferenceHolder.getInstance();
-
- public TopologyBuilder(BlockingQueue<List<ServiceContext>> queue){
-
- sharedQueue = queue;
- topologyFile = new File(CloudControllerConstants.TOPOLOGY_FILE_PATH);
- backup = new File(CloudControllerConstants.TOPOLOGY_FILE_PATH+".back");
-
- }
-
- @Override
- public void run() {
-
- while(true){
- try {
- Object obj = sharedQueue.take();
- boolean isAdded = false;
-
- if(obj instanceof List<?>){
- @SuppressWarnings("unchecked")
- List<ServiceContext> ctxts = (List<ServiceContext>) obj;
-
- for (ServiceContext serviceContext : ctxts) {
-
- Node newNode = serviceContext.toNode();
-
- if(!topologyFile.exists()){
- FileUtils.writeStringToFile(topologyFile, "services {\n}");
- }
-
- String currentContent = FileUtils.readFileToString(topologyFile);
- Node currentNode = NodeBuilder.buildNode(currentContent);
-
- for (Node aNode : currentNode.getChildNodes()) {
- // similar service element is present
- if(aNode.getName().equals(newNode.getName())){
- // hence, we should not override, but append
- Node domainsNode = aNode.findChildNodeByName(Constants.DOMAIN_ELEMENT);
-
- if(domainsNode == null){
- // existing node is useless
- currentNode.removeChildNode(aNode.getName());
- currentNode.appendChild(newNode);
- break;
- }
-
- // append the new node/s
- for (Node serNode : newNode.findChildNodeByName(Constants.DOMAIN_ELEMENT).getChildNodes()) {
-
- for (Node currentSerNode : domainsNode.getChildNodes()) {
- String prop = Constants.SUB_DOMAIN_ELEMENT;
- if(serNode.getName().equals(currentSerNode.getName()) &&
- serNode.getProperty(prop).equals(currentSerNode.getProperty(prop))){
- // if domain and sub domain, are not unique, we shouldn't append, but override
- domainsNode.removeChildNode(currentSerNode.getName());
- break;
- }
- }
-
- domainsNode.appendChild(serNode);
- }
- isAdded = true;
- break;
- }
- }
-
- if (!isAdded) {
- currentNode.appendChild(newNode);
- }
-
- if (topologyFile.exists()) {
- backup.delete();
- topologyFile.renameTo(backup);
- }
-
- // overwrite the topology file
- FileUtils.writeStringToFile(topologyFile, currentNode.toString());
-
- // publish to the topic - to sync immediately
- data.getConfigPub().publish(CloudControllerConstants.TOPIC_NAME, currentNode.toString());
-
- }
- }
-
- } catch (InterruptedException ignore) {
- } catch (IOException e) {
- log.error(e.getMessage(), e);
- throw new CloudControllerException(e.getMessage(), e);
- }
- }
-
- }
-
- public static void removeTopologyAndPublish(ServiceContext serviceContext){
-
- Node currentNodeToBeRemoved = null;
- Node nodeToBeRemoved = serviceContext.toNode();
-
- if(!topologyFile.exists()){
- return;
- }
- try{
- String currentContent = FileUtils.readFileToString(topologyFile);
- Node currentNode = NodeBuilder.buildNode(currentContent);
-
- for (Node aNode : currentNode.getChildNodes()) {
- // similar service element is present
- if(aNode.getName().equals(nodeToBeRemoved.getName())){
- // let's check whether the domain node exists
-
- Node domainsNode = aNode.findChildNodeByName(Constants.DOMAIN_ELEMENT);
-
- if(domainsNode == null){
- continue;
- }
-
- for (Node serNode : nodeToBeRemoved.findChildNodeByName(Constants.DOMAIN_ELEMENT).getChildNodes()) {
-
- for (Node currentSerNode : domainsNode.getChildNodes()) {
- String prop = Constants.SUB_DOMAIN_ELEMENT;
- if(serNode.getName().equals(currentSerNode.getName()) &&
- serNode.getProperty(prop).equals(currentSerNode.getProperty(prop))){
- // if domain and sub domain, are matching, we should remove the node.
- domainsNode.removeChildNode(currentSerNode.getName());
- if(domainsNode.getChildNodes().size() == 0){
- // if no cluster definitions remain, we shouldn't keep the node
- currentNodeToBeRemoved = aNode;
- }
- break;
- }
- }
-
- }
-
- }
- }
-
- if(currentNodeToBeRemoved != null){
- // remove the node with empty clusters
- currentNode.removeChildNode(currentNodeToBeRemoved);
- }
-
- if (topologyFile.exists()) {
- backup.delete();
- topologyFile.renameTo(backup);
- }
-
- // overwrite the topology file
- FileUtils.writeStringToFile(topologyFile, currentNode.toString());
-
- // publish to the topic - to sync immediately
- data.getConfigPub().publish(CloudControllerConstants.TOPIC_NAME, currentNode.toString());
-
- } catch (IOException e) {
- log.error(e.getMessage(), e);
- throw new CloudControllerException(e.getMessage(), e);
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/35006acc/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/deployers/CartridgeDeployer.java
----------------------------------------------------------------------
diff --git a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/deployers/CartridgeDeployer.java b/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/deployers/CartridgeDeployer.java
deleted file mode 100644
index 9881e5f..0000000
--- a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/deployers/CartridgeDeployer.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
-*
-* WSO2 Inc. 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.wso2.carbon.stratos.cloud.controller.deployers;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.deployment.AbstractDeployer;
-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.wso2.carbon.stratos.cloud.controller.axiom.AxiomXpathParser;
-import org.wso2.carbon.stratos.cloud.controller.concurrent.ThreadExecutor;
-import org.wso2.carbon.stratos.cloud.controller.exception.CloudControllerException;
-import org.wso2.carbon.stratos.cloud.controller.interfaces.Iaas;
-import org.wso2.carbon.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
-import org.wso2.carbon.stratos.cloud.controller.util.Cartridge;
-import org.wso2.carbon.stratos.cloud.controller.util.IaasProvider;
-import org.wso2.carbon.utils.CarbonUtils;
-
-/**
- * All the {@link Cartridge}s will get deployed / undeployed / updated via this class.
- */
-public class CartridgeDeployer extends AbstractDeployer{
-
- private static final Log log = LogFactory.getLog(CartridgeDeployer.class);
-
- private FasterLookUpDataHolder serviceContextLookUpStructure;
- private Map<String, List<Cartridge>> fileToCartridgeListMap;
- private File cartridgesSchema, cartridgeSchema;
-
- public void init(ConfigurationContext arg0) {
- fileToCartridgeListMap = new ConcurrentHashMap<String, List<Cartridge>>();
- String etcDir = CarbonUtils.getCarbonConfigDirPath() + File.separator + "etc" + File.separator;
- cartridgesSchema = new File(etcDir+"cartridges.xsd");
- cartridgeSchema = new File(etcDir+"cartridge.xsd");
- }
-
- public void setDirectory(String arg0) {
- // component xml handles this
- }
-
- public void setExtension(String arg0) {
- // component xml handles this
- }
-
- public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
-
- log.debug("Started to deploy the deployment artifact: "+deploymentFileData.getFile());
-
- AxiomXpathParser parser = new AxiomXpathParser(deploymentFileData.getFile());
- parser.parse();
-
- try {
- // validate
- validateCartridge(parser);
-
- // deploy - grab cartridges
- List<Cartridge> cartridges = parser.getCartridgesList();
-
- ThreadExecutor exec = new ThreadExecutor(3);
- // create Jclouds objects, for each IaaS
- for (Cartridge cartridge : cartridges) {
- // jclouds object building is time consuming, hence I use Java executor framework
- exec.execute(new JcloudsObjectBuilder(cartridge, deploymentFileData));
- }
- exec.shutdown();
- // update map
- fileToCartridgeListMap.put(deploymentFileData.getAbsolutePath(),
- new ArrayList<Cartridge>(cartridges));
-
- log.info("Successfully deployed the Cartridge definition specified at "+deploymentFileData.getAbsolutePath());
-
- } catch (Exception e) {
- String msg = "Invalid deployment artefact at "+deploymentFileData.getAbsolutePath();
- // back up the file
- File f = deploymentFileData.getFile();
- f.renameTo(new File(deploymentFileData.getAbsolutePath()+".back"));
- log.error(msg, e);
- throw new DeploymentException(msg, e);
- }
-
-
- }
-
- private void validateCartridge(AxiomXpathParser parser) throws Exception {
- boolean validated = false;
- Exception firstException = null;
-
- try{
- // first try to validate using cartridges schema
- parser.validate(cartridgesSchema);
- validated = true;
-
- }catch (Exception e) {
- firstException = e;
- }
-
- if(!validated){
- try{
- // Now try to validate using cartridge schema
- parser.validate(cartridgeSchema);
- validated = true;
- log.debug("Cartridge validation was successful.");
-
- }catch (Exception e) {
- String msg = "Cartridge XML validation failed. Invalid Cartridge XML: "+parser.getXmlSource().getAbsolutePath();
- log.error(msg, firstException);
- throw firstException;
- }
- }
-
-
- }
-
- public void undeploy(String file) throws DeploymentException {
-
- serviceContextLookUpStructure = FasterLookUpDataHolder.getInstance();
-
- // grab the entry from Map
- if(fileToCartridgeListMap.containsKey(file)){
- // remove 'em
- serviceContextLookUpStructure.removeCartridges(fileToCartridgeListMap.get(file));
-
- log.info("Successfully undeployed the Cartridge definition specified at "+file);
- }
-
- }
-
- private void handleException(String msg, Exception e) {
- log.fatal(msg, e);
- throw new CloudControllerException(msg, e);
- }
-
- /**
- * JcloudsObjectBuilder job
- *
- */
- class JcloudsObjectBuilder implements Runnable{
-
- private Cartridge cartridge;
- private DeploymentFileData file;
-
- public JcloudsObjectBuilder (Cartridge cartridge, DeploymentFileData file){
- this.cartridge = cartridge;
- this.file = file;
- }
-
- @Override
- public void run() {
-
- for (IaasProvider iaasProvider : cartridge.getIaases()) {
- try {
- Iaas iaas = (Iaas) Class.forName(iaasProvider.getClassName()).newInstance();
- iaas.buildComputeServiceAndTemplate(iaasProvider);
- iaasProvider.setIaas(iaas);
-
- } catch (Exception e) {
- rename();
- handleException(e.getMessage(), e);
- }
- }
-
- }
-
- private void rename(){
- // back up the file
- File f = file.getFile();
- f.renameTo(new File(file.getAbsolutePath()+".back"));
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/35006acc/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/deployers/CloudControllerDeployer.java
----------------------------------------------------------------------
diff --git a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/deployers/CloudControllerDeployer.java b/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/deployers/CloudControllerDeployer.java
deleted file mode 100644
index 1f9dafc..0000000
--- a/components/stratos/org.wso2.carbon.stratos.cloud.controller/2.1.3/src/main/java/org/wso2/carbon/stratos/cloud/controller/deployers/CloudControllerDeployer.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
-*
-* WSO2 Inc. 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.wso2.carbon.stratos.cloud.controller.deployers;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.deployment.AbstractDeployer;
-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.wso2.carbon.stratos.cloud.controller.axiom.AxiomXpathParser;
-import org.wso2.carbon.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
-import org.wso2.carbon.stratos.cloud.controller.util.IaasProvider;
-
-/**
- * All the {@link IaasProvider}s will get deployed / undeployed / updated via this class.
- */
-public class CloudControllerDeployer extends AbstractDeployer{
-
- private static final Log log = LogFactory.getLog(CloudControllerDeployer.class);
- private static final String FILE_NAME = "cloud-controller";
- private Map<String, List<IaasProvider>> fileToIaasProviderListMap;
-
- @Override
- public void init(ConfigurationContext arg0) {
- fileToIaasProviderListMap = new ConcurrentHashMap<String, List<IaasProvider>>();
- }
-
- @Override
- public void setDirectory(String arg0) {
- // component xml handles this
-
- }
-
- @Override
- public void setExtension(String arg0) {
- // component xml handles this
- }
-
- public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
-
- log.debug("Started to deploy the deployment artifact: "+deploymentFileData.getFile());
-
- // since cloud-controller.xml resides in repository/conf
- if (deploymentFileData.getName().contains(FILE_NAME)) {
-
- AxiomXpathParser parser = new AxiomXpathParser(deploymentFileData.getFile());
-
- // parse the file
- parser.parse();
-
- // deploy iaases
- parser.setIaasProvidersList();
- parser.setDataPublisherRelatedData();
- parser.setTopologySyncRelatedData();
-
- // update map
- fileToIaasProviderListMap.put(deploymentFileData.getAbsolutePath(),
- new ArrayList<IaasProvider>(
- FasterLookUpDataHolder.getInstance()
- .getIaasProviders()));
-
- log.info("Successfully deployed the cloud-controller XML file specified at " +
- deploymentFileData.getAbsolutePath());
- }
-
- }
-
-
- public void undeploy(String file) throws DeploymentException {
-
- if (file.contains(FILE_NAME)) {
- // reset
- FasterLookUpDataHolder.getInstance().setSerializationDir("");
-
- // grab the entry from Map
- if(fileToIaasProviderListMap.containsKey(file)){
- // remove 'em
- FasterLookUpDataHolder.getInstance().getIaasProviders().removeAll(fileToIaasProviderListMap.get(file));
-
- log.info("Successfully undeployed the cloud-controller XML file specified at "+file);
- }
- // only one cloud-controller file, hence delete 'em all
-// FasterLookUpDataHolder.getInstance().setIaasProviders(new ArrayList<IaasProvider>());
-
- }
-
- }
-
-}