You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2014/11/28 16:33:45 UTC
[14/15] stratos git commit: Refactoring cloud controller component to
simplify the package structure
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/partition/Partition.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/partition/Partition.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/partition/Partition.java
deleted file mode 100644
index 940bdea..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/deployment/partition/Partition.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.stratos.cloud.controller.deployment.partition;
-
-import org.apache.stratos.common.Properties;
-
-import java.io.Serializable;
-
-/**
- * The model class for Partition definition.
- */
-public class Partition implements Serializable{
-
- private static final long serialVersionUID = 3725971214092010720L;
- private int partitionMax;
- private int partitionMin;
- /**
- * provider should match with an IaasProvider type.
- */
- private String provider;
- private Properties properties = new Properties();
- private String id;
- private String description;
- private boolean isPublic;
-
-
- /**
- * Gets the value of the partitionMax property.
- *
- */
- public int getPartitionMax() {
- return partitionMax;
- }
-
- /**
- * Sets the value of the partitionMax property.
- *
- */
- public void setPartitionMax(int value) {
- this.partitionMax = value;
- }
-
- /**
- * Gets the value of the partitionMin property.
- *
- */
- public int getPartitionMin() {
- return partitionMin;
- }
-
- /**
- * Sets the value of the partitionMin property.
- *
- */
- public void setPartitionMin(int value) {
- this.partitionMin = value;
- }
-
- /**
- * Gets the value of the id property.
- *
- * @return
- * possible object is
- * {@link String }
- *
- */
- public String getId() {
- return id;
- }
-
- /**
- * Sets the value of the id property.
- *
- * @param value
- * allowed object is
- * {@link String }
- *
- */
- public void setId(String id) {
- this.id = id;
- }
-
- /**
- * Gets the value of the description property.
- *
- * @return
- * possible object is
- * {@link String }
- *
- */
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the value of the description property.
- *
- * @param value
- * allowed object is
- * {@link String }
- *
- */
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Sets the value of the isPublic property.
- *
- * @param value
- * allowed object is boolean
- *
- */
- public void setIsPublic(boolean isPublic) {
- this.isPublic = isPublic;
- }
-
- /**
- * Gets the value of the isPublic property.
- *
- */
- public boolean getIsPublic() {
- return isPublic;
- }
-
- public Properties getProperties() {
- return properties;
- }
-
- public void setProperties(Properties properties) {
- this.properties = properties;
- }
-
- public String getProvider() {
- return provider;
- }
-
- public void setProvider(String provider) {
- this.provider = provider;
- }
-
- @Override
- public String toString() {
- return "Partition [id=" + id + ", description=" + description + ", isPublic=" + isPublic
- + ", provider=" + provider + ", partitionMin=" + partitionMin + ", partitionMax="
- + partitionMax + ", properties=" + properties + "]";
- }
-
- public boolean equals(Object obj) {
- if(obj != null && obj instanceof Partition) {
- return this.id.equals(((Partition) obj).getId());
- }
- return false;
-
- }
-
- @Override
- public int hashCode() {
- return this.id.hashCode();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/AppType.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/AppType.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/AppType.java
new file mode 100644
index 0000000..7a8bb2d
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/AppType.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain;
+
+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/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContextDTO.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContextDTO.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContextDTO.java
new file mode 100644
index 0000000..4258739
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContextDTO.java
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.cloud.controller.domain;
+
+
+import org.apache.stratos.common.Properties;
+
+public class ApplicationClusterContextDTO {
+
+ // cluster id
+ private String clusterId;
+ // cartridge type
+ private String cartridgeType;
+ // payload as a String
+ private String textPayload;
+ // host name
+ private String hostName;
+ // flag to indicate LB cluster
+ private boolean isLbCluster;
+ // autoscaling policy
+ private String autoscalePolicyName;
+ // deployment policy
+ private String deploymentPolicyName;
+ // tenant rance
+ private String tenantRange;
+ // propertis
+ private Properties properties;
+
+
+ public ApplicationClusterContextDTO () {
+ }
+
+
+ public String getClusterId() {
+ return clusterId;
+ }
+
+ public void setClusterId(String clusterId) {
+ this.clusterId = clusterId;
+ }
+
+ public String getCartridgeType() {
+ return cartridgeType;
+ }
+
+ public void setCartridgeType(String cartridgeType) {
+ this.cartridgeType = cartridgeType;
+ }
+
+ public String getTextPayload() {
+ return textPayload;
+ }
+
+ public void setTextPayload(String textPayload) {
+ this.textPayload = textPayload;
+ }
+
+ public String getHostName() {
+ return hostName;
+ }
+
+ public void setHostName(String hostName) {
+ this.hostName = hostName;
+ }
+
+ public boolean isLbCluster() {
+ return isLbCluster;
+ }
+
+ public void setLbCluster(boolean lbCluster) {
+ isLbCluster = lbCluster;
+ }
+
+ public String getAutoscalePolicyName() {
+ return autoscalePolicyName;
+ }
+
+ public void setAutoscalePolicyName(String autoscalePolicyName) {
+ this.autoscalePolicyName = autoscalePolicyName;
+ }
+
+ public String getDeploymentPolicyName() {
+ return deploymentPolicyName;
+ }
+
+ public void setDeploymentPolicyName(String deploymentPolicyName) {
+ this.deploymentPolicyName = deploymentPolicyName;
+ }
+
+ public String getTenantRange() {
+ return tenantRange;
+ }
+
+ public void setTenantRange(String tenantRange) {
+ this.tenantRange = tenantRange;
+ }
+
+ public boolean equals(Object other) {
+
+ if(other == null || !(other instanceof ApplicationClusterContextDTO)) {
+ return false;
+ }
+
+ if (this == other) {
+ return true;
+ }
+
+ ApplicationClusterContextDTO that = (ApplicationClusterContextDTO)other;
+
+ return this.cartridgeType.equals(that.cartridgeType) &&
+ this.clusterId.equals(that.clusterId);
+ }
+
+ public int hashCode() {
+ return this.cartridgeType.hashCode() + this.clusterId.hashCode();
+ }
+
+ public Properties getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
new file mode 100644
index 0000000..da92b12
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
@@ -0,0 +1,404 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Holds information regarding a Cartridge.
+ */
+public class Cartridge implements Serializable{
+
+ private transient static final Log log = LogFactory.getLog(Cartridge.class);
+ 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 String defaultAutoscalingPolicy;
+
+ private String defaultDeploymentPolicy;
+
+ private LoadbalancerConfig lbConfig;
+
+ private List<PortMapping> portMappings;
+
+ private Persistence persistence;
+
+ private List<AppType> appTypeMappings;
+
+ private String serviceGroup;
+
+ private String deployerType;
+
+ /**
+ * Property map of this Cartridge.
+ */
+ private Map<String, String> properties;
+
+ /**
+ * A Cartridge can have 1..n {@link IaasProvider}s
+ */
+ private List<IaasProvider> iaases;
+
+ private List<String> deploymentDirs;
+
+ private IaasProvider lastlyUsedIaas;
+
+ private String[] exportingProperties;
+
+ /**
+ * Key - partition id
+ * Value - Corresponding IaasProvider.
+ */
+ private Map<String, IaasProvider> partitionToIaasProvider;
+
+ private Container container;
+
+ public Cartridge(){
+ init();
+ }
+
+ 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;
+ init();
+ }
+
+ private void init() {
+ partitionToIaasProvider = new ConcurrentHashMap<String, IaasProvider>();
+ portMappings = new ArrayList<PortMapping>();
+ portMappings = new ArrayList<PortMapping>();
+ appTypeMappings = new ArrayList<AppType>();
+ properties = new HashMap<String, String>();
+ iaases = new ArrayList<IaasProvider>();
+ deploymentDirs = new ArrayList<String>();
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public void addIaasProvider(String partitionId, IaasProvider iaasProvider) {
+ partitionToIaasProvider.put(partitionId, iaasProvider);
+ }
+
+ public void addIaasProviders(Map<String, IaasProvider> map) {
+ for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext();) {
+ String key = (String) iterator.next();
+ IaasProvider value = map.get(key);
+
+ partitionToIaasProvider.put(key, value);
+ if(log.isDebugEnabled()) {
+ log.debug("Partition map updated for the Cartridge: "+this.hashCode()+". "
+ + "Current Partition List: "+partitionToIaasProvider.keySet().toString());
+ }
+ }
+ }
+
+ public IaasProvider getIaasProviderOfPartition(String partitionId) {
+ if(log.isDebugEnabled()) {
+ log.debug("Retrieving partition: "+partitionId+" for the Cartridge: "+this.hashCode()+". "
+ + "Current Partition List: "+partitionToIaasProvider.keySet().toString());
+ }
+ return partitionToIaasProvider.get(partitionId);
+ }
+
+ public void addProperty(String key, String val) {
+ if (key != null && val != null) {
+ properties.put(key, val);
+ }
+ }
+
+ 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;
+ }
+
+ @Override
+ public String toString() {
+ return "Cartridge [type=" + type + ", hostName=" + hostName
+ + ", provider=" + provider + ", version=" + version
+ + ", multiTenant=" + multiTenant
+ + ", defaultAutoscalingPolicy=" + defaultAutoscalingPolicy
+ + ", defaultDeploymentPolicy=" + defaultDeploymentPolicy
+ + ", serviceGroup=" + serviceGroup + ", properties="
+ + properties + ", partitionToIaasProvider="
+ + partitionToIaasProvider + "]";
+ }
+
+ 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 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(){
+ }
+
+ 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;
+ }
+
+ public Map<String, IaasProvider> getPartitionToIaasProvider() {
+ return partitionToIaasProvider;
+ }
+
+ public void setPartitionToIaasProvider(Map<String, IaasProvider> partitionToIaasProvider) {
+ this.partitionToIaasProvider = partitionToIaasProvider;
+ }
+
+ public LoadbalancerConfig getLbConfig() {
+ return lbConfig;
+ }
+
+ public void setLbConfig(LoadbalancerConfig lbConfig) {
+ this.lbConfig = lbConfig;
+ }
+
+ public String getDefaultAutoscalingPolicy() {
+ return defaultAutoscalingPolicy;
+ }
+
+ public void setDefaultAutoscalingPolicy(String defaultAutoscalingPolicy) {
+ this.defaultAutoscalingPolicy = defaultAutoscalingPolicy;
+ }
+
+ /**
+ * @return the persistence
+ */
+ public Persistence getPersistence() {
+ return persistence;
+ }
+
+ /**
+ * @param persistence the peristanceMappings to set
+ */
+ public void setPersistence(Persistence persistence) {
+ this.persistence = persistence;
+ }
+
+ public String getDefaultDeploymentPolicy() {
+ return defaultDeploymentPolicy;
+ }
+
+ public void setDefaultDeploymentPolicy(String defaultDeploymentPolicy) {
+ this.defaultDeploymentPolicy = defaultDeploymentPolicy;
+ }
+
+ public String getServiceGroup() {
+ return serviceGroup;
+ }
+
+ public void setServiceGroup(String serviceGroup) {
+ this.serviceGroup = serviceGroup;
+ }
+
+ public Container getContainer() {
+ return container;
+ }
+
+ public void setContainer(Container container) {
+ this.container = container;
+ }
+
+ public String getDeployerType() {
+ return deployerType;
+ }
+
+ public void setDeployerType(String deployerType) {
+ this.deployerType = deployerType;
+ }
+
+
+ public String[] getExportingProperties() {
+ return exportingProperties;
+ }
+
+ public void setExportingProperties(String[] exportingProperties) {
+ this.exportingProperties = exportingProperties;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeConfig.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeConfig.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeConfig.java
new file mode 100644
index 0000000..2513350
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeConfig.java
@@ -0,0 +1,317 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.stratos.common.Properties;
+import org.apache.stratos.common.Property;
+
+/**
+ * This class is used as the pojo for supporting the service at CC,
+ * which is called by the Rest API in SM to deploy a cartridge definition
+ */
+public class CartridgeConfig implements Serializable {
+
+ private static final long serialVersionUID = 3455721779991902731L;
+
+ private String type;
+
+ private String hostName;
+
+ private String provider;
+
+ private String displayName;
+
+ private String description;
+
+ private String version;
+
+ private boolean multiTenant;
+
+ private boolean isPublic;
+
+ private String baseDir;
+
+ private String[] deploymentDirs;
+
+ private PortMapping[] portMappings;
+
+ private Persistence persistence;
+
+ private String defaultAutoscalingPolicy;
+
+ private String defaultDeploymentPolicy;
+
+ private Properties properties;
+
+ private IaasConfig[] iaasConfigs;
+
+ private LoadbalancerConfig lbConfig;
+
+ private String serviceGroup;
+
+ private Container container;
+ private String[] exportingProperties;
+
+ private String deployerType;
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getHostName() {
+ return hostName;
+ }
+
+ public void setHostName(String hostName) {
+ this.hostName = hostName;
+ }
+
+ public String getProvider() {
+ return provider;
+ }
+
+ public void setProvider(String provider) {
+ this.provider = provider;
+ }
+
+ 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 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 boolean getIsPublic() {
+ return isPublic;
+ }
+
+ public void setisPublic(boolean isPublic) {
+ this.isPublic = isPublic;
+ }
+
+ public String getBaseDir() {
+ return baseDir;
+ }
+
+ public void setBaseDir(String baseDir) {
+ this.baseDir = baseDir;
+ }
+
+ public String[] getDeploymentDirs() {
+ return deploymentDirs;
+ }
+
+ public void setDeploymentDirs(String[] deploymentDirs) {
+ this.deploymentDirs = ArrayUtils.clone(deploymentDirs);
+ }
+
+ public PortMapping[] getPortMappings() {
+ return portMappings;
+ }
+
+ public void setPortMappings(PortMapping[] portMappings) {
+ this.portMappings = ArrayUtils.clone(portMappings);
+ }
+
+ public Properties getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
+
+ public IaasConfig[] getIaasConfigs() {
+ return iaasConfigs;
+ }
+
+ public void setIaasConfigs(IaasConfig[] iaasConfigs) {
+ this.iaasConfigs = ArrayUtils.clone(iaasConfigs);
+ }
+
+ public String toString () {
+
+ return "Type: " + type + ", Provider: " + provider + ", Host: " + hostName + ", Display Name: " + displayName +
+ ", Description: " + description + ", Version: " + version + ", Multitenant " + multiTenant + ", IsPublic " + isPublic +
+ "\n Deployment: " + getDeploymentDetails() + "\n PortMapping: " + getPortMappingDetails() +
+ "\n IaaS: " + getIaasConfigDetails() + "\n Properties: " + getPropertyDetails();
+ }
+
+ private String getDeploymentDetails () {
+
+ StringBuilder deploymentDetailBuilder = new StringBuilder();
+ deploymentDetailBuilder.append("Base direcotry: " + getBaseDir());
+ if(deploymentDirs != null) {
+ if(deploymentDirs.length > 0) {
+ deploymentDetailBuilder.append(" Direcotries: ");
+ for (String directory : deploymentDirs) {
+ deploymentDetailBuilder.append(directory + " | ");
+ }
+ }
+ }
+
+ return deploymentDetailBuilder.toString();
+ }
+
+ private String getPortMappingDetails () {
+
+ StringBuilder portMappingDetailBuilder = new StringBuilder();
+ if(portMappings != null) {
+ if(portMappings.length > 0) {
+ for (PortMapping portMapping : portMappings) {
+ portMappingDetailBuilder.append(portMapping.toString() + " | ");
+ }
+ }
+ }
+ return portMappingDetailBuilder.toString();
+ }
+
+ private String getIaasConfigDetails () {
+
+ StringBuilder iaasConfigDetailBuilder = new StringBuilder();
+ if(iaasConfigs != null) {
+ if(iaasConfigs.length > 0) {
+ for (IaasConfig iaasConfig : iaasConfigs) {
+ iaasConfigDetailBuilder.append(iaasConfig.toString() + " | ");
+ }
+ }
+ }
+ return iaasConfigDetailBuilder.toString();
+ }
+
+ private String getPropertyDetails () {
+
+ StringBuilder propertyDetailBuilder = new StringBuilder();
+ if(properties != null) {
+ Property[] propertyArray = properties.getProperties();
+ if (propertyArray.length > 0) {
+ for (Property property : propertyArray) {
+ propertyDetailBuilder.append(property.toString() + " | ");
+ }
+ }
+ }
+ return propertyDetailBuilder.toString();
+ }
+
+ public LoadbalancerConfig getLbConfig() {
+ return lbConfig;
+ }
+
+ public void setLbConfig(LoadbalancerConfig lbConfig) {
+ this.lbConfig = lbConfig;
+ }
+
+ public String getDefaultAutoscalingPolicy() {
+ return defaultAutoscalingPolicy;
+ }
+
+ public void setDefaultAutoscalingPolicy(String defaultAutoscalingPolicy) {
+ this.defaultAutoscalingPolicy = defaultAutoscalingPolicy;
+ }
+
+ public String getDefaultDeploymentPolicy() {
+ return defaultDeploymentPolicy;
+ }
+
+ public void setDefaultDeploymentPolicy(String defaultDeploymentPolicy) {
+ this.defaultDeploymentPolicy = defaultDeploymentPolicy;
+ }
+
+ /**
+ * @return the persistence
+ */
+ public Persistence getPersistence() {
+ return persistence;
+ }
+
+ /**
+ * @param persistence the persistanceMappings to set
+ */
+ public void setPersistence(Persistence persistence) {
+ this.persistence = persistence;
+ }
+
+ public String getServiceGroup() {
+ return serviceGroup;
+ }
+
+ public void setServiceGroup(String serviceGroup) {
+ this.serviceGroup = serviceGroup;
+ }
+
+
+ public String[] getExportingProperties() {
+ return exportingProperties;
+ }
+
+ public void setExportingProperties(String[] exportingProperties) {
+ this.exportingProperties = exportingProperties;
+ }
+
+ public Container getContainer() {
+ return container;
+ }
+
+ public void setContainer(Container container) {
+ this.container = container;
+ }
+
+ public String getDeployerType() {
+ return deployerType;
+ }
+
+ public void setDeployerType(String deployerType) {
+ this.deployerType = deployerType;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeInfo.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeInfo.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeInfo.java
new file mode 100644
index 0000000..e35f357
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeInfo.java
@@ -0,0 +1,232 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.stratos.common.Property;
+
+/**
+ * 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 boolean isPublic;
+
+ private String baseDir;
+
+ private Property[] properties;
+
+ private String defaultAutoscalingPolicy;
+
+ private String defaultDeploymentPolicy;
+
+ private LoadbalancerConfig lbConfig;
+
+ private Persistence persistence;
+
+ private String serviceGroup;
+
+ 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 boolean getIsPublic() {
+ return isPublic;
+ }
+
+ public void setIsPublic(boolean isPublic) {
+ this.isPublic = isPublic;
+ }
+
+ 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 = ArrayUtils.clone(portMappings);
+ }
+
+ public AppType[] getAppTypes() {
+ return appTypes;
+ }
+
+ public void setAppTypes(AppType[] appTypes) {
+ this.appTypes = ArrayUtils.clone(appTypes);
+ }
+
+ public Property[] getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Property[] properties) {
+ this.properties = ArrayUtils.clone(properties);
+ }
+
+ public String getDefaultAutoscalingPolicy() {
+ return defaultAutoscalingPolicy;
+ }
+
+ public void setDefaultAutoscalingPolicy(String defaultAutoscalingPolicy) {
+ this.defaultAutoscalingPolicy = defaultAutoscalingPolicy;
+ }
+
+ public LoadbalancerConfig getLbConfig() {
+ return lbConfig;
+ }
+
+ public void setLbConfig(LoadbalancerConfig lbConfig) {
+ this.lbConfig = lbConfig;
+ }
+
+ public String getDefaultDeploymentPolicy() {
+ return defaultDeploymentPolicy;
+ }
+
+ public void setDefaultDeploymentPolicy(String defaultDeploymentPolicy) {
+ this.defaultDeploymentPolicy = defaultDeploymentPolicy;
+ }
+
+ /**
+ * @return the persistence
+ */
+ public Persistence getPersistence() {
+ return persistence;
+ }
+
+ /**
+ * @param persistence the persistanceMappings to set
+ */
+ public void setPersistence(Persistence persistence) {
+ this.persistence = persistence;
+ }
+
+ public String getServiceGroup() {
+ return serviceGroup;
+ }
+
+ public void setServiceGroup(String serviceGroup) {
+ this.serviceGroup = serviceGroup;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeInstanceData.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeInstanceData.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeInstanceData.java
new file mode 100644
index 0000000..695d4bd
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CartridgeInstanceData.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain;
+
+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 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 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/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
new file mode 100644
index 0000000..06e48cc
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.stratos.common.Properties;
+
+/**
+ * Holds runtime data of a Cluster.
+ *
+ *
+ */
+public class ClusterContext implements Serializable{
+
+ private static final long serialVersionUID = 4830667953031229223L;
+ // cluster id
+ private String clusterId;
+ // cartridge type
+ private String cartridgeType;
+ // payload as a String
+ private String payload;
+ private String hostName;
+ private boolean isLbCluster;
+ private boolean isVolumeRequired;
+ private Volume[] volumes;
+ // timeout in milliseconds - this would be the per member time that CC waits before forcefully terminate instances on an unregistration.
+ private long timeoutInMillis;
+ private Properties properties;
+
+ public ClusterContext(String clusterId, String cartridgeType, String payload, String hostName,
+ boolean isLbCluster, Properties properties) {
+ this.clusterId = clusterId;
+ this.cartridgeType = cartridgeType;
+ this.payload = payload;
+ this.setHostName(hostName);
+ this.isLbCluster = isLbCluster;
+ this.setProperties(properties);
+ }
+
+ public String getClusterId() {
+ return clusterId;
+ }
+ public void setClusterId(String clusterId) {
+ this.clusterId = clusterId;
+ }
+ public String getCartridgeType() {
+ return cartridgeType;
+ }
+ public void setCartridgeType(String cartridgeType) {
+ this.cartridgeType = cartridgeType;
+ }
+ public String getPayload() {
+ return payload;
+ }
+ public void setPayload(String payload) {
+ this.payload = payload;
+ }
+
+ public String getHostName() {
+ return hostName;
+ }
+
+ public void setHostName(String hostName) {
+ this.hostName = hostName;
+ }
+
+ public boolean isLbCluster() {
+ return isLbCluster;
+ }
+
+ public void setLbCluster(boolean isLbCluster) {
+ this.isLbCluster = isLbCluster;
+ }
+
+ public boolean isVolumeRequired() {
+ return isVolumeRequired;
+ }
+
+ public void setVolumeRequired(boolean isVolumeRequired) {
+ this.isVolumeRequired = isVolumeRequired;
+ }
+
+ public long getTimeoutInMillis() {
+ return timeoutInMillis;
+ }
+
+ public void setTimeoutInMillis(long timeoutInMillis) {
+ this.timeoutInMillis = timeoutInMillis;
+ }
+
+ public Volume[] getVolumes() {
+ return volumes;
+ }
+
+ public void setVolumes(Volume[] volumes) {
+ this.volumes = ArrayUtils.clone(volumes);
+ }
+
+ public Properties getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
+
+ /*public void addProperty(String key, int value) {
+ this.properties.put(key, value);
+ }
+
+ public void addProperty(String key, String value) {
+ this.properties.put(key, value);
+ }*/
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CompositeApplicationDefinition.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CompositeApplicationDefinition.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CompositeApplicationDefinition.java
new file mode 100644
index 0000000..62d46ce
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/CompositeApplicationDefinition.java
@@ -0,0 +1,38 @@
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+
+public class CompositeApplicationDefinition implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+ private String applicationId;
+ private String alias;
+ private ConfigGroup[] components;
+ private ConfigCartridge [] cartridges;
+ public ConfigCartridge[] getCartridges() {
+ return cartridges;
+ }
+ public void setCartridges(ConfigCartridge[] cartridges) {
+ this.cartridges = cartridges;
+ }
+ public String getApplicationId() {
+ return applicationId;
+ }
+ public void setApplicationId(String applicationId) {
+ this.applicationId = applicationId;
+ }
+ public String getAlias() {
+ return alias;
+ }
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+ public ConfigGroup[] getComponents() {
+ return components;
+ }
+ public void setComponents(ConfigGroup[] components) {
+ this.components = components;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigCartridge.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigCartridge.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigCartridge.java
new file mode 100644
index 0000000..d69b90b
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigCartridge.java
@@ -0,0 +1,17 @@
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+
+
+public class ConfigCartridge implements Serializable {
+ private String alias;
+ private static final long serialVersionUID = 1L;
+
+ public String getAlias() {
+ return alias;
+ }
+
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigDependencies.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigDependencies.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigDependencies.java
new file mode 100644
index 0000000..e3abad4
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigDependencies.java
@@ -0,0 +1,26 @@
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+
+
+public class ConfigDependencies implements Serializable {
+ private ConfigDependencyPair[] startup_order;
+ private String kill_behavior;
+ private static final long serialVersionUID = 1L;
+
+ public ConfigDependencyPair[] getStartup_order() {
+ return startup_order;
+ }
+ public void setStartup_order(ConfigDependencyPair[] startup_order) {
+ this.startup_order = startup_order;
+ }
+ public String getKill_behavior() {
+ return kill_behavior;
+ }
+ public void setKill_behavior(String kill_behavior) {
+ this.kill_behavior = kill_behavior;
+ }
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigDependencyPair.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigDependencyPair.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigDependencyPair.java
new file mode 100644
index 0000000..6a8c1d0
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigDependencyPair.java
@@ -0,0 +1,29 @@
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+
+public class ConfigDependencyPair implements Serializable {
+ private String key;
+ private String value;
+ private static final long serialVersionUID = 1L;
+
+ public ConfigDependencyPair() {}
+
+ public ConfigDependencyPair(String key, String value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ public String getKey() {
+ return key;
+ }
+ public void setKey(String key) {
+ this.key = key;
+ }
+ public String getValue() {
+ return value;
+ }
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigGroup.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigGroup.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigGroup.java
new file mode 100644
index 0000000..3d827f7
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ConfigGroup.java
@@ -0,0 +1,33 @@
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+
+
+public class ConfigGroup implements Serializable {
+ private String alias;
+ private String[] subscribables;
+ private ConfigDependencies dependencies;
+ private static final long serialVersionUID = 1L;
+
+ public String getAlias() {
+ return alias;
+ }
+ public void setAlias(String alias) {
+ this.alias = alias;
+ }
+ public String[] getSubscribables() {
+ return subscribables;
+ }
+ public void setSubscribables(String[] subscribables) {
+ this.subscribables = subscribables;
+ }
+ public ConfigDependencies getDependencies() {
+ return dependencies;
+ }
+ public void setDependencies(ConfigDependencies dependencies) {
+ this.dependencies = dependencies;
+ }
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Container.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Container.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Container.java
new file mode 100644
index 0000000..5cb8708
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Container.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+public class Container implements Serializable {
+
+ private static final long serialVersionUID = 2232204459987683768L;
+
+ private String imageName;
+
+ private String dockerFileRepo;
+
+ private Map<String, String> properties = new HashMap<String, String>();
+
+ public String getImageName() {
+ return imageName;
+ }
+
+ public void setImageName(String imageName) {
+ this.imageName = imageName;
+ }
+
+ public String getDockerFileRepo() {
+ return dockerFileRepo;
+ }
+
+ public void setDockerFileRepo(String dockerFileRepo) {
+ this.dockerFileRepo = dockerFileRepo;
+ }
+
+ public Map<String, String> getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Map<String, String> properties) {
+ this.properties = properties;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ContainerClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ContainerClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ContainerClusterContext.java
new file mode 100644
index 0000000..de7dd84
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ContainerClusterContext.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain;
+
+import org.apache.stratos.common.Properties;
+
+import java.io.Serializable;
+
+/**
+ * Holds information about a container cluster to be started.
+ *
+ */
+public class ContainerClusterContext implements Serializable {
+
+ private static final long serialVersionUID = -388327475844701869L;
+ // cluster id this Pod belongs to
+ private String clusterId;
+ // properties
+ private Properties properties;
+
+ public ContainerClusterContext() {
+ }
+
+ public ContainerClusterContext(String clusterId) {
+ this.clusterId = clusterId;
+ }
+
+ public String getClusterId() {
+ return clusterId;
+ }
+ public void setClusterId(String clusterId) {
+ this.clusterId = clusterId;
+ }
+ public Properties getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((clusterId == null) ? 0 : clusterId.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ContainerClusterContext other = (ContainerClusterContext) obj;
+ if (clusterId == null) {
+ if (other.clusterId != null)
+ return false;
+ } else if (!clusterId.equals(other.clusterId))
+ return false;
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "ContainerClusterContext [clusterId=" + clusterId + ", properties=" + properties
+ + "]";
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/DataPublisherConfig.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/DataPublisherConfig.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/DataPublisherConfig.java
new file mode 100644
index 0000000..735dbdc
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/DataPublisherConfig.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
+
+/**
+ *
+ *
+ */
+public class DataPublisherConfig implements Serializable{
+
+ private static final long serialVersionUID = -2097472019584151205L;
+ 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;
+
+ 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 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;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Dependencies.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Dependencies.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Dependencies.java
new file mode 100644
index 0000000..a04fb91
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Dependencies.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class Dependencies implements Serializable {
+
+ private static final long serialVersionUID = 4187267350546153680L;
+
+ private String [] startupOrders;
+
+ private String killBehaviour;
+
+ public String getKillBehaviour() {
+ return killBehaviour;
+ }
+
+ public void setKillBehaviour(String killBehaviour) {
+ this.killBehaviour = killBehaviour;
+ }
+
+ public String[] getStartupOrders() {
+ return startupOrders;
+ }
+
+ public void setStartupOrders(String[] startupOrders) {
+ this.startupOrders = startupOrders;
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasConfig.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasConfig.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasConfig.java
new file mode 100644
index 0000000..6725f29
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasConfig.java
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.stratos.common.Properties;
+import org.apache.stratos.common.Property;
+
+/**
+ * This class is used to support <link>CartridgeConfig</link>
+ * class for the Rest API
+ */
+public class IaasConfig implements Serializable {
+
+
+ private static final long serialVersionUID = 3329046207651171707L;
+
+ private String type;
+
+ private String className;
+
+ private String name;
+
+ private String provider, identity, credential;
+
+ private String imageId;
+
+ private int maxInstanceLimit;
+
+ private Properties properties;
+
+ private NetworkInterfaces networkInterfaces;
+
+ private byte[] payload;
+
+ public String getClassName() {
+ return className;
+ }
+
+ public void setClassName(String className) {
+ this.className = className;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getProvider() {
+ return provider;
+ }
+
+ public void setProvider(String provider) {
+ this.provider = provider;
+ }
+
+ public String getIdentity() {
+ return identity;
+ }
+
+ public void setIdentity(String identity) {
+ this.identity = identity;
+ }
+
+ public String getCredential() {
+ return credential;
+ }
+
+ public void setCredential(String credential) {
+ this.credential = credential;
+ }
+
+ public byte[] getPayload() {
+ return payload;
+ }
+
+ public void setPayload(byte[] payload) {
+ this.payload = ArrayUtils.clone(payload);
+ }
+
+ public static long getSerialversionuid() {
+ return serialVersionUID;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getImageId() {
+ return imageId;
+ }
+
+ public void setImageId(String imageId) {
+ this.imageId = imageId;
+ }
+
+ public int getMaxInstanceLimit() {
+ return maxInstanceLimit;
+ }
+
+ public void setMaxInstanceLimit(int maxInstanceLimit) {
+ this.maxInstanceLimit = maxInstanceLimit;
+ }
+
+ public Properties getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
+
+ public String toString () {
+
+ return " [ Type: " + type + ", Name: " + name + ", Class Name: " + className + ", Image Id: " + imageId +
+ ", Max Instance Limit: " + maxInstanceLimit + ", Provider: " + provider + ", Identity: " + identity +
+ ", Credentials: " + credential + ", Properties: " + getIaasProperties() + " ] ";
+ }
+
+ private String getIaasProperties () {
+
+ StringBuilder iaasPropertyBuilder = new StringBuilder();
+ if (properties != null) {
+ Property[] propertyArray = properties.getProperties();
+ if(propertyArray.length > 0) {
+ for (Property property : propertyArray) {
+ iaasPropertyBuilder.append(property.toString() + " | ");
+ }
+ }
+ }
+ return iaasPropertyBuilder.toString();
+ }
+
+ /**
+ * @return the networkInterfaces
+ */
+ public NetworkInterfaces getNetworkInterfaces() {
+ return networkInterfaces;
+ }
+
+ /**
+ * @param networkInterfaces the networkInterfaces to set
+ */
+ public void setNetworkInterfaces(NetworkInterfaces networkInterfaces) {
+ this.networkInterfaces = networkInterfaces;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasProvider.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasProvider.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasProvider.java
new file mode 100644
index 0000000..3cf25fb
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasProvider.java
@@ -0,0 +1,265 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException;
+import org.apache.stratos.cloud.controller.iaas.Iaas;
+import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
+import org.jclouds.compute.ComputeService;
+import org.jclouds.compute.domain.Template;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This is the basic data structure which holds an IaaS specific details.
+ * NOTE: If you add a new attribute, please assign it in the constructor too.
+ */
+public class IaasProvider implements Serializable{
+
+ private static final long serialVersionUID = -940288190885166118L;
+
+ /**
+ * Type of the IaasProvider.
+ */
+ private String type;
+
+
+ /**
+ * Fully qualified class name of an implementation of {@link org.apache.stratos.cloud.controller.iaas.Iaas}
+ */
+ private String className;
+
+ /**
+ * human description of this IaaS provider
+ */
+ private String name;
+
+ /**
+ * Property map of this IaaS provider.
+ */
+ private Map<String, String> properties = new HashMap<String, String>();
+
+ /**
+ * Network Interfaces Configuration
+ */
+ private NetworkInterface[] networkInterfaces;
+
+ /**
+ * Image identifier.
+ */
+ private String image;
+
+ private String provider, identity, credential;
+
+ private transient ComputeService computeService;
+
+ private transient Template template;
+
+ private byte[] payload;
+
+ /**
+ * Corresponding {@link org.apache.stratos.cloud.controller.iaas.Iaas} implementation
+ */
+ private transient Iaas iaas;
+
+ public IaasProvider(){}
+
+ public IaasProvider(IaasProvider anIaasProvider){
+ this.type = anIaasProvider.getType();
+ this.name = anIaasProvider.getName();
+ this.className = anIaasProvider.getClassName();
+ this.properties = new HashMap<String,String>(anIaasProvider.getProperties());
+ this.networkInterfaces = anIaasProvider.getNetworkInterfaces();
+ this.image = anIaasProvider.getImage();
+ this.provider = anIaasProvider.getProvider();
+ this.identity = anIaasProvider.getIdentity();
+ this.credential = anIaasProvider.getCredential();
+ this.payload = anIaasProvider.getPayload();
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String id) {
+ this.type = id;
+ }
+
+ public String getProperty(String key) {
+ return properties.get(key);
+ }
+
+ public Map<String, String> getProperties() {
+ return properties;
+ }
+
+ public void addProperty(String key, String val) {
+ if (key != null && val != null) {
+ properties.put(key, val);
+ }
+ }
+
+ public void setProperty(String key, String value) {
+
+ if(key != null && value != null){
+ properties.put(key, value);
+ }
+ }
+
+ public void setProperties(Map<String, String> properties) {
+ this.properties = properties;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public void setImage(String image) {
+ this.image = image;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getProvider() {
+ return provider;
+ }
+
+ public void setProvider(String provider) {
+ this.provider = provider;
+ }
+
+ public String getIdentity() {
+ return identity;
+ }
+
+ public void setIdentity(String identity) {
+ this.identity = identity;
+ }
+
+ public String getCredential() {
+ return credential;
+ }
+
+ public void setCredential(String credential) {
+ this.credential = credential;
+ }
+
+ public ComputeService getComputeService() {
+ return computeService;
+ }
+
+ public void setComputeService(ComputeService computeService) {
+ this.computeService = computeService;
+ }
+
+ public Template getTemplate() {
+ return template;
+ }
+
+ public void setTemplate(Template template) {
+ this.template = template;
+ }
+
+
+
+ public boolean equals(Object o) {
+ if(o instanceof IaasProvider){
+ return ((IaasProvider) o).getType().equals(this.getType());
+ }
+
+ return false;
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers
+ append(type).
+ toHashCode();
+ }
+
+ public IaasProvider copy(){
+ return new IaasProvider(this);
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ public void setClassName(String className) {
+ this.className = className;
+ }
+
+ public Iaas getIaas() {
+ if (iaas == null) {
+ try {
+ iaas = CloudControllerUtil.getIaas(this);
+ } catch (InvalidIaasProviderException e) {
+ return null;
+ }
+ }
+ return iaas;
+ }
+
+ public void setIaas(Iaas iaas) {
+ this.iaas = iaas;
+ }
+
+ public void reset(){
+// nodeIds = new ArrayList<String>();
+// nodes = new HashMap<String, NodeMetadata>();
+// toBeRemovedNodeIds = new ArrayList<String>();
+ }
+
+ public byte[] getPayload() {
+ return payload;
+ }
+
+ public void setPayload(byte[] payload) {
+ this.payload = ArrayUtils.clone(payload);
+ }
+
+ /**
+ * @return the networkInterfaces
+ */
+ public NetworkInterface[] getNetworkInterfaces() {
+ return networkInterfaces;
+ }
+
+ /**
+ * @param networkInterfaces the networkInterfaces to set
+ */
+ public void setNetworkInterfaces(NetworkInterface[] networkInterfaces) {
+ this.networkInterfaces = ArrayUtils.clone(networkInterfaces);
+ }
+
+ @Override
+ public String toString() {
+ return "IaasProvider [type=" + type + ", name=" + name + ", image=" + image +
+ ", provider=" + provider + "]";
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
new file mode 100644
index 0000000..1f19271
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.kubernetes.client.KubernetesApiClient;
+
+/**
+ * Holds information about a Kubernetes Cluster.
+ *
+ *
+ */
+public class KubernetesClusterContext implements Serializable {
+
+ private static final long serialVersionUID = -802025758806195791L;
+ private static final Log log = LogFactory.getLog(KubernetesClusterContext.class);
+
+ // id of the Kubernetes cluster
+ private String kubernetesClusterId;
+ // available host port range, delimited by a hyphen
+ private String hostPortRange;
+ // kubernetes master ip
+ private String masterIp;
+ // available list of ports
+ private List<Integer> availableHostPorts;
+ // kubernetes client API instance
+ private transient KubernetesApiClient kubApi;
+
+ public KubernetesClusterContext(String id, String portRange, String masterIp) {
+ availableHostPorts = new ArrayList<Integer>();
+ this.kubernetesClusterId = id;
+ this.hostPortRange = portRange;
+ this.masterIp = masterIp;
+ this.setKubApi(new KubernetesApiClient(getEndpoint(masterIp)));
+
+ }
+
+ private String getEndpoint(String ip) {
+ return "http://"+ip+":8080/api/v1beta1/";
+ }
+
+ public String getKubernetesClusterId() {
+ return kubernetesClusterId;
+ }
+ public void setKubernetesClusterId(String kubernetesClusterId) {
+ this.kubernetesClusterId = kubernetesClusterId;
+ }
+
+ public String getHostPortRange() {
+ return hostPortRange;
+ }
+
+ public void setHostPortRange(String hostPortRange) {
+ this.hostPortRange = hostPortRange;
+ }
+
+ public List<Integer> getAvailableHostPorts() {
+ return availableHostPorts;
+ }
+
+ public void setAvailableHostPorts(List<Integer> availableHostPorts) {
+ this.availableHostPorts = availableHostPorts;
+ }
+
+ private int[] portBoundaries() {
+ String[] portStrings = hostPortRange.split("-");
+ int[] portInts = new int[2];
+ portInts[0] = Integer.parseInt(portStrings[0]);
+ portInts[1] = Integer.parseInt(portStrings[1]);
+ return portInts;
+ }
+
+ public int getAnAvailableHostPort() {
+ int[] ports = {4000, 5000};
+ if (availableHostPorts.isEmpty()) {
+ try {
+
+ ports = portBoundaries();
+ } catch (Exception ignore) {
+ // on an exception, we use the default range
+ log.warn("Unable to find a port range, hence using the default. [4000-5000]"
+ + " Exception");
+ }
+
+ // populate the ports
+ populatePorts(ports[0], ports[1]);
+ }
+
+ return availableHostPorts.remove(0);
+ }
+
+ public void deallocateHostPort (int port) {
+ if (!availableHostPorts.contains(port)) {
+ availableHostPorts.add(port);
+ }
+ }
+
+ private void populatePorts(int i, int j) {
+
+ for (int x = i; x < j; x++) {
+ availableHostPorts.add(x);
+ }
+ }
+
+ public String getMasterIp() {
+ return masterIp;
+ }
+
+ public void setMasterIp(String masterIp) {
+ this.masterIp = masterIp;
+ }
+
+ public KubernetesApiClient getKubApi() {
+ if (kubApi == null) {
+ kubApi = new KubernetesApiClient(getEndpoint(masterIp));
+ }
+ return kubApi;
+ }
+
+ public void setKubApi(KubernetesApiClient kubApi) {
+ this.kubApi = kubApi;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((hostPortRange == null) ? 0 : hostPortRange.hashCode());
+ result = prime
+ * result
+ + ((kubernetesClusterId == null) ? 0 : kubernetesClusterId
+ .hashCode());
+ result = prime * result
+ + ((masterIp == null) ? 0 : masterIp.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ KubernetesClusterContext other = (KubernetesClusterContext) obj;
+ if (hostPortRange == null) {
+ if (other.hostPortRange != null)
+ return false;
+ } else if (!hostPortRange.equals(other.hostPortRange))
+ return false;
+ if (kubernetesClusterId == null) {
+ if (other.kubernetesClusterId != null)
+ return false;
+ } else if (!kubernetesClusterId.equals(other.kubernetesClusterId))
+ return false;
+ if (masterIp == null) {
+ if (other.masterIp != null)
+ return false;
+ } else if (!masterIp.equals(other.masterIp))
+ return false;
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/8c359dc1/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/LoadbalancerConfig.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/LoadbalancerConfig.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/LoadbalancerConfig.java
new file mode 100644
index 0000000..1e780cf
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/LoadbalancerConfig.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.cloud.controller.domain;
+
+import org.apache.stratos.common.Properties;
+import org.apache.stratos.common.Property;
+
+import java.io.Serializable;
+
+/**
+ * This class is used to support <link>CartridgeConfig</link>
+ * class for the Rest API
+ */
+public class LoadbalancerConfig implements Serializable {
+
+ private static final long serialVersionUID = 289225330995632449L;
+
+ private String type;
+
+ private Properties properties;
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public Properties getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
+
+ public String toString () {
+
+ return " [ Type: " + type + ", Properties: " + getIaasProperties() + " ] ";
+ }
+
+ private String getIaasProperties () {
+
+ StringBuilder iaasPropertyBuilder = new StringBuilder();
+ if (properties != null) {
+ Property[] propertyArray = properties.getProperties();
+ if(propertyArray.length > 0) {
+ for (Property property : propertyArray) {
+ iaasPropertyBuilder.append(property.toString() + " | ");
+ }
+ }
+ }
+ return iaasPropertyBuilder.toString();
+ }
+}