Updated Branches:
  refs/heads/master 7c51d0418 -> 0e94cb7ed

implementing STRATOS-252 - Cartridge deployment API in Cloud Controller


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/a21bf19f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/a21bf19f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/a21bf19f

Branch: refs/heads/master
Commit: a21bf19f6437064b6680e0046a4b0625328d3a3c
Parents: bb68f23
Author: Nirmal Fernando <[email protected]>
Authored: Wed Dec 4 22:55:29 2013 +0530
Committer: Nirmal Fernando <[email protected]>
Committed: Wed Dec 4 22:55:29 2013 +0530

----------------------------------------------------------------------
 .../impl/CloudControllerServiceImpl.java        | 136 ++++++++----
 .../interfaces/CloudControllerService.java      |   8 +
 .../cloud/controller/pojo/Cartridge.java        |   6 +
 .../cloud/controller/pojo/CartridgeConfig.java  | 211 +++++++++++++++++++
 .../cloud/controller/pojo/IaasConfig.java       | 151 +++++++++++++
 .../cloud/controller/pojo/IaasProvider.java     |  48 ++---
 .../controller/util/CloudControllerUtil.java    | 101 +++++++++
 7 files changed, 587 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index 97c967d..958ba46 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -23,8 +23,10 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.exception.CloudControllerException;
+import 
org.apache.stratos.cloud.controller.exception.InvalidCartridgeDefinitionException;
 import 
org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException;
 import org.apache.stratos.cloud.controller.exception.InvalidClusterException;
+import 
org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException;
 import org.apache.stratos.cloud.controller.exception.InvalidMemberException;
 import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
 import 
org.apache.stratos.cloud.controller.exception.UnregisteredCartridgeException;
@@ -33,6 +35,7 @@ import 
org.apache.stratos.cloud.controller.interfaces.CloudControllerService;
 import org.apache.stratos.cloud.controller.interfaces.Iaas;
 import org.apache.stratos.cloud.controller.persist.Deserializer;
 import org.apache.stratos.cloud.controller.pojo.Cartridge;
+import org.apache.stratos.cloud.controller.pojo.CartridgeConfig;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 import org.apache.stratos.cloud.controller.pojo.ClusterContext;
 import org.apache.stratos.cloud.controller.pojo.IaasProvider;
@@ -276,6 +279,57 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
                }
        }
 
+    public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) 
throws InvalidCartridgeDefinitionException, InvalidIaasProviderException {
+
+        if (cartridgeConfig == null) {
+            String msg = "Invalid Cartridge Definition: Definition is null.";
+            log.error(msg);
+            throw new IllegalArgumentException(msg);
+
+        }
+
+        Cartridge cartridge = null;
+        try {
+            cartridge = CloudControllerUtil.toCartridge(cartridgeConfig);
+        } catch (Exception e) {
+            String msg =
+                         "Invalid Cartridge Definition: Cartridge Type: " +
+                                 cartridgeConfig.getType();
+            log.error(msg, e);
+            throw new InvalidCartridgeDefinitionException(msg, e);
+        }
+
+        for (IaasProvider iaasProvider : cartridge.getIaases()) {
+            try {
+                Iaas iaas = (Iaas) 
Class.forName(iaasProvider.getClassName()).newInstance();
+                iaas.buildComputeServiceAndTemplate(iaasProvider);
+                iaasProvider.setIaas(iaas);
+
+            } catch (Exception e) {
+                String msg =
+                             "Unable to build the jclouds object for iaas " + 
"of type: " +
+                                     iaasProvider.getType();
+                log.error(msg, e);
+                throw new InvalidIaasProviderException(msg, e);
+            }
+        }
+        
+        // TODO transaction begins
+        dataHolder.addCartridge(cartridge);
+
+        List<Cartridge> cartridgeList = new ArrayList<Cartridge>();
+        cartridgeList.add(cartridge);
+
+        TopologyBuilder.handleServiceCreated(cartridgeList);
+        // transaction ends
+        
+        log.info("Successfully deployed the Cartridge definition: " + 
cartridge.getType());
+    }
+
+    public void undeployCartridgeDefinition(String cartridgeType) {
+
+    }
+    
     @Override
     public MemberContext startInstance(MemberContext member) throws 
IllegalArgumentException,
         UnregisteredCartridgeException {
@@ -875,47 +929,47 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
 
        }
 
