Merge branch 'm4'
Add partition deployer
Conflicts:
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
        
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
        
components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Topology.java


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

Branch: refs/heads/master
Commit: 0a06ba28662283e191b26f7f74b2f915e8ce9288
Parents: 7afbe41 dca46e3
Author: Udara Liyanage <[email protected]>
Authored: Fri Nov 29 14:01:47 2013 -0500
Committer: Udara Liyanage <[email protected]>
Committed: Fri Nov 29 14:10:31 2013 -0500

----------------------------------------------------------------------
 .../exception/InvalidPartitionException.java    |  40 +++++
 .../partition/deployers/PartitionDeployer.java  | 103 +++++++++++
 .../partition/deployers/PartitionReader.java    | 174 +++++++++++++++++++
 .../autoscaler/util/AutoScalerConstants.java    |  33 ++++
 .../src/main/resources/META-INF/component.xml   |   5 +
 5 files changed, 355 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0a06ba28/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionDeployer.java
index 0000000,6bba10e..e14f332
mode 000000,100644..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
@@@ -1,0 -1,103 +1,103 @@@
+ /*
+  * 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.deployers;
+ 
+ import java.io.File;
++import java.util.List;
++
+ import org.apache.axis2.context.ConfigurationContext;
+ import org.apache.axis2.deployment.AbstractDeployer;
+ 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.cloud.controller.deployment.partition.Partition;
+ 
+ /**
+  * 
+  * The Axis2 deployer class for party definitions definitions.
+  */
+ public class PartitionDeployer extends AbstractDeployer {
+       
+        private static final Log log = 
LogFactory.getLog(PartitionDeployer.class);
+        
+        private static String fileExt="xml"; //default
+        private static String deployDirectory=null;
+ 
+       @Override
+       public void init(ConfigurationContext context) {
 -              System.out.println("********Deploying init");
+               if(deployDirectory!=null){
+                       File deployDir = new File(new 
File(context.getAxisConfiguration().getRepository().getPath()),deployDirectory);
+                       if(!deployDir.exists()){
+                               //create policies deployment directory if not 
exist 
+                               try {
+                                       deployDir.mkdirs();
+                               } catch (Exception e) {
+                                       log.error("Unable to create policies 
deployment directory", e);
+                               }
+                       }
+               }
+       }
+ 
+       @Override
+       public void setDirectory(String dir) {
+               deployDirectory = dir;
+       }
+ 
+       @Override
+       public void setExtension(String ext) {
+               fileExt = ext;
+       }
+       
+       @Override
+       public void deploy(DeploymentFileData deploymentFileData) throws 
DeploymentException {
+ 
+               File partitionFile = deploymentFileData.getFile();
+               log.debug("Started to deploy the policy: " + partitionFile);
 -              System.out.println("********Deploying stated " + partitionFile);
+ 
+               try {
 -                      /*
++                      
+                       PartitionReader reader = new 
PartitionReader(partitionFile);
+                       
+                       List<Partition> partitionList = 
reader.getPartitionList();
+                       
+ 
+                       log.info("Successfully deployed the partition specified 
at "
+                                       + deploymentFileData.getAbsolutePath());
 -                       */
++                       
+               } catch (Exception e) {
+                       String msg = "Invalid partition artifact at " + 
deploymentFileData.getAbsolutePath();
+                       // back up the file
+                       File fileToBeRenamed = partitionFile;
+                       fileToBeRenamed.renameTo(new 
File(deploymentFileData.getAbsolutePath() + ".back"));
+                       log.error(msg, e);
+                       throw new DeploymentException(msg, e);
+               }
+       }
+       
+       @Override
+       public void undeploy(String fileName) throws DeploymentException {
 -              
System.out.println("****************************************************");
 -
++              //TODO undeploy logic
+       }
+       
+       
+       
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0a06ba28/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/partition/deployers/PartitionReader.java
index 0000000,a6c45f1..4f635e7
mode 000000,100644..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
@@@ -1,0 -1,144 +1,174 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one 
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License"); you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  * 
+  *  http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing,
+  * software distributed under the License is distributed on an
+  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+  * KIND, either express or implied.  See the License for the 
+  * specific language governing permissions and limitations
+  * under the License.
+  */
+ 
+ package org.apache.stratos.autoscaler.partition.deployers;
+ 
+ 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;
+ import org.apache.axiom.om.OMNode;
+ import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+ import org.apache.axiom.om.xpath.AXIOMXPath;
 -import org.apache.axis2.deployment.DeploymentException;
+ import org.apache.commons.logging.Log;
+ import org.apache.commons.logging.LogFactory;
+ import org.apache.stratos.autoscaler.exception.InvalidPartitionException;
 -import org.apache.stratos.autoscaler.policy.InvalidPolicyException;
 -import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
 -import org.apache.stratos.autoscaler.policy.model.Partition;
++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.jaxen.JaxenException;
+ 
+ /**
+  * 
+  * The Reader class for Deployment-policy definitions.
+  */
+ public class PartitionReader{
+       
+       private static final Log log = LogFactory.getLog(PartitionReader.class);
+       private static OMElement documentElement;
+       private File partitionFIle;
+       
+       public PartitionReader(File partitionFile){
+               this.partitionFIle = partitionFile;
+       }
+       
+       public List<Partition> getPartitionList() throws 
InvalidPartitionException{
+                       this.parse(this.partitionFIle);
 -                      List<OMNode> partitionXMLNodes = 
getMatchingNodes("/partitions/partition");
++                      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));
+                        }
+               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) {
+                 String msg ="Essential " + AutoScalerConstants.ID_ELEMENT + 
"element " +
+                                 "has not specified in ";
+                 // handleException(msg);
+             }
 -            //boolean partitionExist = 
