You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2013/11/08 12:29:24 UTC
[2/5] introducing partitions into the cloud contrller
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e3c9535c/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParser.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParser.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParser.java
index bd387d1..31abf60 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParser.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/axiom/AxiomXpathParser.java
@@ -18,6 +18,7 @@
*/
package org.apache.stratos.cloud.controller.axiom;
+import com.google.gson.Gson;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNode;
@@ -30,7 +31,9 @@ import org.apache.commons.logging.LogFactory;
import org.apache.stratos.cloud.controller.exception.CloudControllerException;
import org.apache.stratos.cloud.controller.exception.MalformedConfigurationFileException;
import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
+import org.apache.stratos.cloud.controller.topology.TopologyManager;
import org.apache.stratos.cloud.controller.util.*;
+import org.apache.stratos.messaging.domain.topology.Partition;
import org.jaxen.JaxenException;
import org.w3c.dom.Element;
import org.wso2.securevault.SecretResolver;
@@ -46,204 +49,201 @@ import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* 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;
+ private static final Log log = LogFactory.getLog(AxiomXpathParser.class);
+ private OMElement documentElement;
+ private final File xmlSource;
- public AxiomXpathParser(final File xmlFile) {
- xmlSource = xmlFile;
- }
+ public AxiomXpathParser(final File xmlFile) {
+ xmlSource = xmlFile;
+ }
- /**
+ /**
* @param cartridgeElementString Cartridges section as a {@link String}
- * @param aCartridge {@link org.apache.stratos.cloud.controller.util.Cartridge} instance.
- * @param appTypesNodes nodes of App types.
+ * @param aCartridge {@link org.apache.stratos.cloud.controller.util.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);
- }
-
- }
- }
+ 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() {
+ /**
+ * @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>();
- FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance();
+ String xpath = CloudControllerConstants.CARTRIDGES_ELEMENT_XPATH;
- List<IaasProvider> iaasProviders = dataHolder.getIaasProviders();
+ // cartridges can be found from this XPATH
+ List<?> cartridgeNodes = getMatchingNodes(xpath, documentElement);
- if (iaasProviders == null) {
- dataHolder.setIaasProviders((iaasProviders = new ArrayList<IaasProvider>()));
- }
+ if (cartridgeNodes == null || cartridgeNodes.isEmpty()) {
+ // or from this XPATH
+ xpath = CloudControllerConstants.CARTRIDGE_ELEMENT_XPATH;
+ cartridgeNodes = getMatchingNodes(xpath, documentElement);
+ }
- List<Cartridge> cartridges = new ArrayList<Cartridge>();
+ if (cartridgeNodes == null || cartridgeNodes.isEmpty()) {
+ log.warn("No cartridge found in this configuration file : " + xmlSource.getPath());
+ return cartridges;
+ }
- String xpath = CloudControllerConstants.CARTRIDGES_ELEMENT_XPATH;
-
- // cartridges can be found from this XPATH
- List<?> cartridgeNodes = getMatchingNodes(xpath, documentElement);
+ for (Object obj : cartridgeNodes) {
- if (cartridgeNodes == null || cartridgeNodes.isEmpty()) {
- // or from this XPATH
- xpath = CloudControllerConstants.CARTRIDGE_ELEMENT_XPATH;
- cartridgeNodes = getMatchingNodes(xpath, documentElement);
- }
+ if (obj instanceof OMNode) {
+ OMNode cartridgeNode = (OMNode) obj;
- if (cartridgeNodes == null || cartridgeNodes.isEmpty()) {
- log.warn("No cartridge found in this configuration file : " + xmlSource.getPath());
- return cartridges;
- }
+ if (cartridgeNode.getType() == OMNode.ELEMENT_NODE) {
- for (Object obj : cartridgeNodes) {
+ OMElement cartridgeElement = (OMElement) cartridgeNode;
- if (obj instanceof OMNode) {
- OMNode cartridgeNode = (OMNode) obj;
+ // 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));
- if (cartridgeNode.getType() == OMNode.ELEMENT_NODE) {
+ String version =
+ cartridgeElement.getAttributeValue(new QName(
+ CloudControllerConstants.VERSION_ATTR));
- OMElement cartridgeElement = (OMElement) cartridgeNode;
+ boolean multiTenant = Boolean.valueOf(cartridgeElement.getAttributeValue(new QName(
+ CloudControllerConstants.MULTI_TENANT_ATTR)));
- // 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));
+ Cartridge aCartridge;
- boolean multiTenant = Boolean.valueOf(cartridgeElement.getAttributeValue(new QName(
- CloudControllerConstants.MULTI_TENANT_ATTR)));
+ if ((aCartridge = dataHolder.getCartridge(type)) == null) {
- Cartridge aCartridge;
+ aCartridge = new Cartridge(type, host, provider, version, multiTenant);
+ }
- if ((aCartridge = dataHolder.getCartridge(type)) == null) {
+ // read displayName
+ Iterator<?> itName =
+ cartridgeElement.getChildrenWithName(new QName(
+ CloudControllerConstants.DISPLAY_NAME_ELEMENT));
- 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();
- if (itName.hasNext()) {
- OMElement name = (OMElement) itName.next();
+ aCartridge.setDisplayName(name.getText());
+ }
- aCartridge.setDisplayName(name.getText());
- }
-
- // read description
- Iterator<?> it =
- cartridgeElement.getChildrenWithName(new QName(
- CloudControllerConstants.DESCRIPTION_ELEMENT));
+ // read description
+ Iterator<?> it =
+ cartridgeElement.getChildrenWithName(new QName(
+ CloudControllerConstants.DESCRIPTION_ELEMENT));
- if (it.hasNext()) {
- OMElement desc = (OMElement) it.next();
+ if (it.hasNext()) {
+ OMElement desc = (OMElement) it.next();
- aCartridge.setDescription(desc.getText());
- }
+ aCartridge.setDescription(desc.getText());
+ }
- // load properties of this cartridge
- loadProperties(cartridgeElement, aCartridge.getProperties());
+ // 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);
+ // retrieve the list of IaaS providers
+ List<?> iaasProviderNodes = getMatchingNodes(xpath + CloudControllerConstants.IAAS_PROVIDER_ELEMENT_XPATH,
+ cartridgeElement);
- getIaasProviders(iaasProviders, cartridgeElement.toString(), aCartridge, iaasProviderNodes);
+ getIaasProviders(iaasProviders, cartridgeElement.toString(), aCartridge, iaasProviderNodes);
- // load dirs
- List<?> deploymentNodes = getMatchingNodes(xpath + CloudControllerConstants.DEPLOYMENT_ELEMENT_XPATH,
- cartridgeElement);
+ // 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 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);
+ // load appTypes
+ List<?> appTypesNodes =
+ getMatchingNodes(xpath +
+ CloudControllerConstants.APP_TYPES_ELEMENT_XPATH,
+ cartridgeElement);
+ getAppTypes(cartridgeElement.toString(), aCartridge, appTypesNodes);
- cartridges.add(aCartridge);
+ cartridges.add(aCartridge);
- if (dataHolder.getCartridge(type) == null) {
- dataHolder.addCartridge(aCartridge);
- }
- }
- }
- }
+ if (dataHolder.getCartridge(type) == null) {
+ dataHolder.addCartridge(aCartridge);
+ }
+ }
+ }
+ }
- return cartridges;
+ return cartridges;
- }
+ }
- /**
+ /**
* @param iaasProviders
* @param cartridgeElementString
* @param aCartridge
@@ -252,996 +252,1507 @@ public class AxiomXpathParser {
private void getIaasProviders(List<IaasProvider> iaasProviders,
String cartridgeElementString, Cartridge aCartridge,
List<?> iaasProviderNodes) {
- for (Object nodeObj : iaasProviderNodes) {
- if (nodeObj instanceof OMNode) {
- OMNode iaasProviderNode = (OMNode) nodeObj;
+ 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;
- if (iaasProviderNode.getType() == OMNode.ELEMENT_NODE) {
+ }
- OMElement iaasElt = (OMElement) iaasProviderNode;
+ 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;
+ }
- // add the IaasProvider to this cartridge
- aCartridge.addIaasProvider(getIaasProvider(iaasElt, iaasProviders));
+ private OMElement getFirstChildElement(final OMElement root, final String childName) {
+ Iterator<?> it = root.getChildrenWithName(new QName(childName));
+ if (it.hasNext()) {
+ return (OMElement) it.next();
+ }
- } else {
- String msg =
- "Essential '" +
- CloudControllerConstants.IAAS_PROVIDER_ELEMENT +
- "' element cannot" + " be found in " +
- cartridgeElementString + " of " +
- xmlSource;
- handleException(msg);
- }
+ 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 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);
+ 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);
+ loadProvider(iaas, iaasElt);
+ //load region
+ loadRegion(iaas);
// loadMaxInstanceLimit(iaas, iaasElt);
- loadProperties(iaasElt, iaas.getProperties());
- loadTemplate(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;
- }
-
- /**
+ loadIdentity(iaas, iaasElt);
+ loadCredentials(iaas, iaasElt, xpath);
+ }
+
+ return iaas;
+ }
+
+ private Partition getPartition(final OMNode item, Collection<Partition> partitions) {
+ Partition partition = null;
+ String id = null;
+ String type = null;
+
+ if (item.getType() == OMNode.ELEMENT_NODE) {
+
+ OMElement iaasElt = (OMElement) item;
+ Iterator<?> it =
+ iaasElt.getChildrenWithName(new QName(CloudControllerConstants.ID_ELEMENT));
+
+ if (it.hasNext()) {
+ OMElement providerElt = (OMElement) it.next();
+ id = providerElt.getText();
+ }
+
+ if (it.hasNext()) {
+ log.warn(xmlSource + " contains more than one " + CloudControllerConstants.ID_ELEMENT +
+ " elements!" + " Elements other than the first will be neglected.");
+ }
+
+ if (id == null) {
+ String msg =
+ "Essential '" + CloudControllerConstants.ID_ELEMENT + "' element " +
+ "has not specified in " + xmlSource;
+ handleException(msg);
+ }
+
+ Iterator<?> it1 =
+ iaasElt.getChildrenWithName(new QName(CloudControllerConstants.SCOPE_ELEMENT));
+
+ if (it1.hasNext()) {
+ OMElement providerElt = (OMElement) it1.next();
+ type = providerElt.getText();
+ }
+
+ if (it1.hasNext()) {
+ log.warn(xmlSource + " contains more than one " + CloudControllerConstants.SCOPE_ELEMENT +
+ " elements!" + " Elements other than the first will be neglected.");
+ }
+
+ if (type == null) {
+ String msg =
+ "Essential '" + CloudControllerConstants.SCOPE_ELEMENT + "' element " +
+ "has not specified in " + xmlSource;
+ handleException(msg);
+ }
+
+
+ if (partitions != null) {
+ // check whether this is a reference to a predefined Region.
+ for (Partition partition1 : partitions) {
+ //load region id
+ if (partition1.getId().equals(id)) {
+ partition = partition1;
+ break;
+ }
+ }
+ }
+
+ if (partition == null) {
+ partition = new Partition();
+ partition.setId(id);
+ partition.setScope(type);
+ loadProperties(iaasElt, partition.getProperties());
+ //handle partition created event
+ } else {
+ Partition partition1 = new Partition();
+ partition1.setId(id);
+ partition1.setScope(type);
+ loadProperties(iaasElt, partition1.getProperties());
+ Gson gson = new Gson();
+ String partitionS = gson.toJson(partition);
+ String partition1S = gson.toJson(partition1);
+ if (!partitionS.endsWith(partition1S)) {
+ //handle update partition
+ partition.setId(id);
+ partition.setScope(type);
+ loadProperties(iaasElt, partition.getProperties());
+
+ }
+
+ }
+
+ }
+ return partition;
+ }
+
+ private Region getRegion(final OMNode item, List<Region> regions, IaasProvider provider) {
+
+ Region region = null;
+ String type = null;
+
+ if (item.getType() == OMNode.ELEMENT_NODE) {
+
+ OMElement regionElm = (OMElement) item;
+
+ OMElement iaasElt = (OMElement) regionElm.getParent();
+ if (!iaasElt.getAttribute(new QName(CloudControllerConstants.TYPE_ATTR))
+ .getAttributeValue().equals(provider.getType())) {
+ return region;
+ }
+
+ Iterator<?> it =
+ regionElm.getChildrenWithName(new QName(CloudControllerConstants.TYPE_ELEMENT));
+
+ if (it.hasNext()) {
+ OMElement providerElt = (OMElement) it.next();
+ type = providerElt.getText();
+ }
+
+ if (it.hasNext()) {
+ log.warn(xmlSource + " contains more than one " + CloudControllerConstants.TYPE_ELEMENT +
+ " elements!" + " Elements other than the first will be neglected.");
+ }
+
+ if (type == null) {
+ String msg =
+ "Essential '" + CloudControllerConstants.TYPE_ELEMENT + "' element " +
+ "has not specified in " + xmlSource;
+ handleException(msg);
+ }
+
+ if (regions != null) {
+ // check whether this is a reference to a predefined Region.
+ for (Region region1 : regions) {
+ //load region id
+
+ if (region1.getType().equals(type)) {
+ region = region1;
+ break;
+ }
+ }
+ }
+ if (region == null) {
+ region = new Region();
+ region.setType(type);
+ }
+
+ Iterator<?> it1 =
+ regionElm.getChildrenWithName(new QName(CloudControllerConstants.ID_ELEMENT));
+
+ if (it1.hasNext()) {
+ OMElement providerElt = (OMElement) it1.next();
+ region.setId(providerElt.getText());
+ }
+
+ if (it1.hasNext()) {
+ log.warn(xmlSource + " contains more than one " + CloudControllerConstants.TYPE_ELEMENT +
+ " elements!" + " Elements other than the first will be neglected.");
+ }
+
+ if (region.getId() == null) {
+ String msg =
+ "Essential '" + CloudControllerConstants.TYPE_ELEMENT + "' element " +
+ "has not specified in " + xmlSource;
+ handleException(msg);
+ }
+
+ if (provider.getCredential() != null) {
+ log.warn("Provider credential will be overwritten by region credential");
+ }
+ loadCredentials(region, regionElm);
+
+ if (provider.getIdentity() != null) {
+ log.warn("Provider identity will be overwritten by region credential");
+ }
+ loadIdentity(region, regionElm);
+ loadProperties(regionElm, region.getProperties());
+ //load zone
+ loadZone(region);
+
+ }
+ return region;
+ }
+
+ private Zone getZone(final OMNode item, List<Zone> zones, Region region) {
+
+ Zone zone = null;
+ String type = null;
+ String typeRegion = null;
+
+ if (item.getType() == OMNode.ELEMENT_NODE) {
+
+ OMElement zoneElm = (OMElement) item;
+
+ OMElement regionElt = (OMElement) zoneElm.getParent();
+
+ Iterator<?> it2 =
+ regionElt.getChildrenWithName(new QName(CloudControllerConstants.TYPE_ELEMENT));
+
+ if (it2.hasNext()) {
+ OMElement providerElt = (OMElement) it2.next();
+ typeRegion = providerElt.getText();
+ }
+ if(!region.getType().equals(typeRegion)) {
+ return zone;
+ }
+ Iterator<?> it =
+ zoneElm.getChildrenWithName(new QName(CloudControllerConstants.TYPE_ELEMENT));
+
+ if (it.hasNext()) {
+ OMElement providerElt = (OMElement) it.next();
+ type = providerElt.getText();
+ }
+
+ if (it.hasNext()) {
+ log.warn(xmlSource + " contains more than one " + CloudControllerConstants.TYPE_ELEMENT +
+ " elements!" + " Elements other than the first will be neglected.");
+ }
+
+ if (type == null) {
+ String msg =
+ "Essential '" + CloudControllerConstants.TYPE_ELEMENT + "' element " +
+ "has not specified in " + xmlSource;
+ handleException(msg);
+ }
+
+ if (zones != null) {
+ // check whether this is a reference to a predefined Region.
+ for (Zone zone1 : zones) {
+ //load region id
+
+ if (zone1.getType().equals(type)) {
+ zone = zone1;
+ break;
+ }
+ }
+ }
+ if (zone == null) {
+ zone = new Zone();
+ zone.setType(type);
+ }
+
+ Iterator<?> it1 =
+ zoneElm.getChildrenWithName(new QName(CloudControllerConstants.ID_ELEMENT));
+
+ if (it1.hasNext()) {
+ OMElement providerElt = (OMElement) it1.next();
+ zone.setId(providerElt.getText());
+ }
+
+ if (it1.hasNext()) {
+ log.warn(xmlSource + " contains more than one " + CloudControllerConstants.TYPE_ELEMENT +
+ " elements!" + " Elements other than the first will be neglected.");
+ }
+
+ if (region.getId() == null) {
+ String msg =
+ "Essential '" + CloudControllerConstants.TYPE_ELEMENT + "' element " +
+ "has not specified in " + xmlSource;
+ handleException(msg);
+ }
+ loadProperties(zoneElm, zone.getProperties());
+ //load Host
+ loadHost(zone);
+
+ }
+ return zone;
+ }
+
+ private Host getHost(final OMNode item, List<Host> hosts, Zone zone) {
+
+ Host host = null;
+ String type = null;
+ String typeZone = null;
+
+ if (item.getType() == OMNode.ELEMENT_NODE) {
+
+ OMElement hostElt = (OMElement) item;
+
+ OMElement zoneElt = (OMElement) hostElt.getParent();
+
+ Iterator<?> it2 =
+ zoneElt.getChildrenWithName(new QName(CloudControllerConstants.TYPE_ELEMENT));
+
+ if (it2.hasNext()) {
+ OMElement providerElt = (OMElement) it2.next();
+ typeZone = providerElt.getText();
+ }
+ if(!zone.getType().equals(typeZone)) {
+ return host;
+ }
+ Iterator<?> it =
+ hostElt.getChildrenWithName(new QName(CloudControllerConstants.TYPE_ELEMENT));
+
+ if (it.hasNext()) {
+ OMElement providerElt = (OMElement) it.next();
+ type = providerElt.getText();
+ }
+
+ if (it.hasNext()) {
+ log.warn(xmlSource + " contains more than one " + CloudControllerConstants.TYPE_ELEMENT +
+ " elements!" + " Elements other than the first will be neglected.");
+ }
+
+ if (type == null) {
+ String msg =
+ "Essential '" + CloudControllerConstants.TYPE_ELEMENT + "' element " +
+ "has not specified in " + xmlSource;
+ handleException(msg);
+ }
+
+ if (hosts != null) {
+ // check whether this is a reference to a predefined Region.
+ for (Host host1 : hosts) {
+ //load region id
+
+ if (host1.getType().equals(type)) {
+ host = host1;
+ break;
+ }
+ }
+ }
+ if (host == null) {
+ host = new Host();
+ host.setType(type);
+ }
+
+ Iterator<?> it1 =
+ hostElt.getChildrenWithName(new QName(CloudControllerConstants.ID_ELEMENT));
+
+ if (it1.hasNext()) {
+ OMElement providerElt = (OMElement) it1.next();
+ host.setId(providerElt.getText());
+ }
+
+ if (it1.hasNext()) {
+ log.warn(xmlSource + " contains more than one " + CloudControllerConstants.TYPE_ELEMENT +
+ " elements!" + " Elements other than the first will be neglected.");
+ }
+
+ if (host.getId() == null) {
+ String msg =
+ "Essential '" + CloudControllerConstants.TYPE_ELEMENT + "' element " +
+ "has not specified in " + xmlSource;
+ handleException(msg);
+ }
+ loadProperties(hostElt, host.getProperties());
+
+ }
+ return host;
+ }
+
+ /**
+ * @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 cartridgeElementString Cartridges section as a {@link String}
- * @param aCartridge {@link Cartridge} instance.
- * @param portMappingNodes nodes of port mapping elements
+ * @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);
- }
-
- }
- }
+ 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() {
+ public List<ServiceContext> getServiceContexts() {
+
+ List<ServiceContext> serviceContextList = new ArrayList<ServiceContext>();
- List<ServiceContext> serviceContextList = new ArrayList<ServiceContext>();
+ // services can be found from this XPATH
+ String xpath = CloudControllerConstants.SERVICES_ELEMENT_XPATH;
+ List<?> serviceNodes = getMatchingNodes(xpath, documentElement);
- // 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()) {
- // 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;
+ }
- 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();
- for (Object obj : serviceNodes) {
- ServiceContext serviceCtxt = new ServiceContext();
+ // set the definition file
+ serviceCtxt.setFile(xmlSource);
- // set the definition file
- serviceCtxt.setFile(xmlSource);
-
- if (obj instanceof OMNode) {
- OMNode serviceNode = (OMNode) obj;
+ if (obj instanceof OMNode) {
+ OMNode serviceNode = (OMNode) obj;
- if (serviceNode.getType() == OMNode.ELEMENT_NODE) {
+ if (serviceNode.getType() == OMNode.ELEMENT_NODE) {
- OMElement node = (OMElement) serviceNode;
+ 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;
+ 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);
- }
+ handleException(msg);
+ }
- // set domain name
- serviceCtxt.setClusterId(node.getAttribute(new QName(
+ // set domain name
+ serviceCtxt.setClusterId(node.getAttribute(new QName(
CloudControllerConstants.SERVICE_DOMAIN_ATTR))
.getAttributeValue());
- // set tenant range
- serviceCtxt.setTenantRange(node.getAttribute(new QName(
- CloudControllerConstants.SERVICE_TENANT_RANGE_ATTR))
- .getAttributeValue());
+ // set tenant range
+ serviceCtxt.setTenantRange(node.getAttribute(new QName(
+ CloudControllerConstants.SERVICE_TENANT_RANGE_ATTR))
+ .getAttributeValue());
serviceCtxt.setAutoScalerPolicyName(node.getAttribute(new QName(
- CloudControllerConstants.POLICY_NAME))
- .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;
- }
+ CloudControllerConstants.POLICY_NAME))
+ .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);
- // 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());
- }
+ }
+ 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);
- private void loadIdentity(final IaasProvider iaas, final OMElement iaasElt) {
+ // load host name
+ loadHostName(getMatchingNodes(xpath + CloudControllerConstants.HOST_ELEMENT_XPATH,
+ node), serviceCtxt);
- Iterator<?> it =
- iaasElt.getChildrenWithName(new QName(CloudControllerConstants.IDENTITY_ELEMENT));
+ // load properties
+ loadProperties(node, serviceCtxt.getProperties());
- 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));
+ FasterLookUpDataHolder.getInstance().addServiceContext(serviceCtxt);
+ // add each domain specific template to list
+ serviceContextList.add(serviceCtxt);
+ }
- // retrieve the secured password
- if (secretResolver != null && secretResolver.isInitialized() &&
- secretResolver.isTokenProtected(alias)) {
+ return serviceContextList;
- iaas.setIdentity(secretResolver.resolve(alias));
+ }
+
+ 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 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()) {
+ OMElement classNameElt = (OMElement) it.next();
+ iaas.setClassName(classNameElt.getText());
+ }
- if (it.hasNext()) {
- log.warn(xmlSource + " contains more than one " + CloudControllerConstants.IDENTITY_ELEMENT +
- " elements!" + " Elements other than the first will be neglected.");
- }
+ 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.getIdentity() == null) {
- String msg =
- "Essential '" + CloudControllerConstants.IDENTITY_ELEMENT + "' element" +
- " has not specified in " + xmlSource;
- handleException(msg);
- }
+ if (iaas.getClassName() == null) {
+ String msg =
+ "Essential '" + CloudControllerConstants.CLASS_NAME_ELEMENT + "' element " +
+ "has not specified in " + xmlSource;
+ handleException(msg);
+ }
- }
+ }
- /*private void loadMaxInstanceLimit(IaasProvider iaas, final OMElement iaasElt) {
+ 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);
+ }
- Iterator<?> it =
- iaasElt.getChildrenWithName(new QName(
- CloudControllerConstants.MAX_INSTANCE_LIMIT_ELEMENT));
+ }
- if (it.hasNext()) {
- OMElement maxInstanceLimitElt = (OMElement) it.next();
+ private void loadCredentials(Region region, final OMElement iaasElt) {
+
+ 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)) {
+
+ region.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 (region.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).");
+ region.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 (region.getCredential() == null) {
+ String msg =
+ "Essential '" + CloudControllerConstants.CREDENTIAL_ELEMENT + "' element" +
+ " has not specified in " + xmlSource;
+ handleException(msg);
+ }
- 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);
- }
+ }
- }
+ private void loadHostName(final List<OMNode> nodes, final ServiceContext serviceCtxt) {
- if (it.hasNext()) {
- log.warn(xmlSource + " contains more than one " +
- CloudControllerConstants.MAX_INSTANCE_LIMIT_ELEMENT + " elements!" +
- " Elements other than the first will be neglected.");
- }
+ if (nodes == null || nodes.isEmpty()) {
+ return;
+ }
- }*/
+ // read host element
+ if (nodes.get(0).getType() == OMNode.ELEMENT_NODE) {
- private void loadPayload(final List<OMNode> nodes, final ServiceContext serviceCtxt) {
+ OMElement node = (OMElement) nodes.get(0);
- if (nodes == null || nodes.isEmpty()) {
- return;
- }
+ if (node.getText() != null) {
+ serviceCtxt.setHostName(node.getText());
+ }
- // read payload element
- if (nodes.get(0).getType() == OMNode.ELEMENT_NODE) {
+ }
+ }
- OMElement node = (OMElement) nodes.get(0);
+ 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);
+ }
+
+ }
- if (node.getText() != null) {
- StringBuilder payload = new StringBuilder(node.getText());
- serviceCtxt.setPayload(payload);
+ private void loadIdentity(final Region region, final OMElement iaasElt) {
- }
+ Iterator<?> it =
+ iaasElt.getChildrenWithName(new QName(CloudControllerConstants.IDENTITY_ELEMENT));
- }
-
- }
-
- private void loadProperties(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 " + 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);
- }
+ if (it.hasNext()) {
+ OMElement identityElt = (OMElement) it.next();
- }
-
- /* Have to handle at the autoscaler level...
- 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.");
- }
+ // retrieve the value using secure vault
+ SecretResolver secretResolver = SecretResolverFactory.create(documentElement, false);
+ String alias =
+ identityElt.getAttributeValue(new QName(
+ CloudControllerConstants.ALIAS_ATTRIBUTE));
- 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);
- }
- }
- }
-
- }
-
- }
-
- /**
+ // retrieve the secured password
+ if (secretResolver != null && secretResolver.isInitialized() &&
+ secretResolver.isTokenProtected(alias)) {
+
+ region.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 (region.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).");
+ region.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 (region.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) {
+ StringBuilder payload = new StringBuilder(node.getText());
+ serviceCtxt.setPayload(payload);
+
+ }
+
+ }
+
+ }
+
+ private void loadProperties(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 " + 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 loadRegion(final IaasProvider iaas) {
+ List<Region> regions = iaas.getListOfRegions();
+
+ if (regions == null) {
+ iaas.setListOfRegions((regions = new ArrayList<Region>()));
+ }
+
+ List<OMNode> nodeList = getMatchingNodes(CloudControllerConstants.REGION_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) {
+ regions.add(getRegion(node, regions, iaas));
+ }
+ }
+
+ private void loadZone(final Region region) {
+ List<Zone> zones = region.getListOfZones();
+
+ if (zones == null) {
+ region.setListOfZones((zones = new ArrayList<Zone>()));
+ }
+
+ List<OMNode> nodeList = getMatchingNodes(CloudControllerConstants.ZONE_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) {
+ zones.add(getZone(node, zones, region));
+ }
+ }
+
+ private void loadHost(final Zone zone) {
+ List<Host> hosts = zone.getListOfHosts();
+
+ if (hosts == null) {
+ zone.setListOfHosts((hosts = new ArrayList<Host>()));
+ }
+
+ List<OMNode> nodeList = getMatchingNodes(CloudControllerConstants.HOST_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 : n
<TRUNCATED>