You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2013/12/01 11:59:02 UTC

[08/12] git commit: fixing partition deployer, few exception handling, policy parser fixes, refactoring

fixing partition deployer, few exception handling, policy parser fixes, refactoring


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

Branch: refs/heads/master
Commit: 50955e743c589cbbb2f28b5e2526acb3fe150d2b
Parents: 45cfecd
Author: Nirmal Fernando <ni...@apache.org>
Authored: Sun Dec 1 16:22:46 2013 +0530
Committer: Nirmal Fernando <ni...@apache.org>
Committed: Sun Dec 1 16:22:46 2013 +0530

----------------------------------------------------------------------
 .../stratos/autoscaler/ClusterContext.java      |  17 +-
 .../algorithm/AutoscaleAlgorithm.java           |   2 +-
 .../autoscaler/algorithm/OneAfterAnother.java   |   2 +-
 .../PartitionGroupOneAfterAnother.java          |   2 +-
 .../autoscaler/algorithm/RoundRobin.java        |   2 +-
 .../cloud/controller/CloudControllerClient.java |  10 +-
 .../deployment/policy/DeploymentPolicy.java     |  95 ++++++++++
 .../exception/InvalidPartitionException.java    |  22 +++
 .../exception/InvalidPolicyException.java       |  40 +++++
 .../exception/PolicyValidationException.java    |   4 +
 .../autoscaler/partition/PartitionGroup.java    |  87 ++++++++++
 .../partition/deployers/PartitionDeployer.java  |  38 ++--
 .../partition/deployers/PartitionReader.java    | 102 +++++------
 .../policy/InvalidPolicyException.java          |  40 -----
 .../autoscaler/policy/PolicyManager.java        |   3 +-
 .../policy/deployers/AbstractPolicyReader.java  |   5 +-
 .../deployers/AutoscalerPolicyDeployer.java     |   2 +-
 .../deployers/AutoscalerPolicyReader.java       |   2 +-
 .../deployers/DeploymentPolicyDeployer.java     |   4 +-
 .../deployers/DeploymentPolicyReader.java       |  51 ++++--
 .../stratos/autoscaler/util/AutoscalerUtil.java | 174 +++++++++++++++----
 .../stratos/autoscaler/util/ConfUtil.java       |   8 +
 .../policy/DeploymentPolicyDeployerTest.java    |   3 +-
 .../src/test/resources/deployment-policy.xml    |   2 +-
 24 files changed, 521 insertions(+), 196 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