-       /**
-        * Comparator to compare {@link IaasProvider} on different attributes.
-        */
-       public enum IaasProviderComparator implements Comparator<IaasProvider> {
-               SCALE_UP_SORT {
-                       public int compare(IaasProvider o1, IaasProvider o2) {
-                               return 
Integer.valueOf(o1.getScaleUpOrder()).compareTo(
-                                               o2.getScaleUpOrder());
-                       }
-               },
-               SCALE_DOWN_SORT {
-                       public int compare(IaasProvider o1, IaasProvider o2) {
-                               return 
Integer.valueOf(o1.getScaleDownOrder()).compareTo(
-                                               o2.getScaleDownOrder());
-                       }
-               };
-
-               public static Comparator<IaasProvider> ascending(
-                               final Comparator<IaasProvider> other) {
-                       return new Comparator<IaasProvider>() {
-                               public int compare(IaasProvider o1, 
IaasProvider o2) {
-                                       return other.compare(o1, o2);
-                               }
-                       };
-               }
-
-               public static Comparator<IaasProvider> getComparator(
-                               final IaasProviderComparator... 
multipleOptions) {
-                       return new Comparator<IaasProvider>() {
-                               public int compare(IaasProvider o1, 
IaasProvider o2) {
-                                       for (IaasProviderComparator option : 
multipleOptions) {
-                                               int result = option.compare(o1, 
o2);
-                                               if (result != 0) {
-                                                       return result;
-                                               }
-                                       }
-                                       return 0;
-                               }
-                       };
-               }
-       }
+//     /**
+//      * Comparator to compare {@link IaasProvider} on different attributes.
+//      */
+//     public enum IaasProviderComparator implements Comparator<IaasProvider> {
+//             SCALE_UP_SORT {
+//                     public int compare(IaasProvider o1, IaasProvider o2) {
+//                             return 
Integer.valueOf(o1.getScaleUpOrder()).compareTo(
+//                                             o2.getScaleUpOrder());
+//                     }
+//             },
+//             SCALE_DOWN_SORT {
+//                     public int compare(IaasProvider o1, IaasProvider o2) {
+//                             return 
Integer.valueOf(o1.getScaleDownOrder()).compareTo(
+//                                             o2.getScaleDownOrder());
+//                     }
+//             };
+//
+//             public static Comparator<IaasProvider> ascending(
+//                             final Comparator<IaasProvider> other) {
+//                     return new Comparator<IaasProvider>() {
+//                             public int compare(IaasProvider o1, 
IaasProvider o2) {
+//                                     return other.compare(o1, o2);
+//                             }
+//                     };
+//             }
+//
+//             public static Comparator<IaasProvider> getComparator(
+//                             final IaasProviderComparator... 
multipleOptions) {
+//                     return new Comparator<IaasProvider>() {
+//                             public int compare(IaasProvider o1, 
IaasProvider o2) {
+//                                     for (IaasProviderComparator option : 
multipleOptions) {
+//                                             int result = option.compare(o1, 
o2);
+//                                             if (result != 0) {
+//                                                     return result;
+//                                             }
+//                                     }
+//                                     return 0;
+//                             }
+//                     };
+//             }
+//     }
 
        @Override
        public boolean registerService(Registrant registrant)

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
index 2784eb8..30a3d82 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/interfaces/CloudControllerService.java
@@ -19,12 +19,15 @@
 package org.apache.stratos.cloud.controller.interfaces;
 
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+import 
org.apache.stratos.cloud.controller.exception.InvalidCartridgeDefinitionException;
 import 
org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException;
 import org.apache.stratos.cloud.controller.exception.InvalidClusterException;
+import 
org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException;
 import org.apache.stratos.cloud.controller.exception.InvalidMemberException;
 import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
 import 
org.apache.stratos.cloud.controller.exception.UnregisteredCartridgeException;
 import 
org.apache.stratos.cloud.controller.exception.UnregisteredClusterException;
+import org.apache.stratos.cloud.controller.pojo.CartridgeConfig;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
 import org.apache.stratos.cloud.controller.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.pojo.Registrant;
@@ -35,6 +38,11 @@ import org.apache.stratos.cloud.controller.pojo.Registrant;
  * 
  */
 public interface CloudControllerService {
+    
+    public void deployCartridgeDefinition(CartridgeConfig cartridgeConfig) 
+            throws InvalidCartridgeDefinitionException, 
InvalidIaasProviderException;
+    
+    public void undeployCartridgeDefinition(String cartridgeType);
 
     /**
      * Validate a given {@link Partition} for basic property existence.

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java
index 0062403..a339b2e 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/Cartridge.java
@@ -109,6 +109,12 @@ public class Cartridge implements Serializable{
     public IaasProvider getIaasProviderOfPartition(String partitionId) {
         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;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeConfig.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeConfig.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeConfig.java
new file mode 100644
index 0000000..6584bd6
--- /dev/null
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/CartridgeConfig.java
@@ -0,0 +1,211 @@
+/*
+ * 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.pojo;
+
+import java.io.Serializable;
+
+/**
+ * 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 String baseDir;
+
+    private String[] deploymentDirs;
+
+    private PortMapping[] portMappings;
+
+    private Properties properties;
+
+    private IaasConfig[] iaasConfigs;
+
+
+    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 String getBaseDir() {
+        return baseDir;
+    }
+
+    public void setBaseDir(String baseDir) {
+        this.baseDir = baseDir;
+    }
+
+    public String[] getDeploymentDirs() {
+        return deploymentDirs;
+    }
+
+    public void setDeploymentDirs(String[] deploymentDirs) {
+        this.deploymentDirs = deploymentDirs;
+    }
+
+    public PortMapping[] getPortMappings() {
+        return portMappings;
+    }
+
+    public void setPortMappings(PortMapping[] portMappings) {
+        this.portMappings = 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 = iaasConfigs;
+    }
+
+    public String toString () {
+
+        return "Type: " + type + ", Provider: " + provider + ", Host: " + 
hostName + ", Display Name: " + displayName +
+                ", Description: " + description +  ", Version: " + version + 
", Multitenant " + multiTenant +
+                "\n Deployment: " + getDeploymentDetails() + "\n PortMapping: 
" + getPortMappingDetails() +
+                "\n IaaS: " +  getIaasConfigDetails() + "\n Properties: " + 
getPropertyDetails();
+    }
+
+    private String getDeploymentDetails () {
+
+        StringBuilder deploymentDetailBuilder = new StringBuilder();
+        deploymentDetailBuilder.append("Base direcotry: " + baseDir);
+        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.length > 0) {
+            for (PortMapping portMapping : portMappings) {
+                portMappingDetailBuilder.append(portMapping.toString() + " | 
");
+            }
+        }
+        return portMappingDetailBuilder.toString();
+    }
+
+    private String getIaasConfigDetails () {
+
+        StringBuilder iaasConfigDetailBuilder = new StringBuilder();
+        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();
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasConfig.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasConfig.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasConfig.java
new file mode 100644
index 0000000..b20f2d3
--- /dev/null
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasConfig.java
@@ -0,0 +1,151 @@
+/*
+ * 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.pojo;
+
+import java.io.Serializable;
+
+/**
+ * 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 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 = 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 + ", Image Id: " + imageId + ", Max Instance 
Limit: " + maxInstanceLimit +
+                " 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();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java
index 449e2d9..41fe61e 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/IaasProvider.java
@@ -60,12 +60,6 @@ public class IaasProvider implements Serializable{
      */
     private String image;
     
-
-    /**
-     * Scale up order and scale down order of the IaaS.
-     */
-    private int scaleUpOrder = -1, scaleDownOrder = -1;
-    
     private String provider, identity, credential;
     
     private transient ComputeService computeService;
@@ -87,15 +81,13 @@ public class IaasProvider implements Serializable{
        this.className = anIaasProvider.getClassName();
        this.properties = anIaasProvider.getProperties();
        this.image = anIaasProvider.getImage();
-       this.scaleUpOrder = anIaasProvider.getScaleUpOrder();
-       this.scaleDownOrder = anIaasProvider.getScaleDownOrder();
        this.provider = anIaasProvider.getProvider();
        this.identity = anIaasProvider.getIdentity();
        this.credential = anIaasProvider.getCredential();
        this.computeService = anIaasProvider.getComputeService();
        this.template = anIaasProvider.getTemplate();
-       this.payload = anIaasProvider.getPayload();
        this.iaas = anIaasProvider.getIaas();
+       this.payload = anIaasProvider.getPayload();
     }
     
     public String getType() {
@@ -114,6 +106,12 @@ public class IaasProvider implements Serializable{
         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){
@@ -133,22 +131,6 @@ public class IaasProvider implements Serializable{
         this.image = image;
     }
 
-    public int getScaleUpOrder() {
-        return scaleUpOrder;
-    }
-
-    public void setScaleUpOrder(int scaleUpOrder) {
-        this.scaleUpOrder = scaleUpOrder;
-    }
-
-    public int getScaleDownOrder() {
-        return scaleDownOrder;
-    }
-
-    public void setScaleDownOrder(int scaleDownOrder) {
-        this.scaleDownOrder = scaleDownOrder;
-    }
-
     public String getName() {
         return name;
     }
@@ -225,14 +207,6 @@ public class IaasProvider implements Serializable{
         this.className = className;
     }
 
-    public byte [] getPayload() {
-        return payload;
-    }
-
-    public void setPayload(byte[]payload) {
-        this.payload = payload;
-    }
-
     public Iaas getIaas() {
         return iaas;
     }
@@ -247,4 +221,12 @@ public class IaasProvider implements Serializable{
 //     toBeRemovedNodeIds = new ArrayList<String>();
     }
 
+    public byte[] getPayload() {
+        return payload;
+    }
+
+    public void setPayload(byte[] payload) {
+        this.payload = payload;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/a21bf19f/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
index 22e5903..1b0277c 100644
--- 
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
@@ -24,13 +24,19 @@ import 
org.apache.stratos.cloud.controller.exception.CloudControllerException;
 import org.apache.stratos.cloud.controller.persist.Deserializer;
 import org.apache.stratos.cloud.controller.pojo.AppType;
 import org.apache.stratos.cloud.controller.pojo.Cartridge;
+import org.apache.stratos.cloud.controller.pojo.CartridgeConfig;
 import org.apache.stratos.cloud.controller.pojo.CartridgeInfo;
+import org.apache.stratos.cloud.controller.pojo.IaasConfig;
+import org.apache.stratos.cloud.controller.pojo.IaasProvider;
 import org.apache.stratos.cloud.controller.pojo.PortMapping;
 import org.apache.stratos.cloud.controller.pojo.Property;
 import org.apache.stratos.cloud.controller.registry.RegistryManager;
+import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
 import org.apache.stratos.messaging.domain.topology.Topology;
 import org.wso2.carbon.registry.core.exceptions.RegistryException;
 
+import edu.emory.mathcs.backport.java.util.Arrays;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -38,9 +44,104 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
 
+
 public class CloudControllerUtil {
        private static final Log log = 
LogFactory.getLog(CloudControllerUtil.class);
 
+    @SuppressWarnings("unchecked")
+    public static Cartridge toCartridge(CartridgeConfig config) {
+        if (config == null) {
+            return null;
+        }
+        Cartridge cartridge = new Cartridge();
+        cartridge.setType(config.getType());
+        cartridge.setDisplayName(config.getDisplayName());
+        cartridge.setDescription(config.getDescription());
+        cartridge.setHostName(config.getHostName());
+        cartridge.setDeploymentDirs(Arrays.asList(config.getDeploymentDirs()));
+        cartridge.setProvider(config.getProvider());
+        cartridge.setVersion(config.getVersion());
+        cartridge.setBaseDir(config.getBaseDir());
+        cartridge.setPortMappings(Arrays.asList(config.getPortMappings()));
+        cartridge.setMultiTenant(config.isMultiTenant());
+
+        org.apache.stratos.cloud.controller.pojo.Properties props = 
config.getProperties();
+        if (props != null) {
+            for (Property prop : props.getProperties()) {
+                cartridge.addProperty(prop.getName(), prop.getValue());
+            }
+        }
+
+        List<IaasProvider> iaases = 
FasterLookUpDataHolder.getInstance().getIaasProviders();
+
+        IaasConfig[] iaasConfigs = config.getIaasConfigs();
+        if (iaasConfigs != null) {
+            for (IaasConfig iaasConfig : iaasConfigs) {
+                if (iaasConfig != null) {
+                    IaasProvider iaasProvider = null;
+                    if (iaases != null) {
+                        // check whether this is a reference to a predefined 
IaaS.
+                        for (IaasProvider iaas : iaases) {
+                            if (iaas.getType().equals(iaasConfig.getType())) {
+                                iaasProvider = new IaasProvider(iaas);
+                                break;
+                            }
+                        }
+                    }
+
+                    if (iaasProvider == null) {
+                        iaasProvider = new IaasProvider();
+                        iaasProvider.setType(iaasConfig.getType());
+                    }
+
+                    String className = iaasConfig.getClassName();
+                    if (className != null) {
+                        iaasProvider.setClassName(className);
+                    }
+
+                    String name = iaasConfig.getName();
+                    if (name != null) {
+                        iaasProvider.setName(name);
+                    }
+
+                    String identity = iaasConfig.getIdentity();
+                    if (identity != null) {
+                        iaasProvider.setIdentity(identity);
+                    }
+
+                    String credential = iaasConfig.getCredential();
+                    if (credential != null) {
+                        iaasProvider.setCredential(credential);
+                    }
+
+                    String provider = iaasConfig.getProvider();
+                    if (provider != null) {
+                        iaasProvider.setProvider(provider);
+                    }
+                    String imageId = iaasConfig.getImageId();
+                    if (imageId != null) {
+                        iaasProvider.setImage(imageId);
+                    }
+                    
+                    byte[] payload = iaasConfig.getPayload();
+                    if (payload != null) {
+                        iaasProvider.setPayload(payload);
+                    }
+
+                    org.apache.stratos.cloud.controller.pojo.Properties props1 
=
+                                                                               
  config.getProperties();
+                    if (props1 != null) {
+                        for (Property prop : props1.getProperties()) {
+                            iaasProvider.addProperty(prop.getName(), 
prop.getValue());
+                        }
+                    }
+                }
+            }
+        }
+
+        return cartridge;
+    }
+         
     public static CartridgeInfo toCartridgeInfo(Cartridge cartridge) {
 
                CartridgeInfo carInfo = new CartridgeInfo();

Reply via email to