You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by me...@apache.org on 2014/03/05 06:57:10 UTC

[09/18] Forking jclouds's vcloud API

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/OrgNetworkHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/OrgNetworkHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/OrgNetworkHandler.java
new file mode 100755
index 0000000..175cdde
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/OrgNetworkHandler.java
@@ -0,0 +1,325 @@
+/*
+ * 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.jclouds.vcloud.xml;
+
+import static org.jclouds.util.SaxUtils.equalsOrSuffix;
+import static org.jclouds.vcloud.util.Utils.newReferenceType;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.network.DhcpService;
+import org.jclouds.vcloud.domain.network.Features;
+import org.jclouds.vcloud.domain.network.FenceMode;
+import org.jclouds.vcloud.domain.network.FirewallService;
+import org.jclouds.vcloud.domain.network.IpRange;
+import org.jclouds.vcloud.domain.network.IpScope;
+import org.jclouds.vcloud.domain.network.NatService;
+import org.jclouds.vcloud.domain.network.OrgNetwork;
+import org.jclouds.vcloud.domain.network.firewall.FirewallPolicy;
+import org.jclouds.vcloud.domain.network.firewall.FirewallProtocols;
+import org.jclouds.vcloud.domain.network.firewall.FirewallRule;
+import org.jclouds.vcloud.domain.network.internal.OrgNetworkImpl;
+import org.jclouds.vcloud.domain.network.nat.NatPolicy;
+import org.jclouds.vcloud.domain.network.nat.NatProtocol;
+import org.jclouds.vcloud.domain.network.nat.NatRule;
+import org.jclouds.vcloud.domain.network.nat.NatType;
+import org.jclouds.vcloud.domain.network.nat.rules.MappingMode;
+import org.jclouds.vcloud.domain.network.nat.rules.OneToOneVmRule;
+import org.jclouds.vcloud.domain.network.nat.rules.PortForwardingRule;
+import org.jclouds.vcloud.domain.network.nat.rules.VmRule;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+/**
+ * @author Adrian Cole
+ */
+public class OrgNetworkHandler extends ParseSax.HandlerWithResult<OrgNetwork> {
+
+   protected final TaskHandler taskHandler;
+
+   @Inject
+   public OrgNetworkHandler(TaskHandler taskHandler) {
+      this.taskHandler = taskHandler;
+   }
+
+   protected StringBuilder currentText = new StringBuilder();
+
+   protected ReferenceType network;
+   protected ReferenceType org;
+   protected String orgDescription;
+   protected List<Task> tasks = Lists.newArrayList();
+
+   protected String startAddress;
+   protected String endAddress;
+
+   protected boolean inherited;
+   protected String gateway;
+   protected String netmask;
+   protected String dns1;
+   protected String dns2;
+   protected String dnsSuffix;
+   protected Set<IpRange> ipRanges = Sets.newLinkedHashSet();
+   protected Set<String> allocatedIpAddresses = Sets.newLinkedHashSet();
+
+   protected IpScope ipScope;
+   protected ReferenceType parentNetwork;
+   protected FenceMode fenceMode;
+
+   protected boolean serviceEnabled;
+   protected Integer defaultLeaseTime;
+   protected Integer maxLeaseTime;
+
+   protected DhcpService dhcpService;
+
+   protected boolean inFirewallRule;
+   protected boolean firewallRuleEnabled;
+   protected String firewallRuleDescription;
+   protected FirewallPolicy firewallPolicy;
+
+   protected boolean tcp;
+   protected boolean udp;
+   protected FirewallProtocols protocols;
+   protected int port;
+   protected String destinationIp;
+
+   protected List<FirewallRule> firewallRules = Lists.newArrayList();
+   protected FirewallService firewallService;
+
+   protected NatType natType;
+   protected NatPolicy natPolicy;
+
+   protected MappingMode mappingMode;
+   protected String externalIP;
+   protected String vAppScopedVmId;
+   protected int vmNicId;
+
+   protected int externalPort;
+   protected String internalIP;
+   protected int internalPort;
+   protected NatProtocol natProtocol;
+
+   protected String vAppScopedLocalId;
+
+   protected List<NatRule> natRules = Lists.newArrayList();
+   protected NatService natService;
+
+   protected Features features;
+   protected OrgNetwork.Configuration configuration;
+
+   protected ReferenceType networkPool;
+   protected Set<String> allowedExternalIpAddresses = Sets.newLinkedHashSet();
+
+   public OrgNetwork getResult() {
+      return new OrgNetworkImpl(network.getName(), network.getType(), network.getHref(), org, orgDescription, tasks,
+               configuration, networkPool, allowedExternalIpAddresses);
+   }
+
+   @Override
+   public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      if (SaxUtils.equalsOrSuffix(qName, "OrgNetwork")) {
+         network = newReferenceType(attributes);
+      } else if (SaxUtils.equalsOrSuffix(qName, "FirewallRule")) {
+         this.inFirewallRule = true;
+      } else if (SaxUtils.equalsOrSuffix(qName, "ParentNetwork")) {
+         parentNetwork = newReferenceType(attributes);
+      } else if (SaxUtils.equalsOrSuffix(qName, "Link") && "up".equals(attributes.get("rel"))) {
+         org = newReferenceType(attributes);
+      } else {
+         taskHandler.startElement(uri, localName, qName, attrs);
+      }
+      String type = attributes.get("type");
+      if (type != null) {
+         if (type.indexOf("networkPool+xml") != -1) {
+            networkPool = newReferenceType(attributes);
+         }
+      }
+   }
+
+   public void endElement(String uri, String name, String qName) {
+      taskHandler.endElement(uri, name, qName);
+      if (SaxUtils.equalsOrSuffix(qName, "Task")) {
+         this.tasks.add(taskHandler.getResult());
+      } else if (SaxUtils.equalsOrSuffix(qName, "Description")) {
+         if (inFirewallRule)
+            firewallRuleDescription = currentOrNull();
+         else
+            orgDescription = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "FenceMode")) {
+         fenceMode = FenceMode.fromValue(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "StartAddress")) {
+         startAddress = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "EndAddress")) {
+         endAddress = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "AllocatedIpAddress")) {
+         allocatedIpAddresses.add(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "IpRange")) {
+         ipRanges.add(new IpRange(startAddress, endAddress));
+         this.startAddress = null;
+         this.endAddress = null;
+      } else if (SaxUtils.equalsOrSuffix(qName, "IsInherited")) {
+         inherited = Boolean.parseBoolean(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "Gateway")) {
+         gateway = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "Netmask")) {
+         netmask = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "Dns1")) {
+         dns1 = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "Dns2")) {
+         dns2 = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "DnsSuffix")) {
+         dnsSuffix = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "IpScope")) {
+         ipScope = new IpScope(inherited, gateway, netmask, dns1, dns2, dnsSuffix, ipRanges, allocatedIpAddresses);
+         this.inherited = false;
+         this.gateway = null;
+         this.netmask = null;
+         this.dns1 = null;
+         this.dns2 = null;
+         this.dnsSuffix = null;
+         this.ipRanges = Sets.newLinkedHashSet();
+         this.allocatedIpAddresses = Sets.newLinkedHashSet();
+      } else if (SaxUtils.equalsOrSuffix(qName, "IsEnabled")) {
+         if (inFirewallRule)
+            firewallRuleEnabled = Boolean.parseBoolean(currentOrNull());
+         else
+            serviceEnabled = Boolean.parseBoolean(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "DefaultLeaseTime")) {
+         defaultLeaseTime = Integer.parseInt(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "MaxLeaseTime")) {
+         maxLeaseTime = Integer.parseInt(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "DhcpService")) {
+         this.dhcpService = new DhcpService(serviceEnabled, defaultLeaseTime, maxLeaseTime, Iterables
+                  .getOnlyElement(ipRanges));
+         this.serviceEnabled = false;
+         this.defaultLeaseTime = null;
+         this.maxLeaseTime = null;
+         this.ipRanges = Sets.newLinkedHashSet();
+      } else if (SaxUtils.equalsOrSuffix(qName, "Policy")) {
+         if (inFirewallRule)
+            firewallPolicy = FirewallPolicy.fromValue(currentOrNull());
+         else
+            natPolicy = NatPolicy.fromValue(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "Tcp")) {
+         tcp = Boolean.parseBoolean(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "Udp")) {
+         udp = Boolean.parseBoolean(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "Protocols")) {
+         this.protocols = new FirewallProtocols(tcp, udp);
+         this.tcp = false;
+         this.udp = false;
+      } else if (SaxUtils.equalsOrSuffix(qName, "DestinationIp")) {
+         this.destinationIp = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "FirewallRule")) {
+         this.inFirewallRule = false;
+         this.firewallRules.add(new FirewallRule(firewallRuleEnabled, firewallRuleDescription, firewallPolicy,
+                  protocols, port, destinationIp));
+         this.firewallRuleEnabled = false;
+         this.firewallRuleDescription = null;
+         this.firewallPolicy = null;
+         this.protocols = null;
+         this.port = -1;
+         this.destinationIp = null;
+      } else if (SaxUtils.equalsOrSuffix(qName, "FirewallService")) {
+         firewallService = new FirewallService(serviceEnabled, firewallRules);
+         this.serviceEnabled = false;
+         this.firewallRules = Lists.newArrayList();
+      } else if (SaxUtils.equalsOrSuffix(qName, "NatType")) {
+         natType = NatType.fromValue(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "MappingMode")) {
+         mappingMode = MappingMode.fromValue(currentOrNull());
+      } else if (qName.equalsIgnoreCase("ExternalIP")) {
+         externalIP = currentOrNull();
+      } else if (qName.equalsIgnoreCase("VAppScopedVmId")) {
+         vAppScopedVmId = currentOrNull();
+      } else if (qName.equalsIgnoreCase("VAppScopedLocalId")) {
+         vAppScopedLocalId = currentOrNull();
+      } else if (qName.equalsIgnoreCase("vmNicId")) {
+         vmNicId = Integer.parseInt(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "OneToOneVmRule")) {
+         natRules.add(new OneToOneVmRule(mappingMode, externalIP, vAppScopedVmId, vmNicId));
+         this.mappingMode = null;
+         this.externalIP = null;
+         this.vAppScopedVmId = null;
+         this.vmNicId = -1;
+      } else if (qName.equalsIgnoreCase("ExternalPort")) {
+         externalPort = Integer.parseInt(currentOrNull());
+      } else if (qName.equalsIgnoreCase("InternalIP")) {
+         internalIP = currentOrNull();
+      } else if (qName.equalsIgnoreCase("InternalPort")) {
+         internalPort = Integer.parseInt(currentOrNull());
+      } else if (equalsOrSuffix(qName, "Protocol")) {
+         natProtocol = NatProtocol.valueOf(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "PortForwardingRule")) {
+         natRules.add(new PortForwardingRule(externalIP, externalPort, internalIP, internalPort, natProtocol));
+         this.externalIP = null;
+         this.externalPort = -1;
+         this.internalIP = null;
+         this.internalPort = -1;
+         this.natProtocol = null;
+      } else if (SaxUtils.equalsOrSuffix(qName, "VmRule")) {
+         natRules.add(new VmRule(externalIP, externalPort, vAppScopedLocalId, vmNicId, internalPort, natProtocol));
+         this.externalIP = null;
+         this.externalPort = -1;
+         this.vAppScopedLocalId = null;
+         this.vmNicId = -1;
+         this.internalPort = -1;
+         this.natProtocol = null;
+      } else if (SaxUtils.equalsOrSuffix(qName, "NatService")) {
+         this.natService = new NatService(serviceEnabled, natType, natPolicy, natRules);
+         this.serviceEnabled = false;
+         this.natType = null;
+         this.natPolicy = null;
+         this.natRules = Lists.newArrayList();
+      } else if (SaxUtils.equalsOrSuffix(qName, "Features")) {
+         this.features = new Features(dhcpService, firewallService, natService);
+         this.dhcpService = null;
+         this.firewallService = null;
+         this.natService = null;
+      } else if (SaxUtils.equalsOrSuffix(qName, "Configuration")) {
+         configuration = new OrgNetworkImpl.ConfigurationImpl(ipScope, parentNetwork, fenceMode, features);
+         this.ipScope = null;
+         this.parentNetwork = null;
+         this.fenceMode = null;
+         this.features = null;
+      } else if (SaxUtils.equalsOrSuffix(qName, "AllowedExternalIpAddress")) {
+         allowedExternalIpAddresses.add(currentOrNull());
+      }
+      currentText = new StringBuilder();
+   }
+
+   public void characters(char ch[], int start, int length) {
+      currentText.append(ch, start, length);
+   }
+
+   protected String currentOrNull() {
+      String returnVal = currentText.toString().trim();
+      return returnVal.equals("") ? null : returnVal;
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/SupportedVersionsHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/SupportedVersionsHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/SupportedVersionsHandler.java
new file mode 100755
index 0000000..a4c29ca
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/SupportedVersionsHandler.java
@@ -0,0 +1,60 @@
+/*
+ * 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.jclouds.vcloud.xml;
+
+import java.net.URI;
+import java.util.SortedMap;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.util.SaxUtils;
+
+import com.google.common.collect.Maps;
+
+/**
+ * @author Adrian Cole
+ */
+public class SupportedVersionsHandler extends ParseSax.HandlerWithResult<SortedMap<String, URI>> {
+   private StringBuilder currentText = new StringBuilder();
+
+   private SortedMap<String, URI> contents = Maps.newTreeMap();
+   private String version;
+   private URI location;
+
+   public SortedMap<String, URI> getResult() {
+      return contents;
+   }
+
+   public void endElement(String uri, String name, String qName) {
+      if (SaxUtils.equalsOrSuffix(qName, "Version")) {
+         version = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "LoginUrl")) {
+         location = URI.create(currentOrNull());
+      } else if (SaxUtils.equalsOrSuffix(qName, "VersionInfo")) {
+         contents.put(version, location);
+      }
+      currentText = new StringBuilder();
+   }
+
+   public void characters(char ch[], int start, int length) {
+      currentText.append(ch, start, length);
+   }
+
+   protected String currentOrNull() {
+      String returnVal = currentText.toString().trim();
+      return returnVal.equals("") ? null : returnVal;
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/TaskHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/TaskHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/TaskHandler.java
new file mode 100755
index 0000000..8afdec0
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/TaskHandler.java
@@ -0,0 +1,128 @@
+/*
+ * 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.jclouds.vcloud.xml;
+
+import static org.jclouds.util.SaxUtils.equalsOrSuffix;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.inject.Inject;
+
+import org.jclouds.date.DateService;
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.logging.Logger;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.TaskStatus;
+import org.jclouds.vcloud.domain.VCloudError;
+import org.jclouds.vcloud.domain.internal.TaskImpl;
+import org.jclouds.vcloud.util.Utils;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+/**
+ * @author Adrian Cole
+ */
+public class TaskHandler extends ParseSax.HandlerWithResult<Task> {
+   protected final DateService dateService;
+   private String operation;
+   private ReferenceType taskLink;
+   private ReferenceType owner;
+   private TaskStatus status;
+   private Date startTime;
+   private Date endTime;
+   private Date expiryTime;
+   private Task task;
+   private VCloudError error;
+   private boolean inOwner;
+
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   @Inject
+   public TaskHandler(DateService dateService) {
+      this.dateService = dateService;
+   }
+
+   public Task getResult() {
+      return task;
+   }
+
+   @Override
+   public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      if (equalsOrSuffix(qName, "Task")) {
+         if (attributes.get("href") != null && !inOwner)// queued tasks may not have an
+            // href yet
+            taskLink = Utils.newReferenceType(attributes);
+         status = TaskStatus.fromValue(attributes.get("status"));
+         operation = attributes.get("operation");
+         if (attributes.containsKey("startTime"))
+            startTime = parseDate(attributes.get("startTime"));
+         if (attributes.containsKey("endTime"))
+            endTime = parseDate(attributes.get("endTime"));
+         if (attributes.containsKey("expiryTime"))
+            expiryTime = parseDate(attributes.get("expiryTime"));
+         // TODO technically the old Result object should only be owner for copy and delete tasks
+      } else if (equalsOrSuffix(qName, "Owner") || equalsOrSuffix(qName, "Result")) {
+         owner = Utils.newReferenceType(attributes);
+      } else if (equalsOrSuffix(qName, "Link") && "self".equals(attributes.get("rel"))) {
+         taskLink = Utils.newReferenceType(attributes);
+      } else if (equalsOrSuffix(qName, "Error")) {
+         error = Utils.newError(attributes);
+      }
+   }
+
+   private Date parseDate(String toParse) {
+      try {
+         return dateService.iso8601DateParse(toParse);
+      } catch (RuntimeException e) {
+         if (e.getCause() instanceof ParseException) {
+            if (!toParse.endsWith("Z"))
+               toParse += "Z";
+            return dateService.iso8601SecondsDateParse(toParse);
+         } else {
+            logger.error(e, "error parsing date");
+         }
+      }
+      return null;
+   }
+
+   @Override
+   public void endElement(String uri, String localName, String qName) {
+      if (equalsOrSuffix(qName, "Task")) {
+         this.task = new TaskImpl(taskLink.getHref(), operation, status, startTime, endTime, expiryTime, owner, error);
+         operation = null;
+         taskLink = null;
+         status = null;
+         startTime = null;
+         endTime = null;
+         owner = null;
+         error = null;
+      } else if (equalsOrSuffix(qName, "Owner")) {
+         inOwner = false;
+      }
+   }
+
+   public void characters(char ch[], int start, int length) {
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/TasksListHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/TasksListHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/TasksListHandler.java
new file mode 100755
index 0000000..9af449b
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/TasksListHandler.java
@@ -0,0 +1,74 @@
+/*
+ * 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.jclouds.vcloud.xml;
+
+import java.util.Map;
+import java.util.SortedSet;
+
+import javax.inject.Inject;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.TasksList;
+import org.jclouds.vcloud.domain.internal.TasksListImpl;
+import org.jclouds.vcloud.util.Utils;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import com.google.common.collect.Sets;
+
+/**
+ * @author Adrian Cole
+ */
+public class TasksListHandler extends ParseSax.HandlerWithResult<TasksList> {
+
+   private SortedSet<Task> tasks = Sets.newTreeSet();
+   private final TaskHandler taskHandler;
+   private ReferenceType resource;
+
+   @Inject
+   public TasksListHandler(TaskHandler taskHandler) {
+      this.taskHandler = taskHandler;
+   }
+
+   public TasksList getResult() {
+      return new TasksListImpl(resource.getHref(), tasks);
+   }
+
+   @Override
+   public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      if (SaxUtils.equalsOrSuffix(qName, "TasksList")) {
+         resource = Utils.newReferenceType(attributes);
+      } else if (SaxUtils.equalsOrSuffix(qName, "Link") && "self".equals(attributes.get("rel"))) {
+         resource = Utils.newReferenceType(attributes);
+      } else {
+         taskHandler.startElement(uri, localName, qName, attrs);
+      }
+   }
+
+   @Override
+   public void endElement(String uri, String localName, String qName) throws SAXException {
+      taskHandler.endElement(uri, localName, qName);
+      if (SaxUtils.equalsOrSuffix(qName, "Task")) {
+         this.tasks.add(taskHandler.getResult());
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VAppHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VAppHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VAppHandler.java
new file mode 100755
index 0000000..3288be9
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VAppHandler.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.jclouds.vcloud.xml;
+
+import static org.jclouds.util.SaxUtils.equalsOrSuffix;
+import static org.jclouds.vcloud.util.Utils.newReferenceType;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.Status;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.VApp;
+import org.jclouds.vcloud.domain.Vm;
+import org.jclouds.vcloud.domain.internal.VAppImpl;
+import org.jclouds.vcloud.domain.ovf.VCloudNetworkSection;
+import org.jclouds.vcloud.xml.ovf.VCloudNetworkSectionHandler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+/**
+ * @author Adrian Cole
+ */
+public class VAppHandler extends ParseSax.HandlerWithResult<VApp> {
+
+   protected final TaskHandler taskHandler;
+   protected final VmHandler vmHandler;
+   protected final VCloudNetworkSectionHandler networkSectionHandler;
+
+   @Inject
+   public VAppHandler(TaskHandler taskHandler, VmHandler vmHandler,
+            VCloudNetworkSectionHandler networkSectionHandler) {
+      this.taskHandler = taskHandler;
+      this.vmHandler = vmHandler;
+      this.networkSectionHandler = networkSectionHandler;
+   }
+
+   protected StringBuilder currentText = new StringBuilder();
+
+   protected ReferenceType template;
+   protected Status status;
+   protected ReferenceType vdc;
+   protected String description;
+   protected List<Task> tasks = Lists.newArrayList();
+   protected boolean ovfDescriptorUploaded = true;
+
+   private boolean inChildren;
+   private boolean inTasks;
+   private boolean inNetworkSection;
+   protected Set<Vm> children = Sets.newLinkedHashSet();
+   private VCloudNetworkSection networkSection;
+
+   public VApp getResult() {
+      return new VAppImpl(template.getName(), template.getType(), template.getHref(), status, vdc, description, tasks,
+            ovfDescriptorUploaded, children, networkSection);
+   }
+
+   protected int depth = 0;
+
+   @Override
+   public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      depth++;
+      if (depth == 2) {
+         if (equalsOrSuffix(qName, "Children")) {
+            inChildren = true;
+         } else if (equalsOrSuffix(qName, "Tasks")) {
+            inTasks = true;
+         } else if (equalsOrSuffix(qName, "NetworkSection")) {
+            inNetworkSection = true;
+         }
+      }
+      if (inChildren) {
+         vmHandler.startElement(uri, localName, qName, attrs);
+      } else if (inTasks) {
+         taskHandler.startElement(uri, localName, qName, attrs);
+      } else if (inNetworkSection) {
+         networkSectionHandler.startElement(uri, localName, qName, attrs);
+      } else if (equalsOrSuffix(qName, "VApp")) {
+         template = newReferenceType(attributes);
+         if (attributes.containsKey("status"))
+            this.status = Status.fromValue(Integer.parseInt(attributes.get("status")));
+      } else if (equalsOrSuffix(qName, "Link") && "up".equals(attributes.get("rel"))) {
+         vdc = newReferenceType(attributes);
+      }
+
+   }
+
+   public void endElement(String uri, String name, String qName) {
+      depth--;
+      if (depth == 1) {
+         if (equalsOrSuffix(qName, "Children")) {
+            inChildren = false;
+            this.children.add(vmHandler.getResult());
+         } else if (equalsOrSuffix(qName, "Tasks")) {
+            inTasks = false;
+            this.tasks.add(taskHandler.getResult());
+         } else if (equalsOrSuffix(qName, "Description")) {
+            description = SaxUtils.currentOrNull(currentText);
+         } else if (equalsOrSuffix(qName, "NetworkSection")) {
+            inNetworkSection = false;
+            this.networkSection = networkSectionHandler.getResult();
+         }
+      }
+      if (inChildren) {
+         vmHandler.endElement(uri, name, qName);
+      } else if (inTasks) {
+         taskHandler.endElement(uri, name, qName);
+      } else if (inNetworkSection) {
+         networkSectionHandler.endElement(uri, name, qName);
+      } else if (equalsOrSuffix(qName, "ovfDescriptorUploaded")) {
+         ovfDescriptorUploaded = Boolean.parseBoolean(SaxUtils.currentOrNull(currentText));
+      }
+      currentText = new StringBuilder();
+   }
+
+   public void characters(char ch[], int start, int length) {
+      if (inTasks)
+         taskHandler.characters(ch, start, length);
+      else if (inChildren)
+         vmHandler.characters(ch, start, length);
+      else if (inNetworkSection)
+         networkSectionHandler.characters(ch, start, length);
+      else
+         currentText.append(ch, start, length);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VAppTemplateHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VAppTemplateHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VAppTemplateHandler.java
new file mode 100755
index 0000000..b9c6807
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VAppTemplateHandler.java
@@ -0,0 +1,152 @@
+/*
+ * 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.jclouds.vcloud.xml;
+
+import static org.jclouds.util.SaxUtils.equalsOrSuffix;
+import static org.jclouds.vcloud.util.Utils.newReferenceType;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.Status;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.VAppTemplate;
+import org.jclouds.vcloud.domain.Vm;
+import org.jclouds.vcloud.domain.internal.VAppTemplateImpl;
+import org.jclouds.vcloud.domain.ovf.VCloudNetworkSection;
+import org.jclouds.vcloud.xml.ovf.VCloudNetworkSectionHandler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+/**
+ * @author Adrian Cole
+ */
+public class VAppTemplateHandler extends ParseSax.HandlerWithResult<VAppTemplate> {
+
+   protected final TaskHandler taskHandler;
+   protected final VmHandler vmHandler;
+   protected final VCloudNetworkSectionHandler networkSectionHandler;
+
+   @Inject
+   public VAppTemplateHandler(TaskHandler taskHandler, VmHandler vmHandler,
+            VCloudNetworkSectionHandler networkSectionHandler) {
+      this.taskHandler = taskHandler;
+      this.vmHandler = vmHandler;
+      this.networkSectionHandler = networkSectionHandler;
+   }
+
+   protected StringBuilder currentText = new StringBuilder();
+
+   protected ReferenceType template;
+   protected Status status;
+   protected ReferenceType vdc;
+   protected String description;
+   protected List<Task> tasks = Lists.newArrayList();
+   protected boolean ovfDescriptorUploaded = true;
+   protected String vAppScopedLocalId;
+
+   private boolean inChildren;
+   private boolean inTasks;
+   private boolean inNetworkSection;
+   protected Set<Vm> children = Sets.newLinkedHashSet();
+   private VCloudNetworkSection networkSection;
+
+   public VAppTemplate getResult() {
+      return new VAppTemplateImpl(template.getName(), template.getType(), template.getHref(), status, vdc, description,
+               tasks, ovfDescriptorUploaded, vAppScopedLocalId, children, networkSection);
+   }
+
+   @Override
+   public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      if (equalsOrSuffix(qName, "Children")) {
+         inChildren = true;
+      } else if (equalsOrSuffix(qName, "Tasks")) {
+         inTasks = true;
+      } else if (equalsOrSuffix(qName, "NetworkSection")) {
+         inNetworkSection = true;
+      }
+      if (inChildren) {
+         vmHandler.startElement(uri, localName, qName, attrs);
+      } else if (inTasks) {
+         taskHandler.startElement(uri, localName, qName, attrs);
+      } else if (inNetworkSection) {
+         networkSectionHandler.startElement(uri, localName, qName, attrs);
+      } else if (equalsOrSuffix(qName, "VAppTemplate")) {
+         template = newReferenceType(attributes);
+         if (attributes.containsKey("status"))
+            this.status = Status.fromValue(Integer.parseInt(attributes.get("status")));
+      } else if (equalsOrSuffix(qName, "Link") && "up".equals(attributes.get("rel"))) {
+         vdc = newReferenceType(attributes);
+      }
+
+   }
+
+   public void endElement(String uri, String name, String qName) {
+      if (equalsOrSuffix(qName, "Children")) {
+         inChildren = false;
+         Vm vm = vmHandler.getResult();
+         if (vm != null)
+            this.children.add(vmHandler.getResult());
+      } else if (equalsOrSuffix(qName, "Tasks")) {
+         inTasks = false;
+         this.tasks.add(taskHandler.getResult());
+      } else if (equalsOrSuffix(qName, "NetworkSection")) {
+         inNetworkSection = false;
+         this.networkSection = networkSectionHandler.getResult();
+      }
+      if (inChildren) {
+         vmHandler.endElement(uri, name, qName);
+      } else if (inTasks) {
+         taskHandler.endElement(uri, name, qName);
+      } else if (inNetworkSection) {
+         networkSectionHandler.endElement(uri, name, qName);
+      } else if (equalsOrSuffix(qName, "Description")) {
+         description = currentOrNull();
+      } else if (equalsOrSuffix(qName, "VAppScopedLocalId")) {
+         vAppScopedLocalId = currentOrNull();
+      } else if (equalsOrSuffix(qName, "ovfDescriptorUploaded")) {
+         ovfDescriptorUploaded = Boolean.parseBoolean(currentOrNull());
+      }
+      currentText = new StringBuilder();
+   }
+
+   public void characters(char ch[], int start, int length) {
+      if (inTasks)
+         taskHandler.characters(ch, start, length);
+      else if (inChildren)
+         vmHandler.characters(ch, start, length);
+      else if (inNetworkSection)
+         networkSectionHandler.characters(ch, start, length);
+      else
+         currentText.append(ch, start, length);
+   }
+
+   protected String currentOrNull() {
+      String returnVal = currentText.toString().trim();
+      return returnVal.equals("") ? null : returnVal;
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VCloudVirtualHardwareHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VCloudVirtualHardwareHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VCloudVirtualHardwareHandler.java
new file mode 100755
index 0000000..d8893d3
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VCloudVirtualHardwareHandler.java
@@ -0,0 +1,72 @@
+/*
+ * 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.jclouds.vcloud.xml;
+
+import static org.jclouds.vcloud.util.Utils.newReferenceType;
+
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.ovf.VirtualHardwareSection;
+import org.jclouds.ovf.xml.VirtualHardwareSectionHandler;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.ovf.VCloudVirtualHardwareSection;
+import org.xml.sax.Attributes;
+
+/**
+ * @author Adrian Cole
+ */
+public class VCloudVirtualHardwareHandler extends ParseSax.HandlerWithResult<VCloudVirtualHardwareSection> {
+
+   private final VirtualHardwareSectionHandler hardwareHandler;
+
+   private ReferenceType hardware;
+
+   @Inject
+   public VCloudVirtualHardwareHandler(VirtualHardwareSectionHandler hardwareHandler) {
+      this.hardwareHandler = hardwareHandler;
+   }
+
+   public VCloudVirtualHardwareSection getResult() {
+      VirtualHardwareSection hardware = hardwareHandler.getResult();
+      return new VCloudVirtualHardwareSection(this.hardware.getType(), this.hardware.getHref(), hardware.getInfo(), hardware
+                        .getTransports(), hardware.getSystem(), hardware.getItems());
+   }
+
+   public void startElement(String uri, String localName, String qName, Attributes attrs) {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      if (qName.endsWith("VirtualHardwareSection")) {
+         hardware = newReferenceType(attributes);
+      }
+      hardwareHandler.startElement(uri, localName, qName, attrs);
+   }
+
+   @Override
+   public void endElement(String uri, String localName, String qName) {
+      hardwareHandler.endElement(uri, localName, qName);
+
+   }
+
+   @Override
+   public void characters(char ch[], int start, int length) {
+      hardwareHandler.characters(ch, start, length);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VDCHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VDCHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VDCHandler.java
new file mode 100755
index 0000000..ba67c93
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VDCHandler.java
@@ -0,0 +1,167 @@
+/*
+ * 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.jclouds.vcloud.xml;
+
+import static org.jclouds.vcloud.util.Utils.newReferenceType;
+import static org.jclouds.vcloud.util.Utils.putReferenceType;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.AllocationModel;
+import org.jclouds.vcloud.domain.Capacity;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.VDC;
+import org.jclouds.vcloud.domain.VDCStatus;
+import org.jclouds.vcloud.domain.internal.VDCImpl;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+/**
+ * @author Adrian Cole
+ */
+public class VDCHandler extends ParseSax.HandlerWithResult<VDC> {
+
+   protected final TaskHandler taskHandler;
+
+   @Inject
+   public VDCHandler(TaskHandler taskHandler) {
+      this.taskHandler = taskHandler;
+   }
+
+   protected StringBuilder currentText = new StringBuilder();
+
+   protected ReferenceType vDC;
+   protected VDCStatus status = VDCStatus.READY;
+   protected ReferenceType org;
+   protected String description;
+   protected List<Task> tasks = Lists.newArrayList();
+   protected AllocationModel allocationModel = AllocationModel.UNRECOGNIZED;
+
+   protected Capacity storageCapacity;
+   protected Capacity cpuCapacity;
+   protected Capacity memoryCapacity;
+
+   protected String units;
+   protected long allocated = 0;
+   protected long limit = 0;
+   protected int used = 0;
+   protected long overhead = 0;
+
+   protected Map<String, ReferenceType> resourceEntities = Maps.newLinkedHashMap();
+   protected Map<String, ReferenceType> availableNetworks = Maps.newLinkedHashMap();
+
+   protected int nicQuota;
+   protected int networkQuota;
+   protected int vmQuota;
+   protected boolean isEnabled = true;
+
+   public VDC getResult() {
+      return new VDCImpl(vDC.getName(), vDC.getType(), vDC.getHref(), status, org, description, tasks, allocationModel,
+               storageCapacity, cpuCapacity, memoryCapacity, resourceEntities, availableNetworks, nicQuota,
+               networkQuota, vmQuota, isEnabled);
+   }
+
+   void resetCapacity() {
+      units = null;
+      allocated = 0;
+      limit = 0;
+      used = 0;
+      overhead = 0;
+   }
+
+   @Override
+   public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      if (qName.endsWith("Vdc")) {
+         vDC = newReferenceType(attributes);
+         String status = attributes.get("status");
+         if (status != null)
+            this.status = VDCStatus.fromValue(Integer.parseInt(status));
+      } else if (qName.endsWith("Network")) {
+         putReferenceType(availableNetworks, attributes);
+      } else if (qName.endsWith("ResourceEntity")) {
+         putReferenceType(resourceEntities, attributes);
+      } else if (qName.endsWith("Link") && "up".equals(attributes.get("rel"))) {
+         org = newReferenceType(attributes);
+      } else {
+         taskHandler.startElement(uri, localName, qName, attrs);
+      }
+
+   }
+
+   public void endElement(String uri, String name, String qName) {
+      taskHandler.endElement(uri, name, qName);
+      if (qName.endsWith("Task")) {
+         this.tasks.add(taskHandler.getResult());
+      } else if (qName.endsWith("Description")) {
+         description = currentOrNull();
+      } else if (qName.endsWith("AllocationModel")) {
+         allocationModel = AllocationModel.fromValue(currentOrNull());
+      } else if (qName.endsWith("Units")) {
+         units = currentOrNull();
+      } else if (qName.endsWith("Allocated")) {
+         allocated = Integer.parseInt(currentOrNull());
+      } else if (qName.endsWith("Used")) {
+         used = Integer.parseInt(currentOrNull());
+      } else if (qName.endsWith("Limit")) {
+         limit = Integer.parseInt(currentOrNull());
+      } else if (qName.endsWith("Overhead")) {
+         overhead = Integer.parseInt(currentOrNull());
+      } else if (qName.endsWith("StorageCapacity")) {
+         storageCapacity = new Capacity(units, allocated, limit, used, overhead);
+         resetCapacity();
+      } else if (qName.endsWith("Cpu")) {
+         cpuCapacity = new Capacity(units, allocated, limit, used, overhead);
+         resetCapacity();
+      } else if (qName.endsWith("Memory")) {
+         memoryCapacity = new Capacity(units, allocated, limit, used, overhead);
+         resetCapacity();
+      } else if (qName.endsWith("DeployedVmsQuota")) {
+         vmQuota = (int) limit;
+         // vcloud express doesn't have the zero is unlimited rule
+         if (vmQuota == -1)
+            vmQuota = 0;
+      } else if (qName.endsWith("VmQuota")) {
+         vmQuota = Integer.parseInt(currentOrNull());
+      } else if (qName.endsWith("NicQuota")) {
+         nicQuota = Integer.parseInt(currentOrNull());
+      } else if (qName.endsWith("NetworkQuota")) {
+         networkQuota = Integer.parseInt(currentOrNull());
+      } else if (qName.endsWith("IsEnabled")) {
+         isEnabled = Boolean.parseBoolean(currentOrNull());
+      }
+      currentText = new StringBuilder();
+   }
+
+   public void characters(char ch[], int start, int length) {
+      currentText.append(ch, start, length);
+   }
+
+   protected String currentOrNull() {
+      String returnVal = currentText.toString().trim();
+      return returnVal.equals("") ? null : returnVal;
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VmHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VmHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VmHandler.java
new file mode 100755
index 0000000..1cad0ad
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/VmHandler.java
@@ -0,0 +1,178 @@
+/*
+ * 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.jclouds.vcloud.xml;
+
+import static org.jclouds.vcloud.util.Utils.newReferenceType;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.GuestCustomizationSection;
+import org.jclouds.vcloud.domain.NetworkConnectionSection;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.Status;
+import org.jclouds.vcloud.domain.Task;
+import org.jclouds.vcloud.domain.Vm;
+import org.jclouds.vcloud.domain.internal.VmImpl;
+import org.jclouds.vcloud.domain.ovf.VCloudOperatingSystemSection;
+import org.jclouds.vcloud.domain.ovf.VCloudVirtualHardwareSection;
+import org.jclouds.vcloud.xml.ovf.VCloudOperatingSystemHandler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import com.google.common.collect.Lists;
+
+/**
+ * @author Adrian Cole
+ */
+public class VmHandler extends ParseSax.HandlerWithResult<Vm> {
+
+   protected final TaskHandler taskHandler;
+   protected final VCloudVirtualHardwareHandler virtualHardwareHandler;
+   protected final VCloudOperatingSystemHandler operatingSystemHandler;
+   protected final GuestCustomizationSectionHandler guestCustomizationHandler;
+   protected final NetworkConnectionSectionHandler networkConnectionSectionHandler;
+
+   @Inject
+   public VmHandler(TaskHandler taskHandler, VCloudVirtualHardwareHandler virtualHardwareHandler,
+            VCloudOperatingSystemHandler operatingSystemHandler,
+            NetworkConnectionSectionHandler networkConnectionSectionHandler,
+            GuestCustomizationSectionHandler guestCustomizationHandler) {
+      this.taskHandler = taskHandler;
+      this.virtualHardwareHandler = virtualHardwareHandler;
+      this.operatingSystemHandler = operatingSystemHandler;
+      this.networkConnectionSectionHandler = networkConnectionSectionHandler;
+      this.guestCustomizationHandler = guestCustomizationHandler;
+   }
+
+   protected StringBuilder currentText = new StringBuilder();
+
+   protected ReferenceType vm;
+   protected Status status;
+   protected ReferenceType vdc;
+   protected String description;
+   protected List<Task> tasks = Lists.newArrayList();
+   protected VCloudVirtualHardwareSection hardware;
+   protected VCloudOperatingSystemSection os;
+   protected NetworkConnectionSection networkConnectionSection;
+   protected GuestCustomizationSection guestCustomization;
+   protected String vAppScopedLocalId;
+
+   private boolean inTasks;
+   private boolean inHardware;
+   private boolean inOs;
+   private boolean inNetworkConnectionSection;
+   private boolean inGuestCustomization;
+
+   public Vm getResult() {
+      return vm == null ? null : new VmImpl(vm.getName(), vm.getType(), vm.getHref(), status, vdc, description, tasks,
+               hardware, os, networkConnectionSection, guestCustomization, vAppScopedLocalId);
+   }
+
+   @Override
+   public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      if (qName.endsWith("VirtualHardwareSection")) {
+         inHardware = true;
+      } else if (qName.endsWith("OperatingSystemSection")) {
+         inOs = true;
+      } else if (qName.endsWith("GuestCustomizationSection")) {
+         inGuestCustomization = true;
+      } else if (qName.endsWith("NetworkConnectionSection")) {
+         inNetworkConnectionSection = true;
+      } else if (qName.endsWith("Tasks")) {
+         inTasks = true;
+      }
+      if (inHardware) {
+         virtualHardwareHandler.startElement(uri, localName, qName, attrs);
+      } else if (inOs) {
+         operatingSystemHandler.startElement(uri, localName, qName, attrs);
+      } else if (inNetworkConnectionSection) {
+         networkConnectionSectionHandler.startElement(uri, localName, qName, attrs);
+      } else if (inGuestCustomization) {
+         guestCustomizationHandler.startElement(uri, localName, qName, attrs);
+      } else if (inTasks) {
+         taskHandler.startElement(uri, localName, qName, attrs);
+      } else if (SaxUtils.equalsOrSuffix(qName, "Vm")) {
+         vm = newReferenceType(attributes);
+         String status = attributes.get("status");
+         if (status != null)
+            this.status = Status.fromValue(Integer.parseInt(status));
+      } else if (SaxUtils.equalsOrSuffix(qName, "Link") && "up".equals(attributes.get("rel"))) {
+         vdc = newReferenceType(attributes);
+      }
+   }
+
+   public void endElement(String uri, String name, String qName) {
+      if (qName.endsWith("VirtualHardwareSection")) {
+         inHardware = false;
+         this.hardware = virtualHardwareHandler.getResult();
+      } else if (qName.endsWith("OperatingSystemSection")) {
+         inOs = false;
+         os = operatingSystemHandler.getResult();
+      } else if (qName.endsWith("NetworkConnectionSection")) {
+         inNetworkConnectionSection = false;
+         networkConnectionSection = networkConnectionSectionHandler.getResult();
+      } else if (qName.endsWith("GuestCustomizationSection")) {
+         inGuestCustomization = false;
+         guestCustomization = guestCustomizationHandler.getResult();
+      } else if (qName.endsWith("Tasks")) {
+         inTasks = false;
+         this.tasks.add(taskHandler.getResult());
+      }
+      if (inHardware) {
+         virtualHardwareHandler.endElement(uri, name, qName);
+      } else if (inOs) {
+         operatingSystemHandler.endElement(uri, name, qName);
+      } else if (inGuestCustomization) {
+         guestCustomizationHandler.endElement(uri, name, qName);
+      } else if (inNetworkConnectionSection) {
+         networkConnectionSectionHandler.endElement(uri, name, qName);
+      } else if (inTasks) {
+         taskHandler.endElement(uri, name, qName);
+      } else if (SaxUtils.equalsOrSuffix(qName, "Description")) {
+         description = currentOrNull();
+      } else if (SaxUtils.equalsOrSuffix(qName, "VAppScopedLocalId")) {
+         vAppScopedLocalId = currentOrNull();
+      }
+      currentText = new StringBuilder();
+   }
+
+   public void characters(char ch[], int start, int length) {
+      if (inHardware)
+         virtualHardwareHandler.characters(ch, start, length);
+      else if (inOs)
+         operatingSystemHandler.characters(ch, start, length);
+      else if (inGuestCustomization)
+         guestCustomizationHandler.characters(ch, start, length);
+      else if (inNetworkConnectionSection)
+         networkConnectionSectionHandler.characters(ch, start, length);
+      else if (inTasks)
+         taskHandler.characters(ch, start, length);
+      else
+         currentText.append(ch, start, length);
+   }
+
+   protected String currentOrNull() {
+      String returnVal = currentText.toString().trim();
+      return returnVal.equals("") ? null : returnVal;
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudNetworkSectionHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudNetworkSectionHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudNetworkSectionHandler.java
new file mode 100755
index 0000000..e26af7c
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudNetworkSectionHandler.java
@@ -0,0 +1,69 @@
+/*
+ * 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.jclouds.vcloud.xml.ovf;
+
+import static org.jclouds.util.SaxUtils.equalsOrSuffix;
+
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.ovf.NetworkSection;
+import org.jclouds.ovf.xml.NetworkSectionHandler;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.ovf.VCloudNetworkSection;
+import org.jclouds.vcloud.util.Utils;
+import org.xml.sax.Attributes;
+
+/**
+ * @author Adrian Cole
+ */
+public class VCloudNetworkSectionHandler extends ParseSax.HandlerWithResult<VCloudNetworkSection> {
+   private final NetworkSectionHandler networkSectionHandler;
+
+   @Inject
+   VCloudNetworkSectionHandler(NetworkSectionHandler networkSectionHandler) {
+      this.networkSectionHandler = networkSectionHandler;
+   }
+
+   private ReferenceType net;
+
+   public VCloudNetworkSection getResult() {
+      NetworkSection system = networkSectionHandler.getResult();
+      return new VCloudNetworkSection(net.getType(), net.getHref(), system.getInfo(), system.getNetworks());
+   }
+
+   public void startElement(String uri, String localName, String qName, Attributes attrs) {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      if (equalsOrSuffix(qName, "NetworkSection")) {
+         this.net = Utils.newReferenceType(attributes);
+      }
+      networkSectionHandler.startElement(uri, localName, qName, attrs);
+   }
+
+   @Override
+   public void endElement(String uri, String localName, String qName) {
+      networkSectionHandler.endElement(uri, localName, qName);
+   }
+
+   public void characters(char ch[], int start, int length) {
+      networkSectionHandler.characters(ch, start, length);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudOperatingSystemHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudOperatingSystemHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudOperatingSystemHandler.java
new file mode 100755
index 0000000..981388e
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudOperatingSystemHandler.java
@@ -0,0 +1,81 @@
+/*
+ * 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.jclouds.vcloud.xml.ovf;
+
+import static org.jclouds.vcloud.util.Utils.newReferenceType;
+
+import java.util.Map;
+
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.ovf.VCloudOperatingSystemSection;
+import org.jclouds.vcloud.util.Utils;
+import org.xml.sax.Attributes;
+
+/**
+ * @author Adrian Cole
+ */
+public class VCloudOperatingSystemHandler extends ParseSax.HandlerWithResult<VCloudOperatingSystemSection> {
+   private StringBuilder currentText = new StringBuilder();
+
+   protected ReferenceType os;
+   protected Integer id;
+   protected String info;
+   protected String vmwOsType;
+   protected String description;
+   protected ReferenceType edit;
+
+   public VCloudOperatingSystemSection getResult() {
+      VCloudOperatingSystemSection system = new VCloudOperatingSystemSection(id, info, description, os.getType(), os.getHref(),
+               vmwOsType, edit);
+      os = null;
+      id = null;
+      info = null;
+      vmwOsType = null;
+      description = null;
+      edit = null;
+      return system;
+   }
+
+   @Override
+   public void startElement(String uri, String localName, String qName, Attributes attrs) {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      if (qName.endsWith("Link")) {
+         this.edit = Utils.newReferenceType(attributes);
+      } else if (qName.endsWith("OperatingSystemSection")) {
+         os = newReferenceType(attributes);
+         vmwOsType = attributes.get("osType");
+         if (attributes.containsKey("id"))
+            this.id = Integer.parseInt(attributes.get("id"));
+      }
+   }
+
+   @Override
+   public void endElement(String uri, String localName, String qName) {
+      if (qName.endsWith("Info")) {
+         this.info = currentText.toString().trim();
+      } else if (qName.endsWith("Description")) {
+         this.description = currentText.toString().trim();
+      }
+      currentText = new StringBuilder();
+   }
+
+   public void characters(char ch[], int start, int length) {
+      currentText.append(ch, start, length);
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudResourceAllocationSettingDataHandler.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudResourceAllocationSettingDataHandler.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudResourceAllocationSettingDataHandler.java
new file mode 100755
index 0000000..85d9d8b
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/java/org/jclouds/vcloud/xml/ovf/VCloudResourceAllocationSettingDataHandler.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.vcloud.xml.ovf;
+
+import java.util.Map;
+
+import org.jclouds.cim.ResourceAllocationSettingData;
+import org.jclouds.cim.xml.ResourceAllocationSettingDataHandler;
+import org.jclouds.util.SaxUtils;
+import org.jclouds.vcloud.domain.ReferenceType;
+import org.jclouds.vcloud.domain.ovf.EditableResourceAllocationSettingData;
+import org.jclouds.vcloud.domain.ovf.VCloudHardDisk;
+import org.jclouds.vcloud.domain.ovf.VCloudNetworkAdapter;
+import org.jclouds.vcloud.util.Utils;
+import org.xml.sax.Attributes;
+
+/**
+ * @author Adrian Cole
+ */
+public class VCloudResourceAllocationSettingDataHandler extends ResourceAllocationSettingDataHandler {
+
+   private ReferenceType edit;
+
+   private long capacity;
+   private int busType;
+   private String busSubType;
+
+   private String ipAddress;
+   private boolean primaryNetworkConnection;
+   private String ipAddressingMode;
+
+   public ResourceAllocationSettingData getResult() {
+      try {
+         ResourceAllocationSettingData from = super.getResult();
+         if (edit != null) {
+            return EditableResourceAllocationSettingData.builder().fromResourceAllocationSettingData(from).edit(edit)
+                     .build();
+         } else if (busSubType != null) {
+            return VCloudHardDisk.builder().fromResourceAllocationSettingData(from).capacity(capacity).busType(busType)
+                     .busSubType(busSubType).build();
+         } else if (ipAddress != null) {
+            return VCloudNetworkAdapter.builder().fromResourceAllocationSettingData(from).ipAddress(ipAddress)
+                     .primaryNetworkConnection(primaryNetworkConnection).ipAddressingMode(ipAddressingMode).build();
+         } else {
+            return from;
+         }
+      } finally {
+         ipAddress = null;
+         primaryNetworkConnection = false;
+         ipAddressingMode = null;
+         capacity = -1;
+         busType = -1;
+         busSubType = null;
+         edit = null;
+      }
+   }
+
+   @Override
+   public void startElement(String uri, String localName, String qName, Attributes attrs) {
+      Map<String, String> attributes = SaxUtils.cleanseAttributes(attrs);
+      if (qName.endsWith("Link")) {
+         this.edit = Utils.newReferenceType(attributes);
+      } else if (qName.endsWith("HostResource") && attributes.size() > 0) {
+         capacity = Long.parseLong(attributes.get("capacity"));
+         busType = Integer.parseInt(attributes.get("busType"));
+         busSubType = attributes.get("busSubType");
+      } else if (qName.endsWith("Connection") && attributes.size() > 0) {
+         ipAddress = attributes.get("ipAddress");
+         primaryNetworkConnection = Boolean.parseBoolean(attributes.get("primaryNetworkConnection"));
+         ipAddressingMode = attributes.get("ipAddressingMode");
+      }
+      super.startElement(uri, localName, qName, attrs);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
new file mode 100755
index 0000000..d800a94
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata
@@ -0,0 +1 @@
+org.jclouds.vcloud.VCloudApiMetadata
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudApiMetadataTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudApiMetadataTest.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudApiMetadataTest.java
new file mode 100755
index 0000000..7840801
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudApiMetadataTest.java
@@ -0,0 +1,32 @@
+/*
+ * 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.jclouds.vcloud;
+
+import org.jclouds.compute.internal.BaseComputeServiceApiMetadataTest;
+import org.testng.annotations.Test;
+
+/**
+ * 
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", testName = "VCloudApiMetadataTest")
+public class VCloudApiMetadataTest extends BaseComputeServiceApiMetadataTest {
+
+   public VCloudApiMetadataTest() {
+      super(new VCloudApiMetadata());
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudApiTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudApiTest.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudApiTest.java
new file mode 100755
index 0000000..9578c64
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudApiTest.java
@@ -0,0 +1,64 @@
+/*
+ * 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.jclouds.vcloud;
+
+import java.io.IOException;
+import java.util.concurrent.ExecutionException;
+
+import org.jclouds.vcloud.internal.BaseVCloudApiTest;
+import org.jclouds.vcloud.utils.TestUtils;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+/**
+ * Tests behavior of {@code VCloudApi}
+ * 
+ * @author Adrian Cole
+ */
+// NOTE:without testName, this will not call @Before* and fail w/NPE during
+// surefire
+@Test(groups = "unit", testName = "VCloudApiTest")
+public class VCloudApiTest extends BaseVCloudApiTest<VCloudApi> {
+
+   private VCloudApi syncClient;
+
+   public void testSync() throws SecurityException, NoSuchMethodException, InterruptedException, ExecutionException {
+      assert syncClient.getVAppApi() != null;
+      assert syncClient.getCatalogApi() != null;
+      assert syncClient.getVmApi() != null;
+      assert syncClient.getVAppTemplateApi() != null;
+      assert syncClient.getTaskApi() != null;
+      assert syncClient.getVDCApi() != null;
+      assert syncClient.getNetworkApi() != null;
+      assert syncClient.getOrgApi() != null;
+   }
+
+   @BeforeClass
+   @Override
+   protected void setupFactory() throws IOException {
+      super.setupFactory();
+      syncClient = injector.getInstance(VCloudApi.class);
+   }
+
+   @DataProvider
+   public Object[][] ignoreOnWindows() {
+      return TestUtils.isWindowsOs() ? TestUtils.NO_INVOCATIONS
+                                     : TestUtils.SINGLE_NO_ARG_INVOCATION;
+   }
+   
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudSessionRefreshLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudSessionRefreshLiveTest.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudSessionRefreshLiveTest.java
new file mode 100755
index 0000000..7c1221d
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudSessionRefreshLiveTest.java
@@ -0,0 +1,41 @@
+/*
+ * 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.jclouds.vcloud;
+
+import org.jclouds.vcloud.internal.BaseVCloudApiLiveTest;
+import org.testng.annotations.Test;
+
+/**
+ * Tests session refresh works
+ * 
+ * @author Adrian Cole
+ */
+@Test(groups = "live", singleThreaded = true)
+public class VCloudSessionRefreshLiveTest extends BaseVCloudApiLiveTest {
+
+   private static final int timeOut = 40;
+
+   @Test
+   public void testSessionRefresh() throws Exception {
+      VCloudApi connection = view.unwrapApi(VCloudApi.class);
+
+      connection.getOrgApi().findOrgNamed(null);
+      Thread.sleep(timeOut * 1000);
+      connection.getOrgApi().findOrgNamed(null);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudVersionsApiTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudVersionsApiTest.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudVersionsApiTest.java
new file mode 100755
index 0000000..3df78b6
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/VCloudVersionsApiTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.jclouds.vcloud;
+import static org.jclouds.reflect.Reflection2.method;
+import static org.testng.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.functions.ParseSax;
+import org.jclouds.providers.AnonymousProviderMetadata;
+import org.jclouds.providers.ProviderMetadata;
+import org.jclouds.rest.internal.BaseAsyncClientTest;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.jclouds.vcloud.xml.SupportedVersionsHandler;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.reflect.Invokable;
+
+/**
+ * Tests behavior of {@code VCloudVersionsApi}
+ * 
+ * @author Adrian Cole
+ */
+// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
+@Test(groups = "unit", testName = "VCloudVersionsApiTest")
+public class VCloudVersionsApiTest extends BaseAsyncClientTest<VCloudVersionsApi> {
+
+   public void testVersions() throws SecurityException, NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(VCloudVersionsApi.class, "getSupportedVersions");
+      GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.of());
+
+      assertEquals(request.getRequestLine(), "GET http://localhost:8080/versions HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, "");
+      assertPayloadEquals(request, null, null, false);
+
+      assertResponseParserClassEquals(method, request, ParseSax.class);
+      assertSaxResponseParserClassEquals(method, SupportedVersionsHandler.class);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   @Override
+   protected void checkFilters(HttpRequest request) {
+      assertEquals(request.getFilters().size(), 0);
+   }
+
+   @Override
+   protected ProviderMetadata createProviderMetadata() {
+      return AnonymousProviderMetadata.forApiOnEndpoint(VCloudVersionsApi.class,
+            "http://localhost:8080");
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/binders/BindCatalogItemToXmlPayloadTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/binders/BindCatalogItemToXmlPayloadTest.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/binders/BindCatalogItemToXmlPayloadTest.java
new file mode 100755
index 0000000..93ea7cb
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/binders/BindCatalogItemToXmlPayloadTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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.jclouds.vcloud.binders;
+
+import static org.testng.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.jclouds.vcloud.internal.BasePayloadTest;
+import org.jclouds.vcloud.options.CatalogItemOptions;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Tests behavior of {@code BindCatalogItemToXmlPayload}
+ * 
+ * @author Adrian Cole
+ */
+@Test(groups = "unit")
+public class BindCatalogItemToXmlPayloadTest extends BasePayloadTest {
+   
+   public void testDefault() throws IOException {
+      String expected = "<CatalogItem xmlns=\"http://www.vmware.com/vcloud/v1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" name=\"myname\" xsi:schemaLocation=\"http://www.vmware.com/vcloud/v1 http://vcloud.safesecureweb.com/ns/vcloud.xsd\"><Description>mydescription</Description><Entity href=\"http://fooentity\"/><Property key=\"foo\">bar</Property></CatalogItem>";
+
+      CatalogItemOptions options = CatalogItemOptions.Builder.description("mydescription").properties(
+            ImmutableMap.of("foo", "bar"));
+      GeneratedHttpRequest request = requestForArgs(ImmutableList.<Object> of(options));
+
+      BindCatalogItemToXmlPayload binder = injector.getInstance(BindCatalogItemToXmlPayload.class);
+
+      Map<String, Object> map = ImmutableMap.<String, Object> of("name", "myname", "Entity", "http://fooentity");
+
+      assertEquals(binder.bindToRequest(request, map).getPayload().getRawContent(), expected);
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/4cbbd29e/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayloadTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayloadTest.java b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayloadTest.java
new file mode 100755
index 0000000..6fbcd8d
--- /dev/null
+++ b/dependencies/jclouds/vcloud/1.7.1-stratos/src/test/java/org/jclouds/vcloud/binders/BindCloneVAppParamsToXmlPayloadTest.java
@@ -0,0 +1,81 @@
+/*
+ * 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.jclouds.vcloud.binders;
+
+import static org.testng.Assert.assertEquals;
+
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.jclouds.util.Strings2;
+import org.jclouds.vcloud.internal.BasePayloadTest;
+import org.jclouds.vcloud.options.CloneVAppOptions;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+
+/**
+ * Tests behavior of {@code BindCloneVAppParamsToXmlPayload}
+ * 
+ * @author Adrian Cole
+ */
+@Test(groups = "unit")
+public class BindCloneVAppParamsToXmlPayloadTest extends BasePayloadTest {
+   
+   public void testWithDescriptionDeployOn() throws Exception {
+      String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/copyVApp.xml"));
+
+      CloneVAppOptions options = new CloneVAppOptions().deploy().powerOn().description(
+               "The description of the new vApp");
+      GeneratedHttpRequest request = requestForArgs(ImmutableList.<Object> of(options));
+      
+      BindCloneVAppParamsToXmlPayload binder = injector.getInstance(BindCloneVAppParamsToXmlPayload.class);
+
+      Builder<String, Object> map = ImmutableMap.builder();
+      map.put("name", "new-linux-server");
+      map.put("Source", "https://vcenterprise.bluelock.com/api/v1.0/vapp/201");
+      assertEquals(binder.bindToRequest(request, map.build()).getPayload().getRawContent(), expected);
+   }
+
+   public void testWithDescriptionDeployOnSourceDelete() throws Exception {
+      String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/moveVApp.xml"));
+
+      CloneVAppOptions options = new CloneVAppOptions().deploy().powerOn().description(
+               "The description of the new vApp");
+      GeneratedHttpRequest request = requestForArgs(ImmutableList.<Object> of(options));
+
+      BindCloneVAppParamsToXmlPayload binder = injector.getInstance(BindCloneVAppParamsToXmlPayload.class);
+
+      Builder<String, Object> map = ImmutableMap.builder();
+      map.put("name", "new-linux-server");
+      map.put("Source", "https://vcenterprise.bluelock.com/api/v1.0/vapp/201");
+      map.put("IsSourceDelete", "true");
+      assertEquals(binder.bindToRequest(request, map.build()).getPayload().getRawContent(), expected);
+   }
+
+   public void testDefault() throws Exception {
+      String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/copyVApp-default.xml"));
+      GeneratedHttpRequest request = requestForArgs(ImmutableList.<Object> of());
+
+      BindCloneVAppParamsToXmlPayload binder = injector.getInstance(BindCloneVAppParamsToXmlPayload.class);
+
+      Builder<String, Object> map = ImmutableMap.builder();
+      map.put("name", "my-vapp");
+      map.put("Source", "https://vcenterprise.bluelock.com/api/v1.0/vapp/4181");
+      assertEquals(binder.bindToRequest(request, map.build()).getPayload().getRawContent(), expected);
+   }
+}