index c1bf519..82d9d0c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContext.java
@@ -25,9 +25,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
@@ -64,26 +63,20 @@ public class ClusterContext {
     private Map<String, MemberStatsContext> memberContextMap;
     private DeploymentPolicy deploymentPolicy;
 
-    @SuppressWarnings("unchecked")
-    public ClusterContext(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy) {
+    public ClusterContext(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy, List<Partition> partitions) {
 
         this.clusterId = clusterId;
         this.serviceId = serviceId;
         this.setDeploymentPolicy(deploymentPolicy);
         partitionsOfThisCluster = new ArrayList<Partition>();
-        if (deploymentPolicy != null) {
-            for (PartitionGroup group : deploymentPolicy.getPartitionGroup()) {
-                for (Partition partition : group.getPartitions()) {
-                    partitionsOfThisCluster.add(partition);
-                }
-            }
-        }
         memberContextMap = new HashMap<String, MemberStatsContext>();
         partitionCountMap = new HashMap<String, Integer>();
         
-        for (Partition partition : partitionsOfThisCluster) {
+        for (Partition partition : partitions) {
+            partitionsOfThisCluster.add(partition);
             this.addPartitionCount(partition.getId(), 0);
         }
+        
         memberCount = 0;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
index 91d20a0..54ec855 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/AutoscaleAlgorithm.java
@@ -19,8 +19,8 @@
 
 package org.apache.stratos.autoscaler.algorithm;
 
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
 
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
index 5c33b99..9d34385 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
@@ -25,8 +25,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.AutoscalerContext;
 import org.apache.stratos.autoscaler.ClusterContext;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
 
 import edu.emory.mathcs.backport.java.util.Arrays;
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/PartitionGroupOneAfterAnother.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/PartitionGroupOneAfterAnother.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/PartitionGroupOneAfterAnother.java
index ba35131..f954c97 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/PartitionGroupOneAfterAnother.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/PartitionGroupOneAfterAnother.java
@@ -26,10 +26,10 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.AutoscalerContext;
 import org.apache.stratos.autoscaler.ClusterContext;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
 
 import edu.emory.mathcs.backport.java.util.Arrays;
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
index 7de89cd..83d48bc 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
@@ -23,8 +23,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.AutoscalerContext;
 import org.apache.stratos.autoscaler.ClusterContext;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
 
 import edu.emory.mathcs.backport.java.util.Arrays;
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
index 2b2e861..20c30bb 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/cloud/controller/CloudControllerClient.java
@@ -29,7 +29,6 @@ import org.apache.stratos.autoscaler.exception.SpawningException;
 import org.apache.stratos.autoscaler.exception.TerminationException;
 import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceIllegalArgumentExceptionException;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeTypeExceptionException;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidMemberExceptionException;
@@ -38,7 +37,6 @@ import org.apache.stratos.cloud.controller.stub.CloudControllerServiceStub;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
 
 import java.rmi.RemoteException;
-import java.util.UUID;
 
 
 /**
@@ -88,10 +86,10 @@ public class CloudControllerClient {
         
     }
     
-    public boolean validateDeploymentPolicy(String cartridgeType, DeploymentPolicy policy) throws PolicyValidationException{
+    public boolean validatePartitionsOfPolicy(String cartridgeType, Partition[] partitions) throws PolicyValidationException{
         
         try {
-            return stub.validateDeploymentPolicy(cartridgeType, policy);
+            return stub.validateDeploymentPolicy(cartridgeType, partitions);
         } catch (RemoteException e) {
             log.error(e.getMessage());
             throw new PolicyValidationException(e);
@@ -101,7 +99,7 @@ public class CloudControllerClient {
         } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) {
             log.error(e.getMessage());
             throw new PolicyValidationException(e);
-        }
+        } 
     }
     
     /*
@@ -115,7 +113,7 @@ public class CloudControllerClient {
             log.error(e.getMessage());
             throw new PartitionValidationException(e);
         } catch (CloudControllerServiceInvalidPartitionExceptionException e) {
-        	throw new PartitionValidationException(e);
+        	throw new PartitionValidationException(e.getMessage(),e);
 		}
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicy.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicy.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicy.java
new file mode 100644
index 0000000..815fbd7
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicy.java
@@ -0,0 +1,95 @@
+/*
+ * 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.autoscaler.deployment.policy;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+
+import edu.emory.mathcs.backport.java.util.Arrays;
+
+/**
+ * The model class for Deployment-Policy definition.
+ */
+public class DeploymentPolicy implements Serializable{
+
+    private static final long serialVersionUID = 5675507196284400099L;
+    private String id;
+	private PartitionGroup[] partitionGroups;
+	private List<Partition> allPartitions;
+
+    /**
+     * 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 value) {
+        this.id = value;
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void setPartitionGroups(PartitionGroup[] groups) {
+        this.partitionGroups = groups;
+        if(allPartitions == null) {
+            allPartitions = new ArrayList<Partition>();
+        }
+        for (PartitionGroup partitionGroup : groups) {
+            Partition[] partitions = partitionGroup.getPartitions();
+            if(partitions != null) {
+                allPartitions.addAll(Arrays.asList(partitions));
+            }
+        }
+    }
+    
+    public List<Partition> getAllPartitions() {
+        return allPartitions;
+    }
+
+    /**
+     * Gets the value of the partition-groups.
+     */
+    public PartitionGroup[] getPartitionGroups() {
+        
+        return this.partitionGroups;
+    }
+    
+    public String toString() {
+        return "Deployment Policy: "+this.id;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPartitionException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPartitionException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPartitionException.java
new file mode 100644
index 0000000..2e7013b
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPartitionException.java
@@ -0,0 +1,22 @@
+package org.apache.stratos.autoscaler.exception;
+
+/**
+ *
+ */
+public class InvalidPartitionException extends Exception {
+
+    private static final long serialVersionUID = -7521673271244696906L;
+
+    public InvalidPartitionException(String message, Exception exception){
+        super(message, exception);
+    }
+
+
+    public InvalidPartitionException(Exception exception){
+        super(exception);
+    }
+    
+    public InvalidPartitionException(String msg){
+        super(msg);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPolicyException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPolicyException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPolicyException.java
new file mode 100644
index 0000000..a131f05
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/InvalidPolicyException.java
@@ -0,0 +1,40 @@
+/*
+ * 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.autoscaler.exception;
+
+public class InvalidPolicyException extends Exception {
+
+	private static final long serialVersionUID = -4914522749282514366L;
+	
+	public InvalidPolicyException(String message) {
+		super(message);
+	}
+	
+	public InvalidPolicyException(String message,Throwable e) {
+		super(message,e);
+	}
+	
+	public InvalidPolicyException(Throwable e) {
+		super(e);
+	}
+	
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PolicyValidationException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PolicyValidationException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PolicyValidationException.java
index 0d899af..f3a30c8 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PolicyValidationException.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/PolicyValidationException.java
@@ -16,4 +16,8 @@ public class PolicyValidationException extends Exception {
     public PolicyValidationException(Exception exception){
         super(exception);
     }
+    
+    public PolicyValidationException(String msg){
+        super(msg);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionGroup.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionGroup.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionGroup.java
new file mode 100644
index 0000000..893f3aa
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/PartitionGroup.java
@@ -0,0 +1,87 @@
+/*
+ * 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.autoscaler.partition;
+
+import java.io.Serializable;
+
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+
+/**
+ * The model class for PartitionGroup definition.
+ */
+public class PartitionGroup implements Serializable{
+
+    private static final long serialVersionUID = -8043298009352097370L;
+    private String id;
+    private String partitionAlgo;
+    private Partition[] partitions;
+
+    /**
+     * Gets the value of the partitionAlgo property.
+     *
+     * @return
+     *     possible object is
+     *     {@link String }
+     *
+     */
+    public String getPartitionAlgo() {
+        return partitionAlgo;
+    }
+
+    /**
+     * Sets the value of the partitionAlgo property.
+     *
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *
+     */
+    public void setPartitionAlgo(String value) {
+        this.partitionAlgo = value;
+    }
+    
+    public void setPartitions(Partition[] partitions) {
+        this.partitions = partitions;
+    }
+
+    /**
+     * Gets the value of the partitions.
+     */
+    public Partition[] getPartitions() {
+        if (partitions == null) {
+            partitions = new Partition[0];
+        }
+        return this.partitions;
+    }
+
+    /**
+     * Gets the value of the id.
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * sets the value of the id.
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java
index 9149a45..eb869aa 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java
@@ -73,7 +73,7 @@ public class PartitionDeployer extends AbstractDeployer {
 	public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
 
 		File partitionFile = deploymentFileData.getFile();
-		log.debug("Started to deploy the policy: " + partitionFile);
+		log.debug("Started to deploy the partitions of file: " + partitionFile);
 
 		try {
 			
@@ -82,25 +82,29 @@ public class PartitionDeployer extends AbstractDeployer {
 			List<Partition> partitionList = reader.getPartitionList();
 			Iterator<Partition> it = partitionList.iterator();
 			
-			while(it.hasNext()){
-				Partition partition = it.next();
-				if(PartitionManager.getInstance().partitionExist(partition.getId())){
-					log.warn("Partition already exists in the system " + partition.getId());
-					continue;
-				}
-				
-				boolean isValid = CloudControllerClient.getInstance().validatePartition(partition);
-				if(!isValid){
-					log.error("Partition is not valid " + partition.getId());
-					continue;					
-				}
-				PartitionManager.getInstance().addPartition(partition.getId(), partition);
-			}			
+            while (it.hasNext()) {
+                Partition partition = it.next();
+                try {
+                    if (PartitionManager.getInstance().partitionExist(partition.getId())) {
+                        log.warn("Partition already exists in the system " + partition.getId());
+                        continue;
+                    }
+
+                    CloudControllerClient.getInstance().validatePartition(partition);
+                    PartitionManager.getInstance().addPartition(partition.getId(), partition);
+                    log.info("Partition :" + partition.getId() + " is deployed successfully.");
+                } catch (Exception e) {
+                    String msg =
+                                 "Invalid partition: " + partition.getId() + " in file: " +
+                                         partitionFile.getAbsolutePath()+". Cause: "+e.getMessage();
+                    log.error(msg, e);
+                    continue;
+                }
+            }			
 
-			log.info("Successfully deployed the partition specified at "+ deploymentFileData.getAbsolutePath());
 			 
 		} catch (Exception e) {
-			String msg = "Invalid partition artifact at " + deploymentFileData.getAbsolutePath();
+			String msg = "Invalid partition definition file: " + deploymentFileData.getAbsolutePath();
 			// back up the file
 			File fileToBeRenamed = partitionFile;
 			fileToBeRenamed.renameTo(new File(deploymentFileData.getAbsolutePath() + ".back"));

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java
index ec6e3fd..085f39f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java
@@ -23,6 +23,7 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+
 import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMElement;
@@ -33,8 +34,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.pojo.Properties;
-import org.apache.stratos.cloud.controller.pojo.Property;
 import org.apache.stratos.autoscaler.util.AutoScalerConstants;
+import org.apache.stratos.autoscaler.util.AutoscalerUtil;
 import org.jaxen.JaxenException;
 
 /**
@@ -53,47 +54,53 @@ public class PartitionReader{
 	
 	public List<Partition> getPartitionList(){
 			this.parse(this.partitionFIle);
-			String partitionXpath = AutoScalerConstants.PARTITIONS_ELEMENT + "/"+AutoScalerConstants.PARTITION_ELEMENT;
+			String partitionXpath = "/"+AutoScalerConstants.PARTITIONS_ELEMENT + "/"+AutoScalerConstants.PARTITION_ELEMENT;
 			List<OMNode> partitionXMLNodes = getMatchingNodes(partitionXpath);
 			Iterator<OMNode> itr = partitionXMLNodes.iterator();
 			List<Partition> partitonList = new ArrayList<Partition>();
-			while(itr.hasNext()){
-				 OMNode node  = itr.next();
-				 //System.out.println("node " + node);
-				 partitonList.add(this.getPartition(node));
-			 }
+        while (itr.hasNext()) {
+            OMNode node = itr.next();
+            Partition partition = this.getPartition(node);
+            if (partition != null) {
+                partitonList.add(partition);
+            }
+        }
 		return partitonList;
 	}
 	
 	private  Partition getPartition(final OMNode item) {
         Partition partition = null;
-        String id = null;
 
         if (item.getType() == OMNode.ELEMENT_NODE) {
 
-            OMElement iaasElt = (OMElement) item;
-            Iterator<?> it =
-                    iaasElt.getChildrenWithName(new QName(AutoScalerConstants.ID_ELEMENT));
-
-            if (it.hasNext()) {
-                OMElement providerElt = (OMElement) it.next();
-                id = providerElt.getText();
-            }
-
-            if (it.hasNext()) {
-                log.warn( " contains more than one " + AutoScalerConstants.ID_ELEMENT +
-                        " elements!" + " Elements other than the first will be neglected.");
-            }
-
-            if (id == null) {
+            OMElement partitionElt = (OMElement) item;
+            String partitionId = partitionElt.getAttributeValue(new QName("id"));
+            
+            if (partitionId == null) {
                 String msg ="Essential " + AutoScalerConstants.ID_ELEMENT + "element " +
-                                "has not specified in ";
-                // handleException(msg);
+                                "has not specified.";
+                log.warn("Partition is ignored. "+msg);
+                return null;
             }         
             	
             partition = new Partition();               
-            partition.setId(id);
-            partition.setProperties(getProperties(iaasElt)); 
+            partition.setId(partitionId);
+            Properties properties = AutoscalerUtil.getProperties(partitionElt);
+            if (properties != null) {
+                partition.setProperties(properties);
+            }
+            String providerValue = readValue(partitionElt, "provider");
+            if (providerValue != null) {
+                partition.setProvider(providerValue);
+            }
+            String maxValue = readValue(partitionElt, "max");
+            if (maxValue != null) {
+                partition.setPartitionMax(Integer.valueOf(maxValue));
+            }
+            String minValue = readValue(partitionElt, "min");
+            if (minValue != null) {
+                partition.setPartitionMin(Integer.valueOf(minValue));
+            }
                                     
         }
         return partition;
@@ -134,37 +141,14 @@ public class PartitionReader{
         return nodeList;
     }
     
-    private Properties getProperties(final OMElement elt) {
-    	
-    	        Iterator<?> it = elt.getChildrenWithName(new QName(AutoScalerConstants.PROPERTY_ELEMENT));
-    	        ArrayList<Property> propertyList = new ArrayList<Property>();
-    	        
-    	        while (it.hasNext()) {
-    	            OMElement prop = (OMElement) it.next();
-    	
-    	            if (prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_NAME_ATTR)) == null ||
-    	                    prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_VALUE_ATTR)) == null) {
-    	
-    	                String msg =
-    	                        "Property element's, name and value attributes should be specified " +
-    	                                "in ";
-    	
-    	                //handleException(msg);
-    	            }
-    	            
-    	            String name = prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_NAME_ATTR)).getAttributeValue();
-    	            String value = prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_VALUE_ATTR)).getAttributeValue();
-    	            
-    	            Property property = new Property();
-    	            property.setName(name);
-    	            property.setValue(value);    	            
-    	            propertyList.add(property);
-    	        }
-
-    	        Property[] propertyArray = propertyList.toArray(new Property[propertyList.size()]);    	        
-    	        Properties preoperties = new Properties();
-    	        preoperties.setProperties(propertyArray);
-    	        return preoperties;
-    	    }
+   
 
+    protected String readValue(OMElement ele, String qName) {
+        OMElement valueContainer = ele.getFirstChildWithName(new QName(qName));
+        if(valueContainer == null) {
+            return null;
+        }
+        String value = valueContainer.getText();
+        return value;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/InvalidPolicyException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/InvalidPolicyException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/InvalidPolicyException.java
deleted file mode 100644
index 5df3b24..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/InvalidPolicyException.java
+++ /dev/null
@@ -1,40 +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.autoscaler.policy;
-
-public class InvalidPolicyException extends Exception {
-
-	private static final long serialVersionUID = -4914522749282514366L;
-	
-	public InvalidPolicyException(String message) {
-		super(message);
-	}
-	
-	public InvalidPolicyException(String message,Throwable e) {
-		super(message,e);
-	}
-	
-	public InvalidPolicyException(Throwable e) {
-		super(e);
-	}
-	
-	
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
index 27000f1..f2ab9ae 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
@@ -28,8 +28,9 @@ import java.util.Map;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
 
 /**
  * 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java
index 06d6c62..52efa90 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AbstractPolicyReader.java
@@ -31,7 +31,7 @@ import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
 
 /**
  * Abstract super-class, with some common logic, for reading policies. The only
@@ -83,6 +83,9 @@ public abstract class AbstractPolicyReader<T> {
 
 	protected String readValue(OMElement ele, String qName) {
 		OMElement valueContainer = ele.getFirstChildWithName(new QName(qName));
+		if(valueContainer == null) {
+            return null;
+        }
 		String value = valueContainer.getText();
 		return value;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java
index 7579f46..141e95b 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyDeployer.java
@@ -27,7 +27,7 @@ import org.apache.axis2.deployment.DeploymentException;
 import org.apache.axis2.deployment.repository.util.DeploymentFileData;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java
index 8d71a5d..c0c79a9 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/AutoscalerPolicyReader.java
@@ -27,7 +27,7 @@ import org.apache.axiom.om.OMElement;
 import org.apache.axis2.deployment.DeploymentException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.policy.model.LoadAverage;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java
index 5c126e7..d56c4c0 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyDeployer.java
@@ -27,9 +27,9 @@ import org.apache.axis2.deployment.DeploymentException;
 import org.apache.axis2.deployment.repository.util.DeploymentFileData;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
 
 /**
  * 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java
index 59689aa..7587f33 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/deployers/DeploymentPolicyReader.java
@@ -30,11 +30,12 @@ import org.apache.axiom.om.OMElement;
 import org.apache.axis2.deployment.DeploymentException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.partition.PartitionManager;
-import org.apache.stratos.autoscaler.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
+import org.apache.stratos.autoscaler.partition.PartitionGroup;
+import org.apache.stratos.autoscaler.util.AutoscalerUtil;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.deployment.partition.PartitionGroup;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.cloud.controller.pojo.Properties;
 /**
  * 
  * The Reader class for Deployment-policy definitions.
@@ -72,21 +73,33 @@ public class DeploymentPolicyReader  extends AbstractPolicyReader<DeploymentPoli
 						while(partitionItr.hasNext()){
 							Object next = partitionItr.next();
 							if(next instanceof OMElement){
-								OMElement partitionEle = (OMElement) next;
+								OMElement partitionElt = (OMElement) next;
 								
-								String partitionId = partitionEle.getAttributeValue(new QName("id"));
-								/*
-								Partition partition = PartitionManager.getInstance().getPartitionById(partitionId);
-								 If a partition with this name does not exist in the partition list.
-								if(partition == null)
-									log.info("No Partition found with matching ID " + partitionId);
-								*/
-								Partition partition = new Partition();
-								partition.setId(partitionId);
-								partition.setPartitionMax(Integer.valueOf(readValue(partitionEle, "max")));
-								partition.setPartitionMin(Integer.valueOf(readValue(partitionEle, "min")));
-//								partition.setProvider(readValue(partitionEle, "provider"));
-								partitions.add(partition);
+								String partitionId = partitionElt.getAttributeValue(new QName("id"));
+                                if (partitionId != null) {
+                                    Partition partition = new Partition();
+                                    partition.setId(partitionId);
+                                    String maxValue = readValue(partitionElt, "max");
+                                    if (maxValue != null) {
+                                        partition.setPartitionMax(Integer.valueOf(maxValue));
+                                    }
+                                    String minValue = readValue(partitionElt, "min");
+                                    if (minValue != null) {
+                                        partition.setPartitionMin(Integer.valueOf(minValue));
+                                    }
+                                    String providerValue = readValue(partitionElt, "provider");
+                                    if (providerValue != null) {
+                                        partition.setProvider(providerValue);
+                                    }
+                                    
+                                    Properties properties = AutoscalerUtil.getProperties(partitionElt);
+                                    if (properties != null) {
+                                        partition.setProperties(properties);
+                                    }
+                                    partitions.add(partition);
+                                } else {
+                                    log.warn("Invalid Partition id: null. Partition will be ignored.");
+                                }
 							}
 						}
 						if(group.getPartitions() == null) {
@@ -98,7 +111,7 @@ public class DeploymentPolicyReader  extends AbstractPolicyReader<DeploymentPoli
 					if(policy.getPartitionGroups() == null) {
                         policy.setPartitionGroups(new PartitionGroup[0]);
                     }
-					policy.setPartitionGroup(partitionGroups.toArray(policy.getPartitionGroups()));
+					policy.setPartitionGroups(partitionGroups.toArray(policy.getPartitionGroups()));
 				}
 			} else{
 				throw new DeploymentException("File is not a valid deployment policy");

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index af2841e..7136eb7 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -1,76 +1,118 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one 
- * or more contributor license agreements.  See the NOTICE file
+ * 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
+ * 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
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
  * 
- *  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 
+ * "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.autoscaler.util;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.ClusterContext;
 import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.exception.InvalidPartitionException;
 import org.apache.stratos.autoscaler.exception.PolicyValidationException;
+import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.policy.model.LoadThresholds;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+import org.apache.stratos.cloud.controller.pojo.Properties;
+import org.apache.stratos.cloud.controller.pojo.Property;
 import org.apache.stratos.messaging.domain.topology.Cluster;
 
-
 /**
  * This class contains utility methods used by Autoscaler.
  */
 public class AutoscalerUtil {
-    
+
     private static final Log log = LogFactory.getLog(AutoscalerUtil.class);
 
-	private AutoscalerUtil() {
-
-	}
-	
-	/**
-	 * Updates ClusterContext for given cluster
-	 * @param cluster
-	 * @return ClusterContext - Updated ClusterContext
-	 * @throws PolicyValidationException 
-	 */
-    public static ClusterContext getClusterContext(Cluster cluster) throws PolicyValidationException {
+    private AutoscalerUtil() {
+
+    }
+
+    /**
+     * Updates ClusterContext for given cluster
+     * 
+     * @param cluster
+     * @return ClusterContext - Updated ClusterContext
+     * @throws PolicyValidationException
+     */
+    public static ClusterContext
+        getClusterContext(Cluster cluster) throws PolicyValidationException {
         // FIXME fix the following code to correctly update
         // AutoscalerContext context = AutoscalerContext.getInstance();
         if (null == cluster) {
             return null;
         }
 
-        log.info("Deployment policy name: "+cluster.getDeploymentPolicyName());
-        log.info("Autoscaler policy name: "+cluster.getAutoscalePolicyName());
-        
+        String autoscalePolicyName = cluster.getAutoscalePolicyName();
+        String deploymentPolicyName = cluster.getDeploymentPolicyName();
+
+        if (log.isDebugEnabled()) {
+            log.debug("Deployment policy name: " + deploymentPolicyName);
+            log.debug("Autoscaler policy name: " + autoscalePolicyName);
+        }
+
         AutoscalePolicy policy =
                                  PolicyManager.getInstance()
-                                              .getAutoscalePolicy(cluster.getAutoscalePolicyName());
+                                              .getAutoscalePolicy(autoscalePolicyName);
         DeploymentPolicy deploymentPolicy =
                                             PolicyManager.getInstance()
-                                                         .getDeploymentPolicy(cluster.getDeploymentPolicyName());
+                                                         .getDeploymentPolicy(deploymentPolicyName);
+
+        if (deploymentPolicy == null) {
+            String msg = "Deployment Policy is null. Policy name: " + deploymentPolicyName;
+            log.error(msg);
+            throw new PolicyValidationException(msg);
+        }
+
+        List<Partition> allPartitions = deploymentPolicy.getAllPartitions();
+        if (allPartitions == null) {
+            String msg =
+                         "Deployment Policy's Partitions are null. Policy name: " +
+                                 deploymentPolicyName;
+            log.error(msg);
+            throw new PolicyValidationException(msg);
+        }
 
-        log.info("Autoscaler policy: "+policy+" Deployment Policy: "+deploymentPolicy);
-            CloudControllerClient.getInstance().validateDeploymentPolicy(cluster.getServiceName(), deploymentPolicy);
+        try {
+            validateExistenceOfPartions(allPartitions);
+        } catch (InvalidPartitionException e) {
+            String msg = "Deployment Policy is invalid. Policy name: " + deploymentPolicyName;
+            log.error(msg, e);
+            throw new PolicyValidationException(msg, e);
+        }
+
+        CloudControllerClient.getInstance()
+                             .validatePartitionsOfPolicy(cluster.getServiceName(),
+                                                         allPartitions.toArray(new Partition[0]));
         ClusterContext clusterContext =
                                         new ClusterContext(cluster.getClusterId(),
                                                            cluster.getServiceName(),
-                                                           deploymentPolicy);
+                                                           deploymentPolicy, allPartitions);
 
         if (policy != null) {
 
@@ -89,4 +131,76 @@ public class AutoscalerUtil {
         return clusterContext;
     }
 
+    private static void validateExistenceOfPartions(List<Partition> partitions) throws InvalidPartitionException {
+        PartitionManager partitionMgr = PartitionManager.getInstance();
+        for (Partition partition : partitions) {
+            String partitionId = partition.getId();
+            if (partitionId == null || !partitionMgr.partitionExist(partitionId)) {
+                String msg =
+                             "Non existing Partition defined. Partition id: " + partitionId + ". " +
+                                     "Please define the partition in the partition definition file.";
+                log.error(msg);
+                throw new InvalidPartitionException(msg);
+            }
+            fillPartition(partition, partitionMgr.getPartitionById(partitionId));
+        }
+    }
+
+    private static void fillPartition(Partition destPartition, Partition srcPartition) {
+
+        if (!destPartition.isProviderSpecified()) {
+            destPartition.setProvider(srcPartition.getProvider());
+        }
+        if (!destPartition.isPartitionMaxSpecified()) {
+            destPartition.setPartitionMax(srcPartition.getPartitionMax());
+        }
+        if (!destPartition.isPartitionMinSpecified()) {
+            destPartition.setPartitionMin(srcPartition.getPartitionMin());
+        }
+        if (!destPartition.isPropertiesSpecified()) {
+            destPartition.setProperties(srcPartition.getProperties());
+        }
+    }
+
+    public static Properties getProperties(final OMElement elt) {
+
+        Iterator<?> it = elt.getChildrenWithName(new QName(AutoScalerConstants.PROPERTY_ELEMENT));
+        ArrayList<Property> propertyList = new ArrayList<Property>();
+
+        while (it.hasNext()) {
+            OMElement prop = (OMElement) it.next();
+
+            if (prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_NAME_ATTR)) == null ||
+                prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_VALUE_ATTR)) == null) {
+
+                String msg =
+                             "Property element's, name and value attributes should be specified. "
+                                     + "Property: ";
+                log.warn(msg + prop.toString());
+
+            }
+
+            String name =
+                          prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_NAME_ATTR))
+                              .getAttributeValue();
+            String value =
+                           prop.getAttribute(new QName(AutoScalerConstants.PROPERTY_VALUE_ATTR))
+                               .getAttributeValue();
+
+            Property property = new Property();
+            property.setName(name);
+            property.setValue(value);
+            propertyList.add(property);
+        }
+        
+        if(propertyList.isEmpty()) {
+            return null;
+        }
+
+        Property[] propertyArray = propertyList.toArray(new Property[propertyList.size()]);
+        Properties properties = new Properties();
+        properties.setProperties(propertyArray);
+        return properties;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
index 200d6b3..ddc3cb5 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/ConfUtil.java
@@ -19,14 +19,21 @@
 
 package org.apache.stratos.autoscaler.util;
 
+import org.apache.axiom.om.OMElement;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.Constants;
+import org.apache.stratos.cloud.controller.pojo.Properties;
+import org.apache.stratos.cloud.controller.pojo.Property;
 import org.wso2.carbon.utils.CarbonUtils;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
 
 /**
  * This class contains utility methods for read Autoscaler configuration file.
@@ -60,4 +67,5 @@ public class ConfUtil {
     public XMLConfiguration getConfiguration(){
         return config;
     }
+    
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicyDeployerTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicyDeployerTest.java b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicyDeployerTest.java
index aa581e3..b7ef179 100644
--- a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicyDeployerTest.java
+++ b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/deployment/policy/DeploymentPolicyDeployerTest.java
@@ -22,9 +22,8 @@ import static org.junit.Assert.*;
 
 import java.io.File;
 
-import org.apache.stratos.autoscaler.policy.InvalidPolicyException;
+import org.apache.stratos.autoscaler.exception.InvalidPolicyException;
 import org.apache.stratos.autoscaler.policy.deployers.DeploymentPolicyReader;
-import org.apache.stratos.cloud.controller.deployment.policy.DeploymentPolicy;
 import org.junit.Before;
 import org.junit.Test;
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/50955e74/components/org.apache.stratos.autoscaler/src/test/resources/deployment-policy.xml
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/resources/deployment-policy.xml b/components/org.apache.stratos.autoscaler/src/test/resources/deployment-policy.xml
index 81e7865..e4ca79e 100644
--- a/components/org.apache.stratos.autoscaler/src/test/resources/deployment-policy.xml
+++ b/components/org.apache.stratos.autoscaler/src/test/resources/deployment-policy.xml
@@ -4,7 +4,7 @@
                         <partitionAlgo>one-after-another</partitionAlgo>
                         <partition id="P1" >
                                 <provider>ec2</provider>
-                                <property name="region">ap-southeast-1</property>
+                                <property name="region" value="ap-southeast-1"/>
                                 <max>3</max>
                                 <min>1</min>
                         </partition>