You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2013/11/27 19:55:12 UTC
[15/26] CC refactoring, API cleaning r1
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/1654262f/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 41742f1..0c08332 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
@@ -34,7 +34,6 @@ import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
import org.apache.stratos.cloud.controller.topology.TopologyBuilder;
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.apache.stratos.messaging.domain.topology.Scope;
import org.jaxen.JaxenException;
import org.w3c.dom.Element;
@@ -58,1720 +57,1720 @@ import java.util.*;
*/
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 cartridgeElementString Cartridges section as a {@link String}
- * @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);
- }
-
- }
- }
- }
-
- /**
- * @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);
- loadProvider(iaas, iaasElt);
- //load region
- loadRegion(iaas);
-// loadMaxInstanceLimit(iaas, iaasElt);
- loadProperties(iaasElt, iaas.getProperties());
- loadTemplate(iaas, iaasElt);
-// loadScalingOrders(iaas, iaasElt);
- loadIdentity(iaas, iaasElt);
- loadCredentials(iaas, iaasElt, xpath);
- }
-
- return iaas;
- }
-
- private Partition getPartition(final OMNode item) {
- Partition partition = null;
- Partition oldPartition = 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);
- }
- oldPartition = TopologyManager.getInstance().getTopology().getPartition(id);
- 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 (oldPartition != null) {
- //load region id
- if (oldPartition.getId().equals(id)) {
- partition = oldPartition;
- }
- }
-
- if (partition == null) {
- partition = new Partition();
- partition.setId(id);
- partition.setScope(Scope.valueOf(type));
- loadProperties(iaasElt, partition.getProperties());
- //handle partition created event
- TopologyBuilder.handlePartitionCreated(partition);
-
- } else {
- Partition partition1 = new Partition();
- partition1.setId(id);
- partition1.setScope(Scope.valueOf(type));
- loadProperties(iaasElt, partition1.getProperties());
- Gson gson = new Gson();
- String partitionS = gson.toJson(partition);
- String partition1S = gson.toJson(partition1);
- if (!partitionS.endsWith(partition1S)) {
- partition.setId(id);
- partition.setScope(Scope.valueOf(type));
- loadProperties(iaasElt, partition.getProperties());
- //handle update partition event
- TopologyBuilder.handlePartitionUpdated(partition, oldPartition);
-
- }
-
- }
-
- }
- 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
- */
- 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.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());
-
- 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 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);
- }
-
- }
-
- 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 loadIdentity(final Region region, 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)) {
-
- 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 : nodeList) {
- hosts.add(getHost(node, hosts, zone));
- }
- }
-
- /* 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.");
- }
-
- 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 cartridgeElementString 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 setPartitionsList() {
- Set<String> partitionIds = TopologyManager.getInstance().getTopology().getPartitionMap().keySet();
- List<String> ids = new ArrayList<String>();
-
- List<OMNode> nodeList = getMatchingNodes(CloudControllerConstants.PARTITION_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) {
- ids.add(getPartition(node).getId());
-
- }
- //have to remove the non existing partition from the map
- boolean isFound;
- for (String parId : partitionIds) {
- isFound = false;
- for (String id : ids) {
- if (parId.equals(id)) {
- isFound = true;
- break;
- }
- }
- if (!isFound) {
- //have to remove the partition id from the Topology
- TopologyBuilder.handlePartitionRemoved(TopologyManager.getInstance().getTopology().getPartition(parId));
- }
- }
- }
-
-
- 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) {
- TopologyConfig topologyConfig = new TopologyConfig();
- // load properties
- loadProperties(element, topologyConfig.getProperties());
-
- dataHolder.setTopologyConfig(topologyConfig);
- }
-
-
- }
-
- 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));
- }
+// private static final Log log = LogFactory.getLog(AxiomXpathParser.class);
+// private OMElement documentElement;
+// private final File xmlSource;
+//
+// 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.
+// */
+// 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);
+// loadProvider(iaas, iaasElt);
+// //load region
+// loadRegion(iaas);
+//// loadMaxInstanceLimit(iaas, iaasElt);
+// loadProperties(iaasElt, iaas.getProperties());
+// loadTemplate(iaas, iaasElt);
+//// loadScalingOrders(iaas, iaasElt);
+// loadIdentity(iaas, iaasElt);
+// loadCredentials(iaas, iaasElt, xpath);
+// }
+//
+// return iaas;
+// }
+//
+// private Partition getPartition(final OMNode item) {
+// Partition partition = null;
+// Partition oldPartition = 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);
+// }
+// oldPartition = TopologyManager.getInstance().getTopology().getPartition(id);
+// 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 (oldPartition != null) {
+// //load region id
+// if (oldPartition.getId().equals(id)) {
+// partition = oldPartition;
+// }
+// }
+//
+// if (partition == null) {
+// partition = new Partition();
+// partition.setId(id);
+// partition.setScope(Scope.valueOf(type));
+// loadProperties(iaasElt, partition.getProperties());
+// //handle partition created event
+// TopologyBuilder.handlePartitionCreated(partition);
+//
+// } else {
+// Partition partition1 = new Partition();
+// partition1.setId(id);
+// partition1.setScope(Scope.valueOf(type));
+// loadProperties(iaasElt, partition1.getProperties());
+// Gson gson = new Gson();
+// String partitionS = gson.toJson(partition);
+// String partition1S = gson.toJson(partition1);
+// if (!partitionS.endsWith(partition1S)) {
+// partition.setId(id);
+// partition.setScope(Scope.valueOf(type));
+// loadProperties(iaasElt, partition.getProperties());
+// //handle update partition event
+// TopologyBuilder.handlePartitionUpdated(partition, oldPartition);
+//
+// }
+//
+// }
+//
+// }
+// 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
<TRUNCATED>