You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2013/07/10 13:12:17 UTC
[02/14] versions of components are set to 3.0.0-SNAPSHOT
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/CartridgeInstanceDataPublisherTask.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/CartridgeInstanceDataPublisherTask.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/CartridgeInstanceDataPublisherTask.java
new file mode 100644
index 0000000..96756f4
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/publisher/CartridgeInstanceDataPublisherTask.java
@@ -0,0 +1,476 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. licenses this file to you under the Apache License,
+* Version 2.0 (the "License"); you may not use this file except
+* in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.stratos.cloud.controller.publisher;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jclouds.compute.ComputeService;
+import org.jclouds.compute.domain.ComputeMetadata;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.internal.NodeMetadataImpl;
+import org.wso2.carbon.base.ServerConfiguration;
+import org.wso2.carbon.databridge.agent.thrift.Agent;
+import org.wso2.carbon.databridge.agent.thrift.DataPublisher;
+import org.wso2.carbon.databridge.agent.thrift.conf.AgentConfiguration;
+import org.wso2.carbon.databridge.commons.Event;
+import org.wso2.carbon.databridge.commons.exception.NoStreamDefinitionExistException;
+import org.wso2.carbon.ntask.core.Task;
+import org.apache.stratos.cloud.controller.exception.CloudControllerException;
+import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
+import org.apache.stratos.cloud.controller.util.CartridgeInstanceData;
+import org.apache.stratos.cloud.controller.util.IaasContext;
+import org.apache.stratos.cloud.controller.util.IaasProvider;
+import org.apache.stratos.cloud.controller.util.ServiceContext;
+import org.wso2.carbon.utils.CarbonUtils;
+
+import com.google.common.collect.MapDifference;
+import com.google.common.collect.MapDifference.ValueDifference;
+import com.google.common.collect.Maps;
+
+public class CartridgeInstanceDataPublisherTask implements Task{
+
+ private static final Log log = LogFactory.getLog(CartridgeInstanceDataPublisherTask.class);
+ private static DataPublisher dataPublisher;
+ private static String streamId;
+ private static final String cloudControllerEventStreamVersion = "1.0.0";
+ private static List<CartridgeInstanceData> dataToBePublished ;
+
+ protected enum NodeStatus {
+ PENDING, RUNNING, SUSPENDED, TERMINATED, ERROR, UNRECOGNIZED
+ };
+
+ @Override
+ public void execute() {
+
+ publish();
+ }
+
+ public static void publish(){
+ if(FasterLookUpDataHolder.getInstance().isPublisherRunning() ||
+ // this is a temporary fix to avoid task execution - limitation with ntask
+ !FasterLookUpDataHolder.getInstance().getEnableBAMDataPublisher()){
+ return;
+ }
+
+ log.debug(CloudControllerConstants.DATA_PUB_TASK_NAME+" cycle started.");
+ FasterLookUpDataHolder.getInstance().setPublisherRunning(true);
+ dataToBePublished = new ArrayList<CartridgeInstanceData>();
+
+ if(dataPublisher==null){
+ createDataPublisher();
+
+ //If we cannot create a data publisher we should give up
+ //this means data will not be published
+ if(dataPublisher == null){
+ log.error("Data Publisher cannot be created or found.");
+ release();
+ return;
+ }
+ }
+
+ if(streamId == null){
+ try{
+ streamId = dataPublisher.findStream(CloudControllerConstants.CLOUD_CONTROLLER_EVENT_STREAM, cloudControllerEventStreamVersion);
+ }catch (NoStreamDefinitionExistException e){
+ log.info("Defining the event stream because it was not found in BAM");
+ try{
+ defineStream();
+ } catch(Exception ex){
+ String msg = "Error occurred while defining the event stream for publishing Cloud Controller data. " + ex.getMessage();
+ log.error(msg, ex);
+ //We do not want to proceed without an event stream. Therefore we return.
+ release();
+ return;
+ }
+ }catch (Exception exc){
+ log.error("Error occurred while searching for stream id. " + exc.getMessage(), exc);
+ //We do not want to proceed without an event stream. Therefore we return.
+ release();
+ return;
+ }
+ }
+
+ // build the new node - state Map
+ Map<String, String> newNodeToStateMap;
+ try{
+ newNodeToStateMap = getNodeIdToStatusMap();
+ }catch (Exception e) {
+
+ release();
+ throw new CloudControllerException(e.getMessage(), e);
+
+ }
+
+ // compare it with old map and populate data to be published with ones newly added
+ // and once whose state got changed
+ populateNewlyAddedOrStateChangedNodes(newNodeToStateMap);
+
+ // issue events for the ones obtained from above
+ for (CartridgeInstanceData dataObj : dataToBePublished) {
+ StringBuffer temp = new StringBuffer("");
+
+ String privateIpAddresses="";
+ // Concatenate private IP addresses
+ for (String ip : dataObj.getMetaData().getPrivateAddresses()) {
+ temp.append(ip+",");
+ }
+
+ if(!"".equals(temp.toString())){
+ // remove comma at the end of the string
+ privateIpAddresses = temp.toString().substring(0, temp.toString().length()-1);
+ }
+
+ temp = new StringBuffer("");
+ String publicIpAddresses="";
+ // Concatenate public IP addresses
+ for (String ip : dataObj.getMetaData().getPublicAddresses()) {
+ temp.append(ip+",");
+ }
+
+ if(!"".equals(temp.toString())){
+ // remove comma at the end of the string
+ publicIpAddresses = temp.toString().substring(0, temp.toString().length()-1);
+ }
+
+ try {
+
+ Event cloudControllerEvent = new Event(streamId, System.currentTimeMillis(), new Object[]{}, null,
+ new Object[]{dataObj.getNodeId(),
+ dataObj.getType(),
+ dataObj.getDomain(),
+ dataObj.getSubDomain(),
+ dataObj.getAlias(),
+ dataObj.getTenantRange(),
+ String.valueOf(dataObj.isMultiTenant()),
+ dataObj.getIaas(),
+ dataObj.getStatus(),
+ dataObj.getMetaData().getHostname(),
+ dataObj.getMetaData().getHardware().getHypervisor(),
+ String.valueOf(dataObj.getMetaData().getHardware().getRam()),
+ dataObj.getMetaData().getImageId(),
+ String.valueOf(dataObj.getMetaData().getLoginPort()),
+ dataObj.getMetaData().getOperatingSystem().getName(),
+ dataObj.getMetaData().getOperatingSystem().getVersion(),
+ dataObj.getMetaData().getOperatingSystem().getArch(),
+ String.valueOf(dataObj.getMetaData().getOperatingSystem().is64Bit()),
+ privateIpAddresses,
+ publicIpAddresses});
+
+ dataPublisher.publish(cloudControllerEvent);
+
+ log.debug("Data published : "+cloudControllerEvent.toString());
+
+ } catch (Exception e) {
+ String msg = "Error occurred while publishing Cartridge instance event to BAM. ";
+ log.error(msg, e);
+ release();
+ throw new CloudControllerException(msg, e);
+ }
+
+ }
+
+ // replace old map with new one only if data is published
+ FasterLookUpDataHolder.getInstance().setNodeIdToStatusMap(newNodeToStateMap);
+
+ //TODO remove
+// CassandraDataRetriever.init();
+// CassandraDataRetriever.connect();
+// HiveQueryExecutor hive = new HiveQueryExecutor();
+// hive.createHiveTable();
+// System.out.println("***********");
+// for (String str : hive.getRunningNodeIds()) {
+//
+// System.out.println(str);
+// }
+// System.out.println("***********");
+ release();
+ }
+
+ private static void release(){
+ FasterLookUpDataHolder.getInstance().setPublisherRunning(false);
+ }
+
+ private static void defineStream() throws Exception {
+ streamId = dataPublisher.
+ defineStream("{" +
+ " 'name':'" + CloudControllerConstants.CLOUD_CONTROLLER_EVENT_STREAM +"'," +
+ " 'version':'" + cloudControllerEventStreamVersion +"'," +
+ " 'nickName': 'cloud.controller'," +
+ " 'description': 'Instances booted up by the Cloud Controller '," +
+ " 'metaData':[]," +
+ " 'payloadData':[" +
+ " {'name':'"+CloudControllerConstants.NODE_ID_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.CARTRIDGE_TYPE_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.DOMAIN_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.SUB_DOMAIN_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.ALIAS_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.TENANT_RANGE_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.IS_MULTI_TENANT_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.IAAS_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.STATUS_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.HOST_NAME_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.HYPERVISOR_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.RAM_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.IMAGE_ID_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.LOGIN_PORT_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.OS_NAME_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.OS_VERSION_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.OS_ARCH_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.OS_BIT_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.PRIV_IP_COL+"','type':'STRING'}," +
+ " {'name':'"+CloudControllerConstants.PUB_IP_COL+"','type':'STRING'}" +
+ " ]" +
+ "}");
+
+ }
+
+ @Override
+ public void init() {
+
+ // this is a temporary fix to avoid task execution - limitation with ntask
+ if(!FasterLookUpDataHolder.getInstance().getEnableBAMDataPublisher()){
+ log.debug("BAM data publisher is disabled. ");
+ return;
+ }
+
+ if((dataPublisher = FasterLookUpDataHolder.getInstance().getDataPublisher()) == null){
+ createDataPublisher();
+ }
+ streamId = FasterLookUpDataHolder.getInstance().getStreamId();
+
+ }
+
+ @Override
+ public void setProperties(Map<String, String> arg0) {}
+
+ private static void createDataPublisher(){
+ //creating the agent
+ AgentConfiguration agentConfiguration = new AgentConfiguration();
+
+ ServerConfiguration serverConfig = CarbonUtils.getServerConfiguration();
+ String trustStorePath = serverConfig.getFirstProperty("Security.TrustStore.Location");
+ String trustStorePassword = serverConfig.getFirstProperty("Security.TrustStore.Password");
+ String bamServerUrl = serverConfig.getFirstProperty("BamServerURL");
+ String adminUsername = FasterLookUpDataHolder.getInstance().getBamUsername();
+ String adminPassword = FasterLookUpDataHolder.getInstance().getBamPassword();
+
+ System.setProperty("javax.net.ssl.trustStore", trustStorePath);
+ System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
+
+ Agent agent = new Agent(agentConfiguration);
+
+ try {
+ dataPublisher = new DataPublisher(bamServerUrl, adminUsername, adminPassword, agent);
+ FasterLookUpDataHolder.getInstance().setDataPublisher(dataPublisher);
+
+ } catch (Exception e) {
+ String msg = "Unable to create a data publisher to " + bamServerUrl +
+ ". Usage Agent will not function properly. ";
+ log.error(msg, e);
+ throw new CloudControllerException(msg, e);
+ }
+
+ }
+
+ private static void bundleData(String key, String val, ServiceContext serviceCtxt) {
+
+ CartridgeInstanceData instanceData = new CartridgeInstanceData();
+ instanceData.setNodeId(key);
+ instanceData.setStatus(val);
+ instanceData.setDomain(serviceCtxt.getDomainName());
+ instanceData.setSubDomain(serviceCtxt.getSubDomainName());
+ instanceData.setAlias("".equals(serviceCtxt.getProperty(CloudControllerConstants.ALIAS_PROPERTY))
+ ? "NULL"
+ : serviceCtxt.getProperty(CloudControllerConstants.ALIAS_PROPERTY));
+ instanceData.setTenantRange("".equals(serviceCtxt.getProperty(CloudControllerConstants.TENANT_ID_PROPERTY))
+ ? serviceCtxt.getTenantRange()
+ : serviceCtxt.getProperty(CloudControllerConstants.TENANT_ID_PROPERTY));
+
+ if (serviceCtxt.getCartridge() != null) {
+ instanceData.setMultiTenant(serviceCtxt.getCartridge().isMultiTenant());
+
+ for (IaasProvider iaas : serviceCtxt.getCartridge().getIaases()) {
+
+ IaasContext ctxt = null;
+ if ((ctxt = serviceCtxt.getIaasContext(iaas.getType())) == null) {
+ ctxt = serviceCtxt.addIaasContext(iaas.getType());
+ }
+
+ if (ctxt.didISpawn(key)) {
+ instanceData.setIaas(iaas.getType());
+ instanceData.setMetaData(ctxt.getNode(key));
+
+ // clear to be removed data
+ ctxt.removeToBeRemovedNodeId(key);
+
+ // if the node is terminated
+ if (val.equals(NodeStatus.TERMINATED.toString())) {
+ // since this node is terminated
+ FasterLookUpDataHolder.getInstance().removeNodeId(key);
+
+ // remove node meta data
+ ctxt.removeNodeMetadata(ctxt.getNode(key));
+ }
+
+ break;
+ }
+ }
+
+ instanceData.setType(serviceCtxt.getCartridge().getType());
+ } else {
+ log.warn("Cartridge is null for Service Context : (domain: " +
+ serviceCtxt.getDomainName() +
+ ", sub domain: " +
+ serviceCtxt.getSubDomainName() +
+ ")");
+ }
+
+ dataToBePublished.add(instanceData);
+
+ }
+
+ private static Map<String, String> getNodeIdToStatusMap() throws Exception {
+
+ Map<String, String> statusMap = new HashMap<String, String>();
+
+ // iterate through all ServiceContexts
+ for (Iterator<?> it1 = FasterLookUpDataHolder.getInstance().getServiceContexts().entrySet().iterator(); it1.hasNext();) {
+ @SuppressWarnings("unchecked")
+ Map.Entry<String, Map<String, ServiceContext>> entry = (Map.Entry<String, Map<String, ServiceContext>>) it1.next();
+
+ Map<String, ServiceContext> map = (Map<String, ServiceContext>) entry.getValue();
+
+ for (Iterator<ServiceContext> it2 = map.values().iterator(); it2.hasNext();) {
+ ServiceContext subjectedSerCtxt = (ServiceContext) it2.next();
+
+ if (subjectedSerCtxt != null && subjectedSerCtxt.getCartridge() != null) {
+ List<IaasProvider> iaases = subjectedSerCtxt.getCartridge().getIaases();
+
+ for (IaasProvider iaas : iaases) {
+
+ ComputeService computeService = iaas.getComputeService();
+
+ if(computeService == null){
+ continue;
+ }
+
+ IaasContext ctxt = null;
+ if((ctxt = subjectedSerCtxt.getIaasContext(iaas.getType())) == null){
+ ctxt = subjectedSerCtxt.addIaasContext(iaas.getType());
+ }
+
+ // get list of node Ids
+ List<String> nodeIds = ctxt.getAllNodeIds();
+
+ if (nodeIds.isEmpty()) {
+
+ continue;
+ }
+
+ try {
+
+ // get all the nodes spawned by this IaasContext
+ Set<? extends ComputeMetadata> set = computeService.listNodes();
+
+ Iterator<? extends ComputeMetadata> iterator = set.iterator();
+
+ // traverse through all nodes of this ComputeService object
+ while (iterator.hasNext()) {
+ NodeMetadata nodeMetadata = (NodeMetadataImpl) iterator.next();
+
+ // if this node belongs to the requested domain
+ if (nodeIds.contains(nodeMetadata.getId())) {
+
+ statusMap.put(nodeMetadata.getId(), nodeMetadata.getStatus()
+ .toString());
+
+ ctxt.addNodeMetadata(nodeMetadata);
+ }
+
+ }
+
+ }catch (Exception e) {
+ log.error(e.getMessage(), e);
+ throw e;
+ }
+
+ }
+ }
+ }
+
+
+ }
+ return statusMap;
+
+ }
+
+ private static void populateNewlyAddedOrStateChangedNodes(Map<String, String> newMap){
+
+ MapDifference<String, String> diff = Maps.difference(newMap,
+ FasterLookUpDataHolder.getInstance().getNodeIdToStatusMap());
+
+ // adding newly added nodes
+ Map<String, String> newlyAddedNodes = diff.entriesOnlyOnLeft();
+
+ for (Iterator<?> it = newlyAddedNodes.entrySet().iterator(); it.hasNext();) {
+ @SuppressWarnings("unchecked")
+ Map.Entry<String, String> entry = (Map.Entry<String, String>) it.next();
+ String key = entry.getKey();
+ String val = entry.getValue();
+ ServiceContext ctxt = FasterLookUpDataHolder.getInstance().getServiceContext(key);
+
+ log.debug("------ Node id: "+key+" --- node status: "+val+" -------- ctxt: "+ctxt);
+
+ if (ctxt != null && key != null && val != null) {
+ // bundle the data to be published
+ bundleData(key, val, ctxt);
+ }
+
+ }
+
+ // adding nodes with state changes
+ Map<String, ValueDifference<String>> stateChangedNodes = diff.entriesDiffering();
+
+ for (Iterator<?> it = stateChangedNodes.entrySet().iterator(); it.hasNext();) {
+ @SuppressWarnings("unchecked")
+ Map.Entry<String, ValueDifference<String>> entry = (Map.Entry<String, ValueDifference<String>>) it.next();
+
+ String key = entry.getKey();
+ String newState = entry.getValue().leftValue();
+ ServiceContext ctxt = FasterLookUpDataHolder.getInstance().getServiceContext(key);
+
+ log.debug("------- Node id: "+key+" --- node status: "+newState+" -------- ctxt: "+ctxt);
+
+ if (ctxt != null && key != null && newState != null) {
+ // bundle the data to be published
+ bundleData(key, newState, ctxt);
+ }
+
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java
new file mode 100644
index 0000000..13bb688
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java
@@ -0,0 +1,101 @@
+package org.apache.stratos.cloud.controller.registry;
+
+import org.apache.stratos.cloud.controller.exception.CloudControllerException;
+import org.apache.stratos.cloud.controller.persist.Serializer;
+import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
+import org.apache.stratos.cloud.controller.util.DeclarativeServiceReferenceHolder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.registry.core.Registry;
+import org.wso2.carbon.registry.core.Resource;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+import org.wso2.carbon.registry.core.exceptions.ResourceNotFoundException;
+
+/**
+ *
+ */
+public class RegistryManager {
+ private final static Log log = LogFactory.getLog(RegistryManager.class);
+ private static Registry registryService;
+ private static RegistryManager registryManager;
+
+ public static RegistryManager getInstance() {
+
+ registryService = DeclarativeServiceReferenceHolder.getInstance().getRegistry();
+
+ if (registryManager == null) {
+ synchronized(RegistryManager.class){
+ if (registryManager == null) {
+ if(registryService == null){
+// log.warn("Registry Service is null. Hence unable to fetch data from registry.");
+ return registryManager;
+ }
+ registryManager = new RegistryManager();
+ }
+ }
+ }
+
+ return registryManager;
+ }
+
+ private RegistryManager() {
+ try {
+ if (!registryService.resourceExists(CloudControllerConstants.CLOUD_CONTROLLER_RESOURCE)) {
+ registryService.put(CloudControllerConstants.CLOUD_CONTROLLER_RESOURCE,
+ registryService.newCollection());
+ }
+ } catch (RegistryException e) {
+ String msg =
+ "Failed to create the registry resource " +
+ CloudControllerConstants.CLOUD_CONTROLLER_RESOURCE;
+ log.error(msg, e);
+ throw new CloudControllerException(msg, e);
+ }
+ }
+
+ /**
+ * Persist an object in the local registry.
+ * @param dataObj object to be persisted.
+ */
+ public void persist(FasterLookUpDataHolder dataObj) throws RegistryException {
+ try {
+
+ registryService.beginTransaction();
+
+ Resource nodeResource = registryService.newResource();
+
+ nodeResource.setContent(Serializer.serializeToByteArray(dataObj));
+
+ registryService.put(CloudControllerConstants.CLOUD_CONTROLLER_RESOURCE+ CloudControllerConstants.DATA_RESOURCE, nodeResource);
+
+ registryService.commitTransaction();
+
+ } catch (Exception e) {
+ String msg = "Failed to persist the cloud controller data in registry.";
+ registryService.rollbackTransaction();
+ log.error(msg, e);
+ throw new CloudControllerException(msg, e);
+
+ }
+ }
+
+ public Object retrieve(){
+
+ try {
+ Resource resource = registryService.get(CloudControllerConstants.CLOUD_CONTROLLER_RESOURCE+ CloudControllerConstants.DATA_RESOURCE);
+
+ return resource.getContent();
+
+ } catch (ResourceNotFoundException ignore) {
+ // this means, we've never persisted CC info in registry
+ return null;
+ }catch (RegistryException e) {
+ String msg = "Failed to retrieve cloud controller data from registry.";
+ log.error(msg, e);
+ throw new CloudControllerException(msg, e);
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java.back
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java.back b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java.back
new file mode 100644
index 0000000..3ab6681
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/registry/RegistryManager.java.back
@@ -0,0 +1,96 @@
+package org.wso2.carbon.stratos.cloud.controller.registry;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.registry.core.Registry;
+import org.wso2.carbon.registry.core.Resource;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+import org.wso2.carbon.stratos.cloud.controller.exception.CloudControllerException;
+import org.wso2.carbon.stratos.cloud.controller.persist.Serializer;
+import org.wso2.carbon.stratos.cloud.controller.util.CloudControllerConstants;
+import org.wso2.carbon.stratos.cloud.controller.util.CloudControllerServiceReferenceHolder;
+
+/**
+ *
+ */
+public class RegistryManager {
+ private final static Log log = LogFactory.getLog(RegistryManager.class);
+ private static Registry registryService = CloudControllerServiceReferenceHolder.getInstance().getRegistry();
+ private static RegistryManager registryManager;
+
+ public static RegistryManager getInstance() {
+
+ if (registryManager == null) {
+ synchronized(RegistryManager.class){
+ if (registryManager == null) {
+ if(registryService == null){
+ log.warn("Registry Service is null. Hence unable to fetch data from registry.");
+ return registryManager;
+ }
+ registryManager = new RegistryManager();
+ }
+ }
+ }
+
+ return registryManager;
+ }
+
+ private RegistryManager() {
+ try {
+ if (!registryService.resourceExists(CloudControllerConstants.CLOUD_CONTROLLER_RESOURCE)) {
+ registryService.put(CloudControllerConstants.CLOUD_CONTROLLER_RESOURCE,
+ registryService.newCollection());
+ }
+ } catch (RegistryException e) {
+ String msg =
+ "Failed to create the registry resource " +
+ CloudControllerConstants.CLOUD_CONTROLLER_RESOURCE;
+ log.error(msg, e);
+ throw new CloudControllerException(msg, e);
+ }
+ }
+
+ /**
+ * Persist a node id in the local registry.
+ * @param nodeId node id to be persisted.
+ */
+ public void persist(Object dataObj) throws RegistryException {
+ try {
+
+ registryService.beginTransaction();
+
+ Resource nodeResource = registryService.newResource();
+
+ nodeResource.setContent(Serializer.serializeToByteArray(dataObj));
+
+ registryService.put(CloudControllerConstants.CLOUD_CONTROLLER_RESOURCE+ CloudControllerConstants.DATA_RESOURCE, nodeResource);
+
+ registryService.commitTransaction();
+
+ } catch (Exception e) {
+ String msg = "Failed to persist the cloud controller data in registry.";
+ log.error(msg, e);
+ throw new CloudControllerException(msg, e);
+
+ } finally{
+ registryService.rollbackTransaction();
+
+ }
+ }
+
+ public Object retrieve(){
+
+ try {
+ Resource resource = registryService.get(CloudControllerConstants.CLOUD_CONTROLLER_RESOURCE+ CloudControllerConstants.DATA_RESOURCE);
+
+ return resource.getContent();
+
+ } catch (RegistryException e) {
+ String msg = "Failed to retrieve cloud controller data from registry.";
+ log.error(msg, e);
+ throw new CloudControllerException(msg, e);
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
new file mode 100644
index 0000000..049a068
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
@@ -0,0 +1,425 @@
+/*
+ * Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.runtime;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import org.wso2.carbon.databridge.agent.thrift.DataPublisher;
+import org.apache.stratos.cloud.controller.registry.RegistryManager;
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
+import org.apache.stratos.cloud.controller.util.Cartridge;
+import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
+import org.apache.stratos.cloud.controller.util.IaasProvider;
+import org.apache.stratos.cloud.controller.util.ServiceContext;
+
+/**
+ * This object holds all runtime data and provides faster access. This is a Singleton class.
+ */
+public class FasterLookUpDataHolder implements Serializable{
+
+ private static final long serialVersionUID = -2662307358852779897L;
+
+ private static volatile FasterLookUpDataHolder ctxt;
+
+ /* We keep following maps in order to make the look up time, small. */
+
+ /**
+ * Map of maps.
+ * Map 1:
+ * Key - domain
+ * Value - is another map
+ * Map 2:
+ * key - sub domain
+ * value - {@link ServiceContext}
+ */
+ private Map<String, Map<String, ServiceContext>> serviceCtxts;
+
+ /**
+ * To make data retrieval from registry faster.
+ */
+ private List<ServiceContext> serviceCtxtList;
+
+ public List<ServiceContext> getServiceCtxtList() {
+ return serviceCtxtList;
+ }
+
+ /**
+ * Key - node id
+ * Value - {@link ServiceContext}
+ */
+ private Map<String, ServiceContext> nodeIdToServiceCtxt;
+
+ /**
+ * List of registered {@link Cartridge}s
+ */
+ private List<Cartridge> cartridges;
+
+ /**
+ * List of IaaS Providers.
+ */
+ private List<IaasProvider> iaasProviders;
+
+ private String serializationDir;
+ private boolean enableBAMDataPublisher;
+ private boolean enableTopologySync;
+ private String bamUsername = CloudControllerConstants.DEFAULT_BAM_SERVER_USER_NAME;
+ private String bamPassword = CloudControllerConstants.DEFAULT_BAM_SERVER_PASSWORD;
+ private String dataPublisherCron = CloudControllerConstants.PUB_CRON_EXPRESSION;
+ private String cassandraConnUrl = CloudControllerConstants.DEFAULT_CASSANDRA_URL;
+ private String cassandraUser = CloudControllerConstants.DEFAULT_CASSANDRA_USER;
+ private String cassandraPassword = CloudControllerConstants.DEFAULT_CASSANDRA_PASSWORD;
+ /**
+ * Key - node id
+ * Value - Status of the instance
+ * This map is only used by BAM data publisher in CC.
+ */
+ private Map<String, String> nodeIdToStatusMap = new HashMap<String, String>();
+ private transient DataPublisher dataPublisher;
+ private String streamId;
+ private boolean isPublisherRunning;
+ private boolean isTopologySyncRunning;
+ private String topologySynchronizerCron = CloudControllerConstants.TOPOLOGY_SYNC_CRON;
+
+ private BlockingQueue<List<ServiceContext>> sharedTopologyDiffQueue = new LinkedBlockingQueue<List<ServiceContext>>();
+
+
+ private String mbServerUrl = CloudControllerConstants.MB_SERVER_URL;
+
+ public static FasterLookUpDataHolder getInstance() {
+
+ if (ctxt == null) {
+ synchronized (FasterLookUpDataHolder.class) {
+ if (ctxt == null && RegistryManager.getInstance() != null) {
+
+ Object obj = RegistryManager.getInstance().retrieve();
+ if (obj != null) {
+ if (obj instanceof FasterLookUpDataHolder) {
+ ctxt = (FasterLookUpDataHolder) obj;
+ System.out.println("*********** FasterLookUpDataHolder ********");
+ } else {
+ System.out.println("*********** Not a FasterLookUpDataHolder *******");
+ }
+
+ }
+
+ }
+ if(ctxt == null) {
+ ctxt = new FasterLookUpDataHolder();
+ }
+ }
+ }
+
+ return ctxt;
+ }
+
+ private FasterLookUpDataHolder() {
+
+ serviceCtxtList = new ArrayList<ServiceContext>();
+ serviceCtxts = new ConcurrentHashMap<String, Map<String, ServiceContext>>();
+ nodeIdToServiceCtxt = new LinkedHashMap<String, ServiceContext>();
+ cartridges = new ArrayList<Cartridge>();
+
+ }
+
+ public void addServiceContext(ServiceContext ctx) {
+
+ if (ctx == null) {
+ return;
+ }
+
+ String domain = ctx.getDomainName();
+ String subDomain = ctx.getSubDomainName();
+
+ if (domain != null && subDomain != null) {
+ addToServiceCtxts(domain, subDomain, ctx);
+ }
+
+ }
+
+ public void removeServiceContext(ServiceContext ctxt) {
+
+ if (ctxt == null) {
+ return;
+ }
+
+ String domain = ctxt.getDomainName();
+ String subDomain = ctxt.getSubDomainName();
+
+ if (domain != null && subDomain != null) {
+ if (serviceCtxts.containsKey(domain)) {
+ Map<String, ServiceContext> subDomainMap = serviceCtxts.get(domain);
+ subDomainMap.remove(subDomain);
+ }
+ }
+
+ serviceCtxtList.remove(ctxt);
+
+ }
+
+ public ServiceContext getServiceContext(String domain, String subDomain) {
+
+ if (serviceCtxts.get(domain) != null) {
+ return serviceCtxts.get(domain).get(subDomain);
+ }
+ return null;
+ }
+
+ public ServiceContext getServiceContext(String nodeId) {
+
+ return nodeIdToServiceCtxt.get(nodeId);
+ }
+
+ public List<Object> getNodeIdsOfServiceCtxt(ServiceContext ctxt){
+ return CloudControllerUtil.getKeysFromValue(nodeIdToServiceCtxt, ctxt);
+ }
+
+ public Map<String, Map<String, ServiceContext>> getServiceContexts() {
+ return serviceCtxts;
+ }
+
+ public void addNodeId(String nodeId, ServiceContext ctxt) {
+ nodeIdToServiceCtxt.put(nodeId, ctxt);
+ }
+
+ public void removeNodeId(String nodeId) {
+ nodeIdToServiceCtxt.remove(nodeId);
+ }
+
+ public void setNodeIdToServiceContextMap(Map<String, ServiceContext> map) {
+ nodeIdToServiceCtxt = map;
+ }
+
+ public Map<String, ServiceContext> getNodeIdToServiceContextMap() {
+ return nodeIdToServiceCtxt;
+ }
+
+ private void addToServiceCtxts(String domainName, String subDomainName, ServiceContext ctxt) {
+
+ Map<String, ServiceContext> map;
+
+ if (serviceCtxts.get(domainName) == null) {
+ map = new HashMap<String, ServiceContext>();
+
+ } else {
+ map = serviceCtxts.get(domainName);
+ }
+
+ map.put(subDomainName, ctxt);
+ serviceCtxts.put(domainName, map);
+
+ serviceCtxtList.add(ctxt);
+
+ }
+
+ public List<Cartridge> getCartridges() {
+ return cartridges;
+ }
+
+ public Cartridge getCartridge(String cartridgeType) {
+ for (Cartridge cartridge : cartridges) {
+ if (cartridge.getType().equals(cartridgeType)) {
+ return cartridge;
+ }
+ }
+
+ return null;
+
+ }
+
+// public void addCartridges(List<Cartridge> newCartridges) {
+// if (this.cartridges == null) {
+// this.cartridges = newCartridges;
+// } else {
+// for (Cartridge cartridge : newCartridges) {
+// int idx;
+// if ((idx = cartridges.indexOf(cartridge)) != -1) {
+// Cartridge ref = cartridges.get(idx);
+// ref = cartridge;
+// } else {
+// cartridges.add(cartridge);
+// }
+// }
+// }
+//
+// }
+
+ public void addCartridge(Cartridge newCartridges) {
+
+ cartridges.add(newCartridges);
+ }
+
+ public void removeCartridges(List<Cartridge> cartridges) {
+ if (this.cartridges != null) {
+ this.cartridges.removeAll(cartridges);
+ }
+
+ }
+
+ public List<IaasProvider> getIaasProviders() {
+ return iaasProviders;
+ }
+
+ public void setIaasProviders(List<IaasProvider> iaasProviders) {
+ this.iaasProviders = iaasProviders;
+ }
+
+ public String getSerializationDir() {
+ return serializationDir;
+ }
+
+ public void setSerializationDir(String serializationDir) {
+ this.serializationDir = serializationDir;
+ }
+
+ public String getBamUsername() {
+ return bamUsername;
+ }
+
+ public void setBamUsername(String bamUsername) {
+ this.bamUsername = bamUsername;
+ }
+
+ public String getBamPassword() {
+ return bamPassword;
+ }
+
+ public void setBamPassword(String bamPassword) {
+ this.bamPassword = bamPassword;
+ }
+
+ public String getDataPublisherCron() {
+ return dataPublisherCron;
+ }
+
+ public void setDataPublisherCron(String dataPublisherCron) {
+ this.dataPublisherCron = dataPublisherCron;
+ }
+
+ public Map<String, String> getNodeIdToStatusMap() {
+ return nodeIdToStatusMap;
+ }
+
+ public void setNodeIdToStatusMap(Map<String, String> nodeIdToStatusMap) {
+ this.nodeIdToStatusMap = nodeIdToStatusMap;
+ }
+
+ public DataPublisher getDataPublisher() {
+ return dataPublisher;
+ }
+
+ public void setDataPublisher(DataPublisher dataPublisher) {
+ this.dataPublisher = dataPublisher;
+ }
+
+ public String getStreamId() {
+ return streamId;
+ }
+
+ public void setStreamId(String streamId) {
+ this.streamId = streamId;
+ }
+
+ public boolean getEnableBAMDataPublisher() {
+ return enableBAMDataPublisher;
+ }
+
+ public void setEnableBAMDataPublisher(boolean enableBAMDataPublisher) {
+ this.enableBAMDataPublisher = enableBAMDataPublisher;
+ }
+
+ public String getCassandraConnUrl() {
+ return cassandraConnUrl;
+ }
+
+ public void setCassandraConnUrl(String cassandraHostAddr) {
+ this.cassandraConnUrl = cassandraHostAddr;
+ }
+
+ public String getCassandraUser() {
+ return cassandraUser;
+ }
+
+ public void setCassandraUser(String cassandraUser) {
+ this.cassandraUser = cassandraUser;
+ }
+
+ public String getCassandraPassword() {
+ return cassandraPassword;
+ }
+
+ public void setCassandraPassword(String cassandraPassword) {
+ this.cassandraPassword = cassandraPassword;
+ }
+
+ public boolean isPublisherRunning() {
+ return isPublisherRunning;
+ }
+
+ public void setPublisherRunning(boolean isPublisherRunning) {
+ this.isPublisherRunning = isPublisherRunning;
+ }
+
+ public BlockingQueue<List<ServiceContext>> getSharedTopologyDiffQueue() {
+ return sharedTopologyDiffQueue;
+ }
+
+ public void setSharedTopologyDiffQueue(BlockingQueue<List<ServiceContext>> sharedTopologyDiffQueue) {
+ this.sharedTopologyDiffQueue = sharedTopologyDiffQueue;
+ }
+
+ public String getTopologySynchronizerCron() {
+ return topologySynchronizerCron;
+ }
+
+ public void setTopologySynchronizerCron(String topologySynchronizerCron) {
+ this.topologySynchronizerCron = topologySynchronizerCron;
+ }
+
+ public void setMBServerUrl(String ip) {
+ this.mbServerUrl = ip;
+ }
+
+ public String getMBServerUrl() {
+ return mbServerUrl;
+ }
+
+ public boolean getEnableTopologySync() {
+ return enableTopologySync;
+ }
+
+ public void setEnableTopologySync(boolean enableTopologySync) {
+ this.enableTopologySync = enableTopologySync;
+ }
+
+ public boolean isTopologySyncRunning() {
+ return isTopologySyncRunning;
+ }
+
+ public void setTopologySyncRunning(boolean isTopologySyncRunning) {
+ this.isTopologySyncRunning = isTopologySyncRunning;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/ConfigurationPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/ConfigurationPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/ConfigurationPublisher.java
new file mode 100644
index 0000000..0339fd7
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/ConfigurationPublisher.java
@@ -0,0 +1,65 @@
+package org.apache.stratos.cloud.controller.topic;
+
+import java.util.Properties;
+
+import javax.jms.*;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class ConfigurationPublisher {
+ private TopicPublisher topicPublisher;
+ private TopicSession topicSession;
+ private TopicConnection topicConnection;
+ private TopicConnectionFactory topicConnectionFactory;
+ private static final Log log = LogFactory.getLog(ConfigurationPublisher.class);
+
+
+ public ConfigurationPublisher() {
+
+ Properties initialContextProperties = new Properties();
+ initialContextProperties.put("java.naming.factory.initial",
+ "org.wso2.andes.jndi.PropertiesFileInitialContextFactory");
+ String connectionString = "amqp://admin:admin@clientID/carbon?brokerlist='tcp://"+ FasterLookUpDataHolder.getInstance().getMBServerUrl()+"'";
+ initialContextProperties.put("connectionfactory.qpidConnectionfactory", connectionString);
+
+ try {
+ InitialContext initialContext = new InitialContext(initialContextProperties);
+ topicConnectionFactory =
+ (TopicConnectionFactory) initialContext.lookup("qpidConnectionfactory");
+
+// topicConnection.stop();
+// topicConnection.close();
+
+ } catch (NamingException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
+
+
+ public void publish(String topicName, String message) {
+ try {
+ topicConnection = topicConnectionFactory.createTopicConnection();
+ topicConnection.start();
+ topicSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ Topic topic = topicSession.createTopic(topicName);
+ topicPublisher = topicSession.createPublisher(topic);
+ TextMessage textMessage = topicSession.createTextMessage(message);
+
+ topicPublisher.publish(textMessage);
+
+ topicPublisher.close();
+ topicSession.close();
+ topicConnection.stop();
+ topicConnection.close();
+
+ } catch (JMSException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/TopologySynchronizerTask.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/TopologySynchronizerTask.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/TopologySynchronizerTask.java
new file mode 100644
index 0000000..08a40e4
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/TopologySynchronizerTask.java
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. licenses this file to you under the Apache License,
+* Version 2.0 (the "License"); you may not use this file except
+* in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.stratos.cloud.controller.topic;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.stratos.cloud.controller.exception.CloudControllerException;
+import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
+import org.apache.stratos.cloud.controller.util.DeclarativeServiceReferenceHolder;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.ntask.core.Task;
+
+public class TopologySynchronizerTask implements Task{
+
+ private static final Log log = LogFactory.getLog(TopologySynchronizerTask.class);
+ private DeclarativeServiceReferenceHolder data = DeclarativeServiceReferenceHolder.getInstance();
+ private File topologyFile;
+
+ @Override
+ public void execute() {
+ if(FasterLookUpDataHolder.getInstance().isTopologySyncRunning()||
+ // this is a temporary fix to avoid task execution - limitation with ntask
+ !FasterLookUpDataHolder.getInstance().getEnableTopologySync()){
+ return;
+ }
+
+ log.debug("TopologySynchronizerTask ... ");
+
+ // publish to the topic
+ try {
+ if (topologyFile.exists()) {
+ data.getConfigPub().publish(CloudControllerConstants.TOPIC_NAME,
+ FileUtils.readFileToString(topologyFile));
+ }
+ } catch (IOException e) {
+ String msg = "Failed when publishing to the topic "+CloudControllerConstants.TOPIC_NAME+
+ " - Reason : Failed while reading topology from "+topologyFile.getAbsolutePath();
+ log.error(msg, e);
+ throw new CloudControllerException(msg, e);
+ }
+ }
+
+ @Override
+ public void init() {
+
+ // this is a temporary fix to avoid task execution - limitation with ntask
+ if(!FasterLookUpDataHolder.getInstance().getEnableTopologySync()){
+ log.debug("Topology Sync is disabled.");
+ return;
+ }
+
+ topologyFile = new File(CloudControllerConstants.TOPOLOGY_FILE_PATH);
+
+ }
+
+ @Override
+ public void setProperties(Map<String, String> arg0) {}
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/AppType.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/AppType.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/AppType.java
new file mode 100644
index 0000000..3ca9bfc
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/AppType.java
@@ -0,0 +1,44 @@
+package org.apache.stratos.cloud.controller.util;
+
+import java.io.Serializable;
+
+/**
+ * domain mapping related data.
+ *
+ */
+public class AppType implements Serializable{
+
+ private static final long serialVersionUID = 3550489774139807168L;
+ private String name;
+ private boolean appSpecificMapping = true;
+
+ public AppType(){
+
+ }
+
+ public AppType(String name){
+ this.setName(name);
+ }
+
+ public AppType(String name, boolean appSpecificMapping){
+ this.setName(name);
+ this.setAppSpecificMapping(appSpecificMapping);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean isAppSpecificMapping() {
+ return appSpecificMapping;
+ }
+
+ public void setAppSpecificMapping(boolean appSpecificMapping) {
+ this.appSpecificMapping = appSpecificMapping;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/Cartridge.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/Cartridge.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/Cartridge.java
new file mode 100644
index 0000000..8625965
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/Cartridge.java
@@ -0,0 +1,254 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. licenses this file to you under the Apache License,
+* Version 2.0 (the "License"); you may not use this file except
+* in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.stratos.cloud.controller.util;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * Holds information regarding a Cartridge.
+ */
+public class Cartridge implements Serializable{
+
+ private static final long serialVersionUID = 6637409027085059072L;
+
+ private String type;
+
+ private String hostName;
+
+ private String provider;
+
+ private String displayName;
+
+ private String description;
+
+ private String baseDir;
+
+ private String version;
+
+ private boolean multiTenant;
+
+ private List<PortMapping> portMappings = new ArrayList<PortMapping>();
+
+ private List<AppType> appTypeMappings = new ArrayList<AppType>();
+
+ /**
+ * Property map of this Cartridge.
+ */
+ private Map<String, String> properties = new HashMap<String, String>();
+
+ /**
+ * A Cartridge can have 1..n {@link IaasProvider}s
+ */
+ private List<IaasProvider> iaases = new ArrayList<IaasProvider>();
+
+ private List<String> deploymentDirs = new ArrayList<String>();
+
+ private IaasProvider lastlyUsedIaas;
+
+ public Cartridge(){}
+
+ public Cartridge(String type, String host, String provider, String version, boolean multiTenant) {
+ this.type = type;
+ this.hostName = host;
+ this.provider = provider;
+ this.version = version;
+ this.multiTenant = multiTenant;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public Map<String, String> getProperties() {
+ return properties;
+ }
+
+ public String getProperty(String key) {
+ return properties.get(key);
+ }
+
+ public void setProperties(Map<String, String> properties) {
+ this.properties = properties;
+ }
+
+ public void addIaasProvider(IaasProvider iaas) {
+ for (IaasProvider anIaas : iaases) {
+ if(anIaas.equals(iaas)){
+ int idx = iaases.indexOf(anIaas);
+ iaases.remove(idx);
+ iaases.add(idx, iaas);
+ return;
+ }
+ }
+ this.iaases.add(iaas);
+ }
+
+ public IaasProvider getIaasProvider(String iaasType){
+ for (IaasProvider iaas : iaases) {
+ if(iaas.getType().equals(iaasType)){
+ return iaas;
+ }
+ }
+
+ return null;
+ }
+
+ public List<IaasProvider> getIaases() {
+ return iaases;
+ }
+
+ public void setIaases(List<IaasProvider> iaases) {
+ this.iaases = iaases;
+ }
+
+ public boolean equals(Object obj) {
+ if (obj instanceof Cartridge) {
+ return this.type.equals(((Cartridge)obj).getType());
+ }
+ return false;
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers
+ append(type).
+ toHashCode();
+ }
+
+ public IaasProvider getLastlyUsedIaas() {
+ return lastlyUsedIaas;
+ }
+
+ public void setLastlyUsedIaas(IaasProvider lastlyUsedIaas) {
+ this.lastlyUsedIaas = lastlyUsedIaas;
+ }
+
+// public boolean isJcloudsObjectsBuilt() {
+// return isJcloudsObjectsBuilt;
+// }
+//
+// public void setJcloudsObjectsBuilt(boolean isJcloudsObjectsBuilt) {
+// this.isJcloudsObjectsBuilt = isJcloudsObjectsBuilt;
+// }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getHostName() {
+ return hostName;
+ }
+
+ public void setHostName(String hostName) {
+ this.hostName = hostName;
+ }
+
+ public void reset(){
+// lastlyUsedIaas = null;
+ }
+
+ public List<String> getDeploymentDirs() {
+ return deploymentDirs;
+ }
+
+ public void setDeploymentDirs(List<String> deploymentDirs) {
+ this.deploymentDirs = deploymentDirs;
+ }
+
+ public void addDeploymentDir(String dir){
+ deploymentDirs.add(dir);
+ }
+
+ public void addPortMapping(PortMapping mapping){
+ portMappings.add(mapping);
+ }
+
+ public void addAppType(AppType type){
+ appTypeMappings.add(type);
+ }
+
+ public String getProvider() {
+ return provider;
+ }
+
+ public void setProvider(String provider) {
+ this.provider = provider;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public boolean isMultiTenant() {
+ return multiTenant;
+ }
+
+ public void setMultiTenant(boolean multiTenant) {
+ this.multiTenant = multiTenant;
+ }
+
+ public String getBaseDir() {
+ return baseDir;
+ }
+
+ public void setBaseDir(String baseDir) {
+ this.baseDir = baseDir;
+ }
+
+ public List<PortMapping> getPortMappings() {
+ return portMappings;
+ }
+
+ public void setPortMappings(List<PortMapping> portMappings) {
+ this.portMappings = portMappings;
+ }
+
+ public List<AppType> getAppTypeMappings() {
+ return appTypeMappings;
+ }
+
+ public void setAppTypeMappings(List<AppType> appTypeMappings) {
+ this.appTypeMappings = appTypeMappings;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CartridgeInfo.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CartridgeInfo.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CartridgeInfo.java
new file mode 100644
index 0000000..daeef80
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CartridgeInfo.java
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. licenses this file to you under the Apache License,
+* Version 2.0 (the "License"); you may not use this file except
+* in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.stratos.cloud.controller.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Holds useful information for externals, regarding a Cartridge.
+ */
+public class CartridgeInfo {
+
+ private String type;
+
+ private String hostName;
+
+ private String displayName;
+
+ private String description;
+
+ private String[] deploymentDirs;
+
+ private PortMapping[] portMappings;
+
+ private AppType[] appTypes;
+
+ private String provider;
+
+ private String version;
+
+ private boolean multiTenant;
+
+ private String baseDir;
+
+ private Property[] properties;
+
+ public CartridgeInfo(){
+
+ }
+
+ public CartridgeInfo(String type, String host, String desc, List<String> deploymentDirs, String provider) {
+ this.type = type;
+ this.hostName = host;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getHostName() {
+ return hostName;
+ }
+
+ public void setHostName(String hostName) {
+ this.hostName = hostName;
+ }
+
+ public String[] getDeploymentDirs() {
+ return deploymentDirs;
+ }
+
+ public void setDeploymentDirs(List<String> deploymentDirsList) {
+ if(deploymentDirsList == null){
+ deploymentDirsList = new ArrayList<String>();
+ }
+ this.deploymentDirs = new String[deploymentDirsList.size()];
+
+ deploymentDirsList.toArray(deploymentDirs);
+
+ }
+
+ public String getProvider() {
+ return provider;
+ }
+
+ public void setProvider(String provider) {
+ this.provider = provider;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public boolean isMultiTenant() {
+ return multiTenant;
+ }
+
+ public void setMultiTenant(boolean multiTenant) {
+ this.multiTenant = multiTenant;
+ }
+
+ public String getBaseDir() {
+ return baseDir;
+ }
+
+ public void setBaseDir(String baseDir) {
+ this.baseDir = baseDir;
+ }
+
+ public PortMapping[] getPortMappings() {
+ return portMappings;
+ }
+
+ public void setPortMappings(PortMapping[] portMappings) {
+ this.portMappings = portMappings;
+ }
+
+ public AppType[] getAppTypes() {
+ return appTypes;
+ }
+
+ public void setAppTypes(AppType[] appTypes) {
+ this.appTypes = appTypes;
+ }
+
+ public Property[] getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Property[] properties) {
+ this.properties = properties;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CartridgeInstanceData.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CartridgeInstanceData.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CartridgeInstanceData.java
new file mode 100644
index 0000000..ee6efee
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CartridgeInstanceData.java
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. licenses this file to you under the Apache License,
+* Version 2.0 (the "License"); you may not use this file except
+* in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.stratos.cloud.controller.util;
+
+import org.jclouds.compute.domain.NodeMetadata;
+
+/**
+ * This class holds the data to be published to BAM.
+ */
+public class CartridgeInstanceData {
+
+ // Cartridge type
+ private String type;
+
+ private String nodeId;
+
+ private String domain;
+
+ private String subDomain;
+
+ private String iaas;
+
+ private String status;
+
+ private String tenantRange;
+
+ private String alias;
+
+ private boolean isMultiTenant;
+
+ private NodeMetadata metaData;
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getNodeId() {
+ return nodeId;
+ }
+
+ public void setNodeId(String nodeId) {
+ this.nodeId = nodeId;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+
+ public void setDomain(String domain) {
+ this.domain = domain;
+ }
+
+ public String getSubDomain() {
+ return subDomain;
+ }
+
+ public void setSubDomain(String subDomain) {
+ this.subDomain = subDomain;
+ }
+
+ public String getIaas() {
+ return iaas;
+ }
+
+ public void setIaas(String iaas) {
+ this.iaas = iaas;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public NodeMetadata getMetaData() {
+ return metaData;
+ }
+
+ public void setMetaData(NodeMetadata metaData) {
+ this.metaData = metaData;
+ }
+
+ public String getTenantRange() {
+ return tenantRange;
+ }
+
+ public void setTenantRange(String tenantRange) {
+ this.tenantRange = tenantRange;
+ }
+
+ public boolean isMultiTenant() {
+ return isMultiTenant;
+ }
+
+ public void setMultiTenant(boolean isMultiTenant) {
+ this.isMultiTenant = isMultiTenant;
+ }
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
new file mode 100644
index 0000000..534b896
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
@@ -0,0 +1,216 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. licenses this file to you under the Apache License,
+* Version 2.0 (the "License"); you may not use this file except
+* in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.stratos.cloud.controller.util;
+
+import java.io.File;
+
+import org.wso2.carbon.utils.CarbonUtils;
+
+public final class CloudControllerConstants {
+
+ /**
+ * cloud-controller XML file's elements
+ */
+ public static final String CLOUD_CONTROLLER_ELEMENT = "cloudController";
+ public static final String SERIALIZATION_DIR_ELEMENT = "serializationDir";
+ public static final String IAAS_PROVIDERS_ELEMENT = "iaasProviders";
+ public static final String IAAS_PROVIDER_ELEMENT = "iaasProvider";
+ public static final String DEPLOYMENT_ELEMENT = "deployment";
+ public static final String PORT_MAPPING_ELEMENT = "portMapping";
+ public static final String APP_TYPES_ELEMENT = "appTypes";
+ public static final String TYPE_ATTR = "type";
+ public static final String HOST_ATTR = "host";
+ public static final String BASE_DIR_ATTR = "baseDir";
+ public static final String PROVIDER_ATTR = "provider";
+ public static final String VERSION_ATTR = "version";
+ public static final String MULTI_TENANT_ATTR = "multiTenant";
+ public static final String PORT_ATTR = "port";
+ public static final String PROXY_PORT_ATTR = "proxyPort";
+ public static final String NAME_ATTR = "name";
+ public static final String APP_SPECIFIC_MAPPING_ATTR = "appSpecificMapping";
+
+ public static final String CARTRIDGES_ELEMENT = "cartridges";
+ public static final String CARTRIDGE_ELEMENT = "cartridge";
+
+ public static final String DISPLAY_NAME_ELEMENT = "displayName";
+ public static final String DESCRIPTION_ELEMENT = "description";
+ public static final String PROPERTY_ELEMENT = "property";
+ public static final String PROPERTY_NAME_ATTR= "name";
+ public static final String PROPERTY_VALUE_ATTR = "value";
+ public static final String IMAGE_ID_ELEMENT = "imageId";
+ public static final String SCALE_DOWN_ORDER_ELEMENT = "scaleDownOrder";
+ public static final String SCALE_UP_ORDER_ELEMENT = "scaleUpOrder";
+ public static final String CLASS_NAME_ELEMENT = "className";
+ public static final String MAX_INSTANCE_LIMIT_ELEMENT = "maxInstanceLimit";
+ public static final String PROVIDER_ELEMENT = "provider";
+ public static final String IDENTITY_ELEMENT = "identity";
+ public static final String CREDENTIAL_ELEMENT = "credential";
+ public static final String DEFAULT_SERVICE_ELEMENT = "default";
+ public static final String SERVICE_ELEMENT = "service";
+ public static final String SERVICES_ELEMENT = "services";
+ public static final String DIRECTORY_ELEMENT = "dir";
+ public static final String HTTP_ELEMENT = "http";
+ public static final String HTTPS_ELEMENT = "https";
+ public static final String APP_TYPE_ELEMENT = "appType";
+ public static final String SERVICE_DOMAIN_ATTR = "domain";
+ public static final String SERVICE_SUB_DOMAIN_ATTR = "subDomain";
+ public static final String SERVICE_TENANT_RANGE_ATTR = "tenantRange";
+ public static final String PAYLOAD_ELEMENT = "payload";
+ public static final String DATA_PUBLISHER_ELEMENT = "dataPublisher";
+ public static final String TOPOLOGY_SYNC_ELEMENT = "topologySync";
+ public static final String ENABLE_ATTR = "enable";
+ public static final String BAM_SERVER_ELEMENT = "bamServer";
+ public static final String MB_SERVER_ELEMENT = "mbServerUrl";
+ public static final String CRON_ELEMENT = "cron";
+ public static final String BAM_SERVER_ADMIN_USERNAME_ELEMENT = "adminUserName";
+ public static final String BAM_SERVER_ADMIN_PASSWORD_ELEMENT = "adminPassword";
+ public static final String CASSANDRA_INFO_ELEMENT = "cassandraInfo";
+ public static final String HOST_ELEMENT = "host";
+ public static final String CONNECTION_URL_ELEMENT = "connectionUrl";
+ public static final String HOST_PORT_ELEMENT = "port";
+ public static final String USER_NAME_ELEMENT = "userName";
+ public static final String PASSWORD_ELEMENT = "password";
+ public static final String CLOUD_CONTROLLER_EVENT_STREAM = "org.wso2.stratos.cloud.controller";
+ public static final String CLOUD_CONTROLLER_COL_FAMILY = CLOUD_CONTROLLER_EVENT_STREAM.replaceAll("[/.]", "_");
+
+ /**
+ * column names
+ */
+ public static final String PAYLOAD_PREFIX = "payload_";
+ public static final String NODE_ID_COL = "nodeId";
+ public static final String CARTRIDGE_TYPE_COL = "cartridgeType";
+ public static final String DOMAIN_COL = "domain";
+ public static final String SUB_DOMAIN_COL = "subDomain";
+ public static final String ALIAS_COL = "alias";
+ public static final String TENANT_RANGE_COL = "tenantRange";
+ public static final String IS_MULTI_TENANT_COL = "isMultiTenant";
+ public static final String IAAS_COL = "iaas";
+ public static final String STATUS_COL = "status";
+ public static final String HOST_NAME_COL = "hostName";
+ public static final String HYPERVISOR_COL = "hypervisor";
+ public static final String RAM_COL = "ram";
+ public static final String IMAGE_ID_COL = "imageId";
+ public static final String LOGIN_PORT_COL = "loginPort";
+ public static final String OS_NAME_COL = "osName";
+ public static final String OS_VERSION_COL = "osVersion";
+ public static final String OS_ARCH_COL = "osArch";
+ public static final String OS_BIT_COL = "is64bitOS";
+ public static final String PRIV_IP_COL = "privateIPAddresses";
+ public static final String PUB_IP_COL = "publicIPAddresses";
+
+
+ /**
+ * Properties
+ */
+ public static final String REGION_PROPERTY = "region";
+ public static final String PUBLIC_IP_PROPERTY = "public_ip";
+ public static final String TENANT_ID_PROPERTY = "tenant_id";
+ public static final String ALIAS_PROPERTY = "alias";
+ public static final String AUTO_ASSIGN_IP_PROPERTY = "autoAssignIp";
+
+ /**
+ * XPath expressions
+ */
+ public static final String IAAS_PROVIDER_XPATH = "/"+CLOUD_CONTROLLER_ELEMENT+"/"+
+ IAAS_PROVIDERS_ELEMENT+"/"+IAAS_PROVIDER_ELEMENT;
+ public static final String PROPERTY_ELEMENT_XPATH = "/"+PROPERTY_ELEMENT;
+ public static final String IMAGE_ID_ELEMENT_XPATH = "/"+IMAGE_ID_ELEMENT;
+ public static final String SCALE_UP_ORDER_ELEMENT_XPATH = "/"+SCALE_UP_ORDER_ELEMENT;
+ public static final String SCALE_DOWN_ORDER_ELEMENT_XPATH = "/"+SCALE_DOWN_ORDER_ELEMENT;
+ public static final String PROVIDER_ELEMENT_XPATH = "/"+PROPERTY_ELEMENT;
+ public static final String IDENTITY_ELEMENT_XPATH = "/"+IDENTITY_ELEMENT;
+ public static final String CREDENTIAL_ELEMENT_XPATH = "/"+CREDENTIAL_ELEMENT;
+ public static final String SERVICES_ELEMENT_XPATH = "/"+SERVICES_ELEMENT+"/"+SERVICE_ELEMENT;
+ public static final String SERVICE_ELEMENT_XPATH = "/"+SERVICE_ELEMENT;
+ public static final String CARTRIDGE_ELEMENT_XPATH = "/"+CARTRIDGE_ELEMENT;
+ public static final String PAYLOAD_ELEMENT_XPATH = "/"+PAYLOAD_ELEMENT;
+ public static final String HOST_ELEMENT_XPATH = "/"+HOST_ELEMENT;
+ public static final String CARTRIDGES_ELEMENT_XPATH = "/"+CARTRIDGES_ELEMENT+"/"+CARTRIDGE_ELEMENT;
+ public static final String IAAS_PROVIDER_ELEMENT_XPATH = "/"+IAAS_PROVIDER_ELEMENT;
+ public static final String DEPLOYMENT_ELEMENT_XPATH = "/"+DEPLOYMENT_ELEMENT;
+ public static final String PORT_MAPPING_ELEMENT_XPATH = "/"+PORT_MAPPING_ELEMENT;
+ public static final String APP_TYPES_ELEMENT_XPATH = "/"+APP_TYPES_ELEMENT;
+
+ public static final String DATA_PUBLISHER_XPATH = "/"+CLOUD_CONTROLLER_ELEMENT+
+ "/"+DATA_PUBLISHER_ELEMENT;
+ public static final String TOPOLOGY_SYNC_XPATH = "/"+CLOUD_CONTROLLER_ELEMENT+
+ "/"+TOPOLOGY_SYNC_ELEMENT;
+ public static final String DATA_PUBLISHER_CRON_XPATH = "/"+CLOUD_CONTROLLER_ELEMENT+
+ "/"+CRON_ELEMENT;
+ public static final String BAM_SERVER_ADMIN_USERNAME_XPATH = "/"+CLOUD_CONTROLLER_ELEMENT+
+ "/"+BAM_SERVER_ADMIN_USERNAME_ELEMENT;
+ public static final String BAM_SERVER_ADMIN_PASSWORD_XPATH = "/"+CLOUD_CONTROLLER_ELEMENT+
+ "/"+BAM_SERVER_ADMIN_PASSWORD_ELEMENT;
+// public static final String CASSANDRA_HOST_ADDRESS_XPATH = "/"+CLOUD_CONTROLLER_ELEMENT+
+// "/"+CASSANDRA_HOST_ADDRESS;
+// public static final String CASSANDRA_HOST_PORT_XPATH = "/"+CLOUD_CONTROLLER_ELEMENT+
+// "/"+CASSANDRA_HOST_PORT;
+
+
+ /**
+ * Secret Manager related aliases.
+ */
+ public static final String ALIAS_ATTRIBUTE = "svns:secretAlias";
+
+ /**
+ * Payload related constants
+ */
+ public static final String PAYLOAD_FOLDER = "payload";
+ public static final String ENTRY_SEPARATOR = ",";
+
+ /**
+ * Publisher task related constants
+ */
+ public static final String DATA_PUB_TASK_TYPE = "CLOUD_CONTROLLER_DATA_PUBLISHER_TASK";
+ // default is : data publisher will run in first second of every minute
+ public static final String PUB_CRON_EXPRESSION = "1 * * * * ? *";
+ public static final String DATA_PUB_TASK_NAME = "CartridgeInstanceDataPublisherTask";
+ public static final String DEFAULT_BAM_SERVER_USER_NAME = "admin";
+ public static final String DEFAULT_BAM_SERVER_PASSWORD = "admin";
+ public static final String DEFAULT_CASSANDRA_URL = "localhost:9160";
+ public static final String DEFAULT_CASSANDRA_USER = "admin";
+ public static final String DEFAULT_CASSANDRA_PASSWORD = "admin";
+ public static final String DEFAULT_CASSANDRA_CLUSTER_NAME = "Test Cluster";
+ public static final String DEFAULT_CASSANDRA_KEY_SPACE = "EVENT_KS";
+
+ /**
+ * Directories
+ */
+ public static final String PAYLOAD_DIR = CarbonUtils.getCarbonHome() + File.separator +
+ "resources" + File.separator + PAYLOAD_FOLDER +
+ File.separator;
+ public static final String SERVICES_DIR = CarbonUtils.getCarbonRepository()
+ + File.separator + "services"+File.separator;
+
+ /**
+ * Topology sync related constants
+ */
+ public static final String TOPOLOGY_FILE_PATH = CarbonUtils.getCarbonConfigDirPath()+File.separator+"service-topology.conf";
+ public static final String TOPIC_NAME = "cloud-controller-topology";
+ public static final String TOPOLOGY_SYNC_CRON = "1 * * * * ? *";
+ public static final String TOPOLOGY_SYNC_TASK_NAME = "TopologySynchronizerTask";
+ public static final String TOPOLOGY_SYNC_TASK_TYPE = "TOPOLOGY_SYNC_TASK";
+ public static final String MB_SERVER_URL = "localhost:5672";
+
+ /**
+ * Persistence
+ */
+ public static final String CLOUD_CONTROLLER_RESOURCE = "/cloud.controller";
+ public static final String DATA_RESOURCE = "/data";
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
new file mode 100644
index 0000000..a1f5551
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
@@ -0,0 +1,102 @@
+package org.apache.stratos.cloud.controller.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.util.AXIOMUtil;
+import org.apache.stratos.cloud.controller.exception.CloudControllerException;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class CloudControllerUtil {
+ private static final Log log = LogFactory.getLog(CloudControllerUtil.class);
+
+ public static OMElement serviceCtxtToOMElement(ServiceContext ctxt) throws XMLStreamException{
+ String xml;
+
+ xml = ctxt.toXml();
+
+ return AXIOMUtil.stringToOM(xml);
+ }
+
+ public static byte[] getBytesFromFile(String path) {
+
+ try {
+ return FileUtils.readFileToByteArray(new File(path));
+ } catch (IOException e) {
+
+ handleException("Failed to read the file "+path, e);
+ }
+ return new byte[0];
+ }
+
+ public static CartridgeInfo toCartridgeInfo(Cartridge cartridge) {
+
+ CartridgeInfo carInfo = new CartridgeInfo();
+ carInfo.setType(cartridge.getType());
+ carInfo.setDisplayName(cartridge.getDisplayName());
+ carInfo.setDescription(cartridge.getDescription());
+ carInfo.setHostName(cartridge.getHostName());
+ carInfo.setDeploymentDirs(cartridge.getDeploymentDirs());
+ carInfo.setProvider(cartridge.getProvider());
+ carInfo.setVersion(cartridge.getVersion());
+ carInfo.setMultiTenant(cartridge.isMultiTenant());
+ carInfo.setBaseDir(cartridge.getBaseDir());
+ carInfo.setPortMappings(cartridge.getPortMappings()
+ .toArray(new PortMapping[cartridge.getPortMappings()
+ .size()]));
+ carInfo.setAppTypes(cartridge.getAppTypeMappings()
+ .toArray(new AppType[cartridge.getAppTypeMappings()
+ .size()]));
+
+ List<Property> propList = new ArrayList<Property>();
+
+ for (Iterator<?> iterator = cartridge.getProperties().entrySet().iterator(); iterator.hasNext();) {
+ @SuppressWarnings("unchecked")
+ Map.Entry<String, String> entry = (Entry<String, String>) iterator.next();
+
+ Property prop = new Property(entry.getKey(), entry.getValue());
+ propList.add(prop);
+ }
+ Property[] props = new Property[propList.size()];
+
+ carInfo.setProperties(propList.toArray(props));
+
+ return carInfo;
+ }
+
+ public static List<Object> getKeysFromValue(Map<?, ?> hm, Object value) {
+ List<Object> list = new ArrayList<Object>();
+ for (Object o : hm.keySet()) {
+ if (hm.get(o).equals(value)) {
+ list.add(o);
+ }
+ }
+ return list;
+ }
+
+ public static void sleep(long time){
+ try {
+ Thread.sleep(time);
+ } catch (InterruptedException ignore) {}
+
+ }
+
+ public static void handleException(String msg, Exception e){
+ log.error(msg, e);
+ throw new CloudControllerException(msg, e);
+ }
+
+ public static void handleException(String msg){
+ log.error(msg);
+ throw new CloudControllerException(msg);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/e8c32dac/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/DeclarativeServiceReferenceHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/DeclarativeServiceReferenceHolder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/DeclarativeServiceReferenceHolder.java
new file mode 100644
index 0000000..bf38da7
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/DeclarativeServiceReferenceHolder.java
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2005-2011, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. licenses this file to you under the Apache License,
+* Version 2.0 (the "License"); you may not use this file except
+* in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.stratos.cloud.controller.util;
+
+import org.wso2.carbon.ntask.core.service.TaskService;
+import org.wso2.carbon.registry.core.Registry;
+import org.wso2.carbon.registry.core.session.UserRegistry;
+import org.apache.stratos.cloud.controller.topic.ConfigurationPublisher;
+
+/**
+ * Singleton class to hold all the service references.
+ */
+public class DeclarativeServiceReferenceHolder {
+
+ private static DeclarativeServiceReferenceHolder instance;
+ private TaskService taskService;
+ private ConfigurationPublisher configPub;
+ private Registry registry;
+
+ private DeclarativeServiceReferenceHolder() {
+ }
+
+ public static DeclarativeServiceReferenceHolder getInstance() {
+ if (instance == null) {
+ instance = new DeclarativeServiceReferenceHolder();
+ }
+ return instance;
+ }
+
+ public ConfigurationPublisher getConfigPub(){
+ return configPub;
+ }
+
+ public TaskService getTaskService() {
+ return taskService;
+ }
+
+ public void setTaskService(TaskService taskService) {
+ this.taskService = taskService;
+ }
+
+ public void setConfigPub(ConfigurationPublisher configPub) {
+ this.configPub = configPub;
+ }
+
+ public void setRegistry(UserRegistry governanceSystemRegistry) {
+ registry = governanceSystemRegistry;
+ }
+
+ public Registry getRegistry() {
+ return registry;
+ }
+
+}