TopologyManager.getInstance().getTopology().partitionExist(id);
++            // boolean partitionExist = 
TopologyManager.getInstance().getTopology().partitionExist(id);
+             boolean partitionExist =false;
+             if(!partitionExist){
+               partition = new Partition();
+                 partition.setId(id);
 -                //loadProperties(iaasElt, partition.getProperties());
 -                //handle partition created event
 -                //TopologyBuilder.handlePartitionCreated(partition);
++                partition.setProperties(getProperties(iaasElt)); 
++                
+             }            
+         }
+         return partition;
+     }
+       
+       public void parse(File xmlSource) {
+ 
+         if (xmlSource.exists()) {
+             try {
+                 documentElement = new 
StAXOMBuilder(xmlSource.getPath()).getDocumentElement();
+ 
+             } catch (Exception ex) {
+                 String msg = "Error occurred when parsing the " + 
xmlSource.getPath() + ".";
+                 //handleException(msg, ex);
+             }
+         } else {
+             String msg = "Configuration file cannot be found : " + 
xmlSource.getPath();
+             //handleException(msg);
+         }
+     }
+       /**
+      * @param xpath XPATH expression to be read.
+      * @return List matching OMNode list
+      */
+     @SuppressWarnings("unchecked")
 -    public static List<OMNode> getMatchingNodes(final String xpath) {
++    public List<OMNode> getMatchingNodes(final String xpath) {
+ 
+         AXIOMXPath axiomXpath;
+         List<OMNode> nodeList = null;
+         try {
+             axiomXpath = new AXIOMXPath(xpath);
+             nodeList = axiomXpath.selectNodes(documentElement);
+         } catch (JaxenException e) {
+             String msg = "Error occurred while reading the Xpath (" + xpath + 
")";
+             //log.error(msg, e);
 -            //throw new CloudControllerException(msg, e);
+         }
+ 
+         return nodeList;
+     }
++    
++    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;
++          }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0a06ba28/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
----------------------------------------------------------------------
diff --cc 
components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
index 0000000,b1fd9c5..de51f9b
mode 000000,100644..100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoScalerConstants.java
@@@ -1,0 -1,30 +1,33 @@@
+ /*
+  * 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.util;
+ 
+ public final class AutoScalerConstants {
+ 
+     /**
+      * Constant values for Auto Scaler
+      */
+     public static final String ID_ELEMENT = "id";
+     public static final String PARTITION_ELEMENT = "partition";
+     public static final String PARTITIONS_ELEMENT = "partitions";
++    public static final String PROPERTY_ELEMENT = "property";
++    public static final String PROPERTY_NAME_ATTR= "name";
++    public static final String PROPERTY_VALUE_ATTR = "value";
+        
+ }

Reply via email to