Account Options

  1. Sign in
The old Google Groups will be going away soon.
Switch to the new Google Groups.
Google Groups Home
« Groups Home
r347 committed - support for resource tagging and request filtering. Also, import keypa...
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  1 message - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
typ...@googlecode.com  
View profile  
 More options Jun 22 2011, 9:04 am
From: typ...@googlecode.com
Date: Wed, 22 Jun 2011 13:04:40 +0000
Local: Wed, Jun 22 2011 9:04 am
Subject: [typica] r347 committed - support for resource tagging and request filtering. Also, import keypa...
Revision: 347
Author:   dkavanagh
Date:     Wed Jun 22 06:03:24 2011
Log:      support for resource tagging and request filtering. Also, import  
keypair

http://code.google.com/p/typica/source/detail?r=347

Added:
  /trunk/java/com/xerox/amazonws/ec2/TagInfo.java
Modified:
  /trunk/java/com/xerox/amazonws/ec2/ImageDescription.java
  /trunk/java/com/xerox/amazonws/ec2/Jec2.java
  /trunk/java/com/xerox/amazonws/ec2/ProductDescription.java
  /trunk/java/com/xerox/amazonws/ec2/ReservationDescription.java
  /trunk/java/com/xerox/amazonws/ec2/ReservedInstances.java
  /trunk/java/com/xerox/amazonws/ec2/SnapshotInfo.java
  /trunk/java/com/xerox/amazonws/ec2/SpotInstanceRequest.java
  /trunk/java/com/xerox/amazonws/ec2/VolumeInfo.java
  /trunk/xsd/ec2.xsd

=======================================
--- /dev/null
+++ /trunk/java/com/xerox/amazonws/ec2/TagInfo.java     Wed Jun 22 06:03:24 2011
@@ -0,0 +1,58 @@
+//
+// typica - A client library for Amazon Web Services
+// Copyright (C) 2007,2008 Xerox Corporation
+//
+// Licensed 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 com.xerox.amazonws.ec2;
+
+/**
+ * An instance of this class represents an EC2 Tag.
+ */
+public class TagInfo {
+       private String resourceId;
+       private String resourceType;
+       private String tagKey;
+       private String tagValue;
+
+       public TagInfo(String resourceId, String resourceType, String tagKey,  
String tagValue) {
+               this.resourceId = resourceId;
+               this.resourceType = resourceType;
+               this.tagKey = tagKey;
+               this.tagValue = tagValue;
+       }
+
+       public String getResourceId() {
+               return resourceId;
+       }
+
+       public String getResourceType() {
+               return resourceType;
+       }
+
+       public String getTagKey() {
+               return tagKey;
+       }
+
+       public String getTagValue() {
+               return tagValue;
+       }
+
+       public String toString() {
+               return "Tag[resource=" + this.resourceId + ", type="
+                               + this.resourceType + ", key=" + this.tagKey
+                               + ", value=" + this.tagValue + "]";
+       }
+}
+
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/ImageDescription.java    Wed Jul 14  
10:15:41 2010
+++ /trunk/java/com/xerox/amazonws/ec2/ImageDescription.java    Wed Jun 22  
06:03:24 2011
@@ -18,6 +18,7 @@
  package com.xerox.amazonws.ec2;

  import java.util.List;
+import java.util.Map;

  /**
   * An instance of this class represents an AMI description.
@@ -46,13 +47,16 @@
        private String rootDeviceName;
        private List<BlockDeviceMapping> blockDeviceMapping;
        private String virtualizationType;
+       private Map<String, String> tagSet;
+       private String hypervisor;

        public ImageDescription(String id, String loc, String owner,
                        String state, Boolean isPublic, List<String> productCodes,
                        String architecture, String imageType, String kernelId, String  
ramdiskId,
                        String platform, String reason, String imageOwnerAlias, String name,
                        String description, String rootDeviceType, String rootDeviceName,
-                       List<BlockDeviceMapping> blockDeviceMapping, String virtualizationType)  
{
+                       List<BlockDeviceMapping> blockDeviceMapping, String virtualizationType,
+                       Map<String, String> tagSet, String hypervisor) {
                this.imageId = id;
                this.imageLocation = loc;
                this.imageOwnerId = owner;
@@ -72,6 +76,8 @@
                this.rootDeviceName = rootDeviceName;
                this.blockDeviceMapping = blockDeviceMapping;
                this.virtualizationType = virtualizationType;
+               this.tagSet = tagSet;
+               this.hypervisor = hypervisor;
        }

        public String getImageId() {
@@ -149,6 +155,14 @@
        public String getVirtualizationType() {
                return virtualizationType;
        }
+
+       public Map<String, String> getTagSet() {
+               return tagSet;
+       }
+
+       public String getHypervisor() {
+               return hypervisor;
+       }

        public String toString() {
                return "Image[ID=" + imageId + ", Loc=" + imageLocation + ", own="
@@ -158,7 +172,8 @@
                                + ramdiskId + ", platform=" + platform + ", reason="
                                + reason + ", imgOwnrAlias=" + imageOwnerAlias + ", name="
                                + name + ", descrip=" + description + ", rootDevType="
-                               + rootDeviceType + ", rootDevName=" + rootDeviceName + "]";
+                               + rootDeviceType + ", rootDevName=" + rootDeviceName
+                               + " hypervisor=" + hypervisor + "]";
        }
  }

=======================================
--- /trunk/java/com/xerox/amazonws/ec2/Jec2.java        Wed Jul 14 10:15:41 2010
+++ /trunk/java/com/xerox/amazonws/ec2/Jec2.java        Wed Jun 22 06:03:24 2011
@@ -61,6 +61,7 @@
  import com.xerox.amazonws.typica.jaxb.CreateKeyPairResponse;
  import com.xerox.amazonws.typica.jaxb.CreateSnapshotResponse;
  import  
com.xerox.amazonws.typica.jaxb.CreateSpotDatafeedSubscriptionResponse;
+import com.xerox.amazonws.typica.jaxb.CreateTagsResponse;
  import com.xerox.amazonws.typica.jaxb.CreateVolumeResponse;
  import com.xerox.amazonws.typica.jaxb.CreateVolumePermissionItemType;
  import com.xerox.amazonws.typica.jaxb.ConfirmProductInstanceResponse;
@@ -70,6 +71,7 @@
  import com.xerox.amazonws.typica.jaxb.DeleteSecurityGroupResponse;
  import com.xerox.amazonws.typica.jaxb.DeleteSnapshotResponse;
  import  
com.xerox.amazonws.typica.jaxb.DeleteSpotDatafeedSubscriptionResponse;
+import com.xerox.amazonws.typica.jaxb.DeleteTagsResponse;
  import com.xerox.amazonws.typica.jaxb.DeleteVolumeResponse;
  import com.xerox.amazonws.typica.jaxb.DeregisterImageResponse;
  import com.xerox.amazonws.typica.jaxb.DescribeAddressesResponse;
@@ -94,6 +96,7 @@
  import com.xerox.amazonws.typica.jaxb.DescribeSnapshotsSetItemResponseType;
  import  
com.xerox.amazonws.typica.jaxb.DescribeSpotDatafeedSubscriptionResponse;
  import com.xerox.amazonws.typica.jaxb.DescribeSpotInstanceRequestsResponse;
+import com.xerox.amazonws.typica.jaxb.DescribeTagsResponse;
  import com.xerox.amazonws.typica.jaxb.DescribeVolumesResponse;
  import com.xerox.amazonws.typica.jaxb.DescribeVolumesSetResponseType;
  import com.xerox.amazonws.typica.jaxb.DescribeVolumesSetItemResponseType;
@@ -110,6 +113,7 @@
  import com.xerox.amazonws.typica.jaxb.GetPasswordDataResponse;
  import com.xerox.amazonws.typica.jaxb.GroupItemType;
  import com.xerox.amazonws.typica.jaxb.GroupSetType;
+import com.xerox.amazonws.typica.jaxb.ImportKeyPairResponse;
  import com.xerox.amazonws.typica.jaxb.InstanceStateChangeSetType;
  import com.xerox.amazonws.typica.jaxb.InstanceStateChangeType;
  import com.xerox.amazonws.typica.jaxb.IpPermissionSetType;
@@ -143,6 +147,8 @@
  import com.xerox.amazonws.typica.jaxb.ResetImageAttributeResponse;
  import com.xerox.amazonws.typica.jaxb.ResetInstanceAttributeResponse;
  import com.xerox.amazonws.typica.jaxb.ResetSnapshotAttributeResponse;
+import com.xerox.amazonws.typica.jaxb.ResourceTagSetItemType;
+import com.xerox.amazonws.typica.jaxb.ResourceTagSetType;
  import com.xerox.amazonws.typica.jaxb.RunningInstancesItemType;
  import com.xerox.amazonws.typica.jaxb.RunningInstancesSetType;
  import com.xerox.amazonws.typica.jaxb.RunInstancesResponse;
@@ -152,6 +158,8 @@
  import com.xerox.amazonws.typica.jaxb.SpotInstanceRequestSetItemType;
  import com.xerox.amazonws.typica.jaxb.StartInstancesResponse;
  import com.xerox.amazonws.typica.jaxb.StopInstancesResponse;
+import com.xerox.amazonws.typica.jaxb.TagSetItemType;
+import com.xerox.amazonws.typica.jaxb.TagSetType;
  import com.xerox.amazonws.typica.jaxb.TerminateInstancesResponse;
  import com.xerox.amazonws.typica.jaxb.UserIdGroupPairType;
  import com.xerox.amazonws.typica.jaxb.UserIdGroupPairSetType;
@@ -213,7 +221,7 @@
      {
                super(awsAccessId, awsSecretKey, isSecure, server, port);
                ArrayList<String> vals = new ArrayList<String>();
-               vals.add("2010-06-15");
+               vals.add("2010-11-15");
                super.headers.put("Version", vals);
      }

@@ -365,11 +373,23 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<ImageDescription> describeImages(List<String> imageIds)  
throws EC2Exception {
+               return describeImages(imageIds, null);
+       }
+
+       /**
+        * Describe the given AMIs.
+        *
+        * @param imageIds A list of AMI IDs as returned by {@link  
#registerImage(String)}.
+        * @param filters map of filters to apply to this request.
+        * @return A list of {@link ImageDescription} instances describing each  
AMI ID.
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<ImageDescription> describeImages(List<String> imageIds,  
Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<imageIds.size(); i++) {
                        params.put("ImageId."+(i+1), imageIds.get(i));
                }
-               return describeImages(params);
+               return describeImages(params, filters);
        }

        /**
@@ -380,11 +400,23 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<ImageDescription> describeImagesByOwner(List<String> owners)  
throws EC2Exception {
+               return describeImagesByOwner(owners, null);
+       }
+
+       /**
+        * Describe the AMIs belonging to the supplied owners.
+        *
+        * @param owners A list of owners.
+        * @param filters map of filters to apply to this request.
+        * @return A list of {@link ImageDescription} instances describing each  
AMI ID.
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<ImageDescription> describeImagesByOwner(List<String> owners,  
Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<owners.size(); i++) {
                        params.put("Owner."+(i+1), owners.get(i));
                }
-               return describeImages(params);
+               return describeImages(params, filters);
        }

        /**
@@ -395,11 +427,23 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<ImageDescription> describeImagesByExecutability(List<String>  
users) throws EC2Exception {
+               return describeImagesByExecutability(users, null);
+       }
+
+       /**
+        * Describe the AMIs executable by supplied users.
+        *
+        * @param users A list of users.
+        * @param filters map of filters to apply to this request.
+        * @return A list of {@link ImageDescription} instances describing each  
AMI ID.
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<ImageDescription> describeImagesByExecutability(List<String>  
users, Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<users.size(); i++) {
                        params.put("ExecutableBy."+(i+1), users.get(i));
                }
-               return describeImages(params);
+               return describeImages(params, filters);
        }

        /**
@@ -413,6 +457,20 @@
         */
        public List<ImageDescription> describeImages(List<String> imageIds,  
List<String> owners,
                                                                                List<String> users) throws EC2Exception {
+               return describeImages(imageIds, owners, users, null);
+       }
+
+       /**
+        * Describe the AMIs that match the intersection of the criteria supplied
+        *
+        * @param imageIds A list of AMI IDs as returned by {@link  
#registerImage(String)}.
+        * @param owners A list of owners.
+        * @param users A list of users.
+        * @return A list of {@link ImageDescription} instances describing each  
AMI ID.
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<ImageDescription> describeImages(List<String> imageIds,  
List<String> owners,
+                                                                               List<String> users, Map<String, List<String>> filters) throws  
EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<imageIds.size(); i++) {
                        params.put("ImageId."+(i+1), imageIds.get(i));
@@ -423,14 +481,16 @@
                for (int i=0 ; i<users.size(); i++) {
                        params.put("ExecutableBy."+(i+1), users.get(i));
                }
-               return describeImages(params);
+               return describeImages(params, filters);
        }

-       protected List<ImageDescription> describeImages(Map<String, String>  
params) throws EC2Exception {
-               HttpGet method = new HttpGet();
+       protected List<ImageDescription> describeImages(Map<String, String>  
params, Map<String, List<String>> filters) throws EC2Exception {
+               //HttpGet method = new HttpGet();
+               HttpPost method = new HttpPost();
                DescribeImagesResponse response =
                                makeRequestInt(method, "DescribeImages", params,  
DescribeImagesResponse.class);
+               createFilterParams(params, filters);
                List<ImageDescription> result = new ArrayList<ImageDescription>();
                DescribeImagesResponseInfoType set = response.getImagesSet();
                Iterator set_iter = set.getItems().iterator();
@@ -472,7 +532,8 @@
                                        item.getKernelId(), item.getRamdiskId(), item.getPlatform(),
                                        reason, item.getImageOwnerAlias(),
                                        item.getName(), item.getDescription(), item.getRootDeviceType(),
-                                       item.getRootDeviceName(), bdm, item.getVirtualizationType()));
+                                       item.getRootDeviceName(), bdm, item.getVirtualizationType(),
+                                       getTagSet(item.getTagSet()), item.getHypervisor()));
                }
                return result;
        }
@@ -818,10 +879,28 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<ReservationDescription> describeInstances(List<String>  
instanceIds) throws EC2Exception {
+               return describeInstances(instanceIds, null);
+       }
+
+       /**
+        * Gets a list of running instances.
+        * <p>
+        * If the list of instance IDs is empty then a list of all instances owned
+        * by the caller will be returned. Otherwise the list will contain
+        * information for the requested instances only.
+        *
+        * @param instanceIds A list of instances ({@link  
com.xerox.amazonws.ec2.ReservationDescription.Instance#instanceId}.
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return A list of {@link  
com.xerox.amazonws.ec2.ReservationDescription} instances.
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<ReservationDescription> describeInstances(List<String>  
instanceIds, Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<instanceIds.size(); i++) {
                        params.put("InstanceId."+(i+1), instanceIds.get(i));
                }
+               createFilterParams(params, filters);
+
                HttpGet method = new HttpGet();
                DescribeInstancesResponse response =
                                makeRequestInt(method, "DescribeInstances", params,  
DescribeInstancesResponse.class);
@@ -1018,11 +1097,26 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<GroupDescription> describeSecurityGroups(List<String>  
groupNames)
+                       throws EC2Exception {
+               return describeSecurityGroups(groupNames, null);
+       }
+
+       /**
+        * Gets a list of security groups and their associated permissions.
+        *
+        * @param groupNames A list of groups to describe.
+        * @param filters map of filters to apply to this request.
+        * @return A list of groups ({@link GroupDescription}.
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<GroupDescription> describeSecurityGroups(List<String>  
groupNames, Map<String, List<String>> filters)
                        throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<groupNames.size(); i++) {
                        params.put("GroupName."+(i+1), groupNames.get(i));
                }
+               createFilterParams(params, filters);
+
                HttpGet method = new HttpGet();
                DescribeSecurityGroupsResponse response =
                                makeRequestInt(method, "DescribeSecurityGroups", params,  
DescribeSecurityGroupsResponse.class);
@@ -1198,11 +1292,28 @@
         * TODO: need to return request id
         */
        public List<KeyPairInfo> describeKeyPairs(List<String> keyIds)
+                       throws EC2Exception {
+               return describeKeyPairs(keyIds, null);
+       }
+
+       /**
+        * Lists public/private keypairs. NOTE: the KeyPairInfo.getMaterial()  
method will return null
+        * because this API call doesn't return the keypair material.
+        *
+        * @param keyIds A list of keypairs.
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return A list of keypair descriptions ({@link KeyPairInfo}).
+        * @throws EC2Exception wraps checked exceptions
+        * TODO: need to return request id
+        */
+       public List<KeyPairInfo> describeKeyPairs(List<String> keyIds,  
Map<String, List<String>> filters)
                        throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<keyIds.size(); i++) {
                        params.put("KeyName."+(i+1), keyIds.get(i));
                }
+               createFilterParams(params, filters);
+
                HttpGet method = new HttpGet();
                DescribeKeyPairsResponse response =
                                makeRequestInt(method, "DescribeKeyPairs", params,  
DescribeKeyPairsResponse.class);
@@ -1233,6 +1344,28 @@
                        throw new EC2Exception("Could not delete keypair : "+keyName+". No  
reason given.");
                }
        }
+
+       /**
+        * This method imports a pubic key from an RSA key pair that you created.
+        *
+        * @param keyName the name you are assigning to this key pair
+        * @param keyMaterial the public key material
+        * @return information about the keypair
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public KeyPairInfo importKeyPair(String keyName, String keyMaterial)  
throws EC2Exception {
+        Map<String, String> params = new HashMap<String, String>();
+
+        params.put("KeyName", keyName);
+        params.put("PublicKeyMaterial", new  
String(Base64.encodeBase64(keyMaterial.getBytes())));
+
+               HttpGet method = new HttpGet();
+               ImportKeyPairResponse response =
+                               makeRequestInt(method, "ImportKeyPair", params,  
ImportKeyPairResponse.class);
+
+
+               return new KeyPairInfo(keyName, response.getKeyFingerprint(),  
keyMaterial);
+       }

        /**
         * Enumerates image list attribute operation types.
@@ -1411,12 +1544,26 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<AvailabilityZone> describeAvailabilityZones(List<String>  
zones) throws EC2Exception {
+               return describeAvailabilityZones(zones, null);
+       }
+
+       /**
+        * Returns a list of availability zones and their status.
+        *
+        * @param zones a list of zones to limit the results, or null
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return a list of zones and their availability
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<AvailabilityZone> describeAvailabilityZones(List<String>  
zones, Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                if (zones != null && zones.size() > 0)  {
                        for (int i=0 ; i<zones.size(); i++) {
                                params.put("ZoneName."+(i+1), zones.get(i));
                        }
                }
+               createFilterParams(params, filters);
+
                HttpGet method = new HttpGet();
                DescribeAvailabilityZonesResponse response =
                                makeRequestInt(method, "DescribeAvailabilityZones", params,  
DescribeAvailabilityZonesResponse.class);
@@ -1442,12 +1589,26 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<AddressInfo> describeAddresses(List<String> addresses) throws  
EC2Exception {
+               return describeAddresses(addresses, null);
+       }
+
+       /**
+        * Returns a list of addresses associated with this account.
+        *
+        * @param addresses a list of zones to limit the results, or null
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return a list of addresses and their associated instance
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<AddressInfo> describeAddresses(List<String> addresses,  
Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                if (addresses != null && addresses.size() > 0)  {
                        for (int i=0 ; i<addresses.size(); i++) {
                                params.put("PublicIp."+(i+1), addresses.get(i));
                        }
                }
+               createFilterParams(params, filters);
+
                HttpGet method = new HttpGet();
                DescribeAddressesResponse response =
                                makeRequestInt(method, "DescribeAddresses", params,  
DescribeAddressesResponse.class);
@@ -1552,7 +1713,7 @@
                                makeRequestInt(method, "CreateVolume", params,  
CreateVolumeResponse.class);
                return new VolumeInfo(response.getVolumeId(), response.getSize(),
                                                        response.getSnapshotId(), response.getAvailabilityZone(),  
response.getStatus(),
-                                                       response.getCreateTime().toGregorianCalendar());
+                                                       response.getCreateTime().toGregorianCalendar(), null);
        }

        /**
@@ -1599,10 +1760,27 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<VolumeInfo> describeVolumes(List<String> volumeIds) throws  
EC2Exception {
+               return describeVolumes(volumeIds, null);
+       }
+
+       /**
+        * Gets a list of EBS volumes for this account.
+        * <p>
+        * If the list of volume IDs is empty then a list of all volumes owned
+        * by the caller will be returned. Otherwise the list will contain
+        * information for the requested volumes only.
+        *
+        * @param volumeIds A list of volumes ({@link  
com.xerox.amazonws.ec2.VolumeInfo}.
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return A list of {@link com.xerox.amazonws.ec2.VolumeInfo} volumes.
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<VolumeInfo> describeVolumes(List<String> volumeIds,  
Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<volumeIds.size(); i++) {
                        params.put("VolumeId."+(i+1), volumeIds.get(i));
                }
+               createFilterParams(params, filters);
                HttpGet method = new HttpGet();
                DescribeVolumesResponse response =
                                makeRequestInt(method, "DescribeVolumes", params,  
DescribeVolumesResponse.class);
@@ -1613,7 +1791,7 @@
                        DescribeVolumesSetItemResponseType item =  
(DescribeVolumesSetItemResponseType) reservations_iter.next();
                        VolumeInfo vol = new VolumeInfo(item.getVolumeId(), item.getSize(),
                                                                item.getSnapshotId(), item.getAvailabilityZone(), item.getStatus(),
-                                                               item.getCreateTime().toGregorianCalendar());
+                                                               item.getCreateTime().toGregorianCalendar(),  
getTagSet(item.getTagSet()));
                        AttachmentSetResponseType set = item.getAttachmentSet();
                        Iterator attachments_iter = set.getItems().iterator();
                        while (attachments_iter.hasNext()) {
@@ -1698,7 +1876,7 @@
                                                        response.getStartTime().toGregorianCalendar(),
                                                        response.getProgress(), response.getOwnerId(),
                                                        response.getVolumeSize(), response.getDescription(),
-                                                       null);
+                                                       null, null);
        }

        /**
@@ -1763,6 +1941,25 @@
         */
        public List<SnapshotInfo> describeSnapshots(List<String> snapshotIds,
                                                        String owner, String restorableBy) throws EC2Exception {
+               return describeSnapshots(snapshotIds, owner, restorableBy, null);
+       }
+
+       /**
+        * Gets a list of EBS snapshots for this account.
+        * <p>
+        * If the list of snapshot IDs is empty then a list of all snapshots owned
+        * by the caller will be returned. Otherwise the list will contain
+        * information for the requested snapshots only.
+        *
+        * @param snapshotIds A list of snapshots ({@link  
com.xerox.amazonws.ec2.SnapshotInfo}.
+        * @param owner limits results to snapshots owned by this user
+        * @param restorableBy limits results to account that can create volumes  
from this snapshot
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return A list of {@link com.xerox.amazonws.ec2.VolumeInfo} volumes.
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<SnapshotInfo> describeSnapshots(List<String> snapshotIds,
+                                                       String owner, String restorableBy, Map<String, List<String>>  
filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<snapshotIds.size(); i++) {
                        params.put("SnapshotId."+(i+1), snapshotIds.get(i));
@@ -1773,6 +1970,7 @@
                if (restorableBy != null) {
                        params.put("RestorableBy", owner);
                }
+               createFilterParams(params, filters);
                HttpGet method = new HttpGet();
                DescribeSnapshotsResponse response =
                                makeRequestInt(method, "DescribeSnapshots", params,  
DescribeSnapshotsResponse.class);
@@ -1786,7 +1984,7 @@
                                                                item.getStartTime().toGregorianCalendar(),
                                                                item.getProgress(), item.getOwnerId(),
                                                                item.getVolumeSize(), item.getDescription(),
-                                                               item.getOwnerAlias());
+                                                               item.getOwnerAlias(), getTagSet(item.getTagSet()));
                        result.add(vol);
                }
                return result;
@@ -1878,12 +2076,25 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<RegionInfo> describeRegions(List<String> regions) throws  
EC2Exception {
+               return describeRegions(regions, null);
+       }
+
+       /**
+        * Returns a list of regions
+        *
+        * @param regions a list of regions to limit the results, or null
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return a list of regions and endpoints
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<RegionInfo> describeRegions(List<String> regions, Map<String,  
List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                if (regions != null && regions.size() > 0)  {
                        for (int i=0 ; i<regions.size(); i++) {
                                params.put("Region."+(i+1), regions.get(i));
                        }
                }
+               createFilterParams(params, filters);
                HttpGet method = new HttpGet();
                DescribeRegionsResponse response =
                                makeRequestInt(method, "DescribeRegions", params,  
DescribeRegionsResponse.class);
@@ -1984,10 +2195,23 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<BundleInstanceInfo> describeBundleTasks(List<String>  
bundleIds) throws EC2Exception {
+               return describeBundleTasks(bundleIds, null);
+       }
+
+       /**
+        * Returns a list of current bundling tasks. An empty list causes all  
tasks to be returned.
+        *
+        * @param bundleIds the Ids of the bundle task to describe
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return information about the cancelled task
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<BundleInstanceInfo> describeBundleTasks(List<String>  
bundleIds, Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<bundleIds.size(); i++) {
                        params.put("BundleId."+(i+1), bundleIds.get(i));
                }
+               createFilterParams(params, filters);
                HttpGet method = new HttpGet();
                DescribeBundleTasksResponse response =
                                makeRequestInt(method, "DescribeBundleTasks", params,  
DescribeBundleTasksResponse.class);
@@ -2004,18 +2228,30 @@
        }

        /**
-        * Returns a list of Reserved Instance offerings that are available for  
purchase.
+        * Returns a list of Reserved Instance that are available for purchase.
         *
         * @param instanceIds specific reserved instance offering ids to return
         * @throws EC2Exception wraps checked exceptions
         */
        public List<ReservedInstances> describeReservedInstances(List<String>  
instanceIds) throws EC2Exception {
+               return describeReservedInstances(instanceIds, null);
+       }
+
+       /**
+        * Returns a list of Reserved Instance that are available for purchase.
+        *
+        * @param instanceIds specific reserved instance offering ids to return
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<ReservedInstances> describeReservedInstances(List<String>  
instanceIds, Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                if (instanceIds != null) {
                        for (int i=0 ; i<instanceIds.size(); i++) {
                                params.put("ReservedInstanceId."+(i+1), instanceIds.get(i));
                        }
                }
+               createFilterParams(params, filters);
                HttpGet method = new HttpGet();
                DescribeReservedInstancesResponse response =
                                makeRequestInt(method, "DescribeReservedInstances", params,  
DescribeReservedInstancesResponse.class);
@@ -2029,7 +2265,8 @@
                                                type.getAvailabilityZone(), type.getStart().toGregorianCalendar(),
                                                type.getDuration(), type.getFixedPrice(), type.getUsagePrice(),
                                                type.getProductDescription(),
-                                               type.getInstanceCount().intValue(), type.getState()));
+                                               type.getInstanceCount().intValue(), type.getState(),
+                                               getTagSet(type.getTagSet())));
                }
                return ret;
        }
@@ -2047,6 +2284,24 @@
        public List<ProductDescription>  
describeReservedInstancesOfferings(List<String> offeringIds,
                                                                InstanceType instanceType, String availabilityZone,
                                                                String productDescription) throws EC2Exception {
+               return describeReservedInstancesOfferings(offeringIds, instanceType,  
availabilityZone,
+                                                         productDescription, null);
+       }
+
+       /**
+        * Returns a list of Reserved Instance offerings that are available for  
purchase.
+        *
+        * @param offeringIds specific reserved instance offering ids to return
+        * @param instanceType the type of instance offering to be returned
+        * @param availabilityZone the availability zone to get offerings for
+        * @param productDescription limit results to those with a matching  
product description
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return a list of product descriptions
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<ProductDescription>  
describeReservedInstancesOfferings(List<String> offeringIds,
+                                                               InstanceType instanceType, String availabilityZone,
+                                                               String productDescription, Map<String, List<String>> filters)  
throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                if (offeringIds != null) {
                        for (int i=0 ; i<offeringIds.size(); i++) {
@@ -2062,6 +2317,7 @@
                if (productDescription != null) {
                        params.put("ProductDescription", productDescription);
                }
+               createFilterParams(params, filters);
                HttpGet method = new HttpGet();
                DescribeReservedInstancesOfferingsResponse response =
                                makeRequestInt(method, "DescribeReservedInstancesOfferings", params,  
DescribeReservedInstancesOfferingsResponse.class);
@@ -2074,7 +2330,7 @@
                                                InstanceType.getTypeFromString(type.getInstanceType()),
                                                type.getAvailabilityZone(),
                                                type.getDuration(), type.getFixedPrice(), type.getUsagePrice(),
-                                               type.getProductDescription()));
+                                               type.getProductDescription(), null));
                }
                return ret;
        }
@@ -2146,6 +2402,14 @@
        }

      public List<SpotPriceHistoryItem> describeSpotPriceHistory(Calendar  
start, Calendar end, String productDescription, InstanceType...  
instanceTypes) throws EC2Exception {
+               List<InstanceType> types = new ArrayList<InstanceType>();
+               for (int i = 0; i < instanceTypes.length; i++) {
+                       types.add(instanceTypes[i]);
+               }
+               return describeSpotPriceHistory(start, end, productDescription, types,  
null);
+       }
+
+    public List<SpotPriceHistoryItem> describeSpotPriceHistory(Calendar  
start, Calendar end, String productDescription, List<InstanceType>  
instanceTypes, Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                if (start != null) {
                        params.put("StartTime", httpDate(start));
@@ -2156,11 +2420,14 @@
                if (productDescription != null) {
                        params.put("ProductDescription", productDescription);
                }
-               for (int i = 0; i < instanceTypes.length; i++) {
-                       InstanceType instanceType = instanceTypes[i];
-                       params.put("InstanceType." + (i + 1), instanceType.getTypeId());
-               }
-
+               if (instanceTypes != null) {
+                       int i=0;
+                       for (InstanceType type: instanceTypes) {
+                               params.put("InstanceType." + (i + 1), type.getTypeId());
+                               i++;
+                       }
+               }
+               createFilterParams(params, filters);
                HttpGet method = new HttpGet();
                List<SpotPriceHistoryItem> ret = new ArrayList<SpotPriceHistoryItem>();
                DescribeSpotPriceHistoryResponse response =
@@ -2177,6 +2444,17 @@
        }

      public List<SpotInstanceRequest> describeSpotInstanceRequests() throws  
EC2Exception {
+               return describeSpotInstanceRequests(null, null);
+       }
+
+    public List<SpotInstanceRequest>  
describeSpotInstanceRequests(List<String> requestIds, Map<String,  
List<String>> filters) throws EC2Exception {
+               Map<String, String> params = new HashMap<String, String>();
+               if (requestIds != null) {
+                       for (int i=0 ; i<requestIds.size(); i++) {
+                               params.put("SpotInstanceRequestId."+(i+1), requestIds.get(i));
+                       }
+               }
+               createFilterParams(params, filters);
                HttpGet method = new HttpGet();
                List<SpotInstanceRequest> ret = new ArrayList<SpotInstanceRequest>();
                DescribeSpotInstanceRequestsResponse response =
@@ -2185,7 +2463,7 @@
                List<SpotInstanceRequestSetItemType> items =  
response.getSpotInstanceRequestSet().getItems();
                if (items != null) {
                        for (SpotInstanceRequestSetItemType item : items) {
-                               ret.add(new SpotInstanceRequest(item));
+                               ret.add(new SpotInstanceRequest(item, getTagSet(item.getTagSet())));
                        }
                }
                return ret;
@@ -2204,7 +2482,7 @@
                List<SpotInstanceRequestSetItemType> items =  
response.getSpotInstanceRequestSet().getItems();
                if (items != null) {
                        for (SpotInstanceRequestSetItemType item : items) {
-                               ret.add(new SpotInstanceRequest(item));
+                               ret.add(new SpotInstanceRequest(item, null));
                        }
                }

@@ -2332,10 +2610,23 @@
         * @throws EC2Exception wraps checked exceptions
         */
        public List<PlacementGroupInfo> describePlacementGroups(List<String>  
groupNames) throws EC2Exception {
+               return describePlacementGroups(groupNames, null);
+       }
+
+       /**
+        * This method describes the placement groups.
+        *
+        * @param groupNames names of 1 or more groups to get information about,  
null for all groups
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return information about the groups
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<PlacementGroupInfo> describePlacementGroups(List<String>  
groupNames, Map<String, List<String>> filters) throws EC2Exception {
                Map<String, String> params = new HashMap<String, String>();
                for (int i=0 ; i<groupNames.size(); i++) {
                        params.put("GroupName."+(i+1), groupNames.get(i));
                }
+               createFilterParams(params, filters);
                HttpGet method = new HttpGet();
          DescribePlacementGroupsResponse response =
                                makeRequestInt(method, "DescribePlacementGroups", params,  
DescribePlacementGroupsResponse.class);
@@ -2350,6 +2641,124 @@
                }
                return ret;
        }
+
+       /**
+        * Adds or overwites one or more tags for the specified resource or  
resources. 10 tags max
+        * per resource.
+        *
+        * @param resourceIds 1 or more resource ids
+        * @param tagSet set of tags to assign to the resource(s)
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public void createTags(List<String> resourceIds, Map<String, String>  
tagSet) throws EC2Exception {
+               Map<String, String> params = new HashMap<String, String>();
+               for (int i=0 ; i<resourceIds.size(); i++) {
+                       params.put("ResourceId."+(i+1), resourceIds.get(i));
+               }
+               int i=1;
+               for (String key : tagSet.keySet()) {
+                       String val = tagSet.get(key);
+                       if (val != null && val.length() > 0) {
+                               params.put("Tag."+i+".Key", key);
+                               params.put("Tag."+i+".Value", val);
+                               i++;
+                       }
+               }
+               HttpGet method = new HttpGet();
+               CreateTagsResponse response =
+                               makeRequestInt(method, "CreateTags", params, CreateTagsResponse.class);
+               if (!response.isReturn()) {
+                       throw new EC2Exception("Could not create tags (no reason given).");
+               }
+       }
+
+       /**
+        * Deletes the specified tag(s) from the specified resource(s)
+        *
+        * @param resourceIds 1 or more resource ids
+        * @param tagSet set of tags to assign to the resource(s)
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public void deleteTags(List<String> resourceIds, Map<String, String>  
tagSet) throws EC2Exception {
+               Map<String, String> params = new HashMap<String, String>();
+               for (int i=0 ; i<resourceIds.size(); i++) {
+                       params.put("ResourceId."+(i+1), resourceIds.get(i));
+               }
+               int i=1;
+               for (String key : tagSet.keySet()) {
+                       String val = tagSet.get(key);
+                       if (val != null && val.length() > 0) {
+                               params.put("Tag."+i+".Key", key);
+                               params.put("Tag."+i+".Value", val);
+                               i++;
+                       }
+               }
+               HttpGet method = new HttpGet();
+               DeleteTagsResponse response =
+                               makeRequestInt(method, "DeleteTags", params, DeleteTagsResponse.class);
+               if (!response.isReturn()) {
+                       throw new EC2Exception("Could not delete tags (no reason given).");
+               }
+       }
+
+       /**
+        * Gets a list of your tags with optional filtering to limit the results.
+        *
+        * @param filters map of filters to apply to this request. (fingerprint  
or key-name currently)
+        * @return A map of tag values
+        * @throws EC2Exception wraps checked exceptions
+        */
+       public List<TagInfo> describeTags(Map<String, List<String>> filters)  
throws EC2Exception {
+               Map<String, String> params = new HashMap<String, String>();
+               createFilterParams(params, filters);
+               HttpGet method = new HttpGet();
+               DescribeTagsResponse response =
+                               makeRequestInt(method, "DescribeTags", params,  
DescribeTagsResponse.class);
+               List<TagInfo> ret = new ArrayList<TagInfo>();
+               TagSetType res_set = response.getTagSet();
+               Iterator tags_iter = res_set.getItems().iterator();
+               while (tags_iter.hasNext()) {
+                       TagSetItemType item = (TagSetItemType) tags_iter.next();
+                       ret.add(new TagInfo(item.getResourceId(), item.getResourceType(),
+                                           item.getKey(), item.getValue()));
+               }
+               return ret;
+       }
+
+       // helper method to create common filter parameters
+       protected void createFilterParams(Map<String, String> params, Map<String,  
List<String>> filters) {
+               if (params == null) throw new IllegalArgumentException("params must  
always be non-null");
+               if (filters == null) return;
+               int i=1;
+               for (String key : filters.keySet()) {
+                       List<String> vals = filters.get(key);
+                       if (vals != null && vals.size() > 0) {
+                               params.put("Filter."+i+".Name", key);
+                               Iterator<String> iter = vals.iterator();
+                               int j=1;
+                               while (iter.hasNext()) {
+                                       String val = iter.next();
+                                       params.put("Filter."+i+".Value."+j, val);
+                                       j++;
+                               }
+                               i++;
+                       }
+               }
+       }
+
+       // helper method to construct tag set objects from results
+       protected Map<String, String> getTagSet(ResourceTagSetType setType) {
+               Map<String, String> ret = new HashMap<String, String>();
+               if (setType == null) return ret;
+
+               List<ResourceTagSetItemType> tagList = setType.getItems();
+               if (tagList != null) {
+                       for (ResourceTagSetItemType tag : tagList) {
+                               ret.put(tag.getKey(), tag.getValue());
+                       }
+               }
+               return ret;
+       }

        protected <T> T makeRequestInt(HttpRequestBase method, String action,  
Map<String, String> params, Class<T> respType)
                throws EC2Exception {
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/ProductDescription.java  Wed Mar 18  
15:11:17 2009
+++ /trunk/java/com/xerox/amazonws/ec2/ProductDescription.java  Wed Jun 22  
06:03:24 2011
@@ -17,6 +17,8 @@

  package com.xerox.amazonws.ec2;

+import java.util.Map;
+
  public class ProductDescription {
        private String id;
        private InstanceType instanceType;
@@ -25,9 +27,11 @@
        private double fixedPrice;
        private double usagePrice;
        private String productDescription;
+       private Map<String, String> tagSet;

        public ProductDescription(String reservedInstanceOfferingId, InstanceType  
instanceType, String availabilityZone,
-                                                       long duration, double fixedPrice, double usagePrice, String  
productDescription) {
+                                                       long duration, double fixedPrice, double usagePrice, String  
productDescription,
+                                                       Map<String, String> tagSet) {
                this.id = reservedInstanceOfferingId;
                this.instanceType = instanceType;
                this.availabilityZone = availabilityZone;
@@ -35,6 +39,7 @@
                this.fixedPrice = fixedPrice;
                this.usagePrice = usagePrice;
                this.productDescription = productDescription;
+               this.tagSet = tagSet;
        }

        public String getId() {
@@ -64,6 +69,10 @@
        public String getProductDescription() {
                return productDescription;
        }
+
+       public Map<String, String> getTagSet() {
+               return tagSet;
+       }

        public String toString() {
                return "ProductDescription[id=" + this.id + ", type=" +  
instanceType.getTypeId() +
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/ReservationDescription.java      Wed Jul  
14 10:15:41 2010
+++ /trunk/java/com/xerox/amazonws/ec2/ReservationDescription.java      Wed Jun  
22 06:03:24 2011
@@ -19,8 +19,10 @@

  import java.util.ArrayList;
  import java.util.Calendar;
+import java.util.HashMap;
  import java.util.Iterator;
  import java.util.List;
+import java.util.Map;

  import  
com.xerox.amazonws.typica.jaxb.EbsInstanceBlockDeviceMappingResponseType;
  import com.xerox.amazonws.typica.jaxb.GroupItemType;
@@ -31,6 +33,8 @@
  import com.xerox.amazonws.typica.jaxb.InstanceStateType;
  import com.xerox.amazonws.typica.jaxb.ProductCodesSetItemType;
  import com.xerox.amazonws.typica.jaxb.ProductCodeType;
+import com.xerox.amazonws.typica.jaxb.ResourceTagSetItemType;
+import com.xerox.amazonws.typica.jaxb.ResourceTagSetType;
  import com.xerox.amazonws.typica.jaxb.RunningInstancesItemType;
  import com.xerox.amazonws.typica.jaxb.RunningInstancesSetType;

@@ -168,6 +172,9 @@
                private String instanceLifecycle;
                private String spotInstanceRequestId;
                private String virtualizationType;
+               private String clientToken;
+               private Map<String, String> tagSet;
+               private String hypervisor;

                public Instance(String imageId, String instanceId, String privateDnsName,
                                String dnsName, String stateName, String stateCode, String reason,
@@ -258,6 +265,18 @@
                        this.instanceLifecycle = rsp_item.getInstanceLifecycle();
                        this.spotInstanceRequestId = rsp_item.getSpotInstanceRequestId();
                        this.virtualizationType = rsp_item.getVirtualizationType();
+                       this.clientToken = rsp_item.getClientToken();
+                       this.tagSet = new HashMap<String, String>();
+                       ResourceTagSetType tagsettype = rsp_item.getTagSet();
+                       if (tagsettype != null ) {
+                               List<ResourceTagSetItemType> tagList = tagsettype.getItems();
+                               if (tagList != null) {
+                                       for (ResourceTagSetItemType tag : tagList) {
+                                               tagSet.put(tag.getKey(), tag.getValue());
+                                       }
+                               }
+                       }
+                       this.hypervisor = rsp_item.getHypervisor();
                }

                public String getImageId() {
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/ReservedInstances.java   Tue Oct 13  
16:26:34 2009
+++ /trunk/java/com/xerox/amazonws/ec2/ReservedInstances.java   Wed Jun 22  
06:03:24 2011
@@ -18,6 +18,7 @@
  package com.xerox.amazonws.ec2;

  import java.util.Calendar;
+import java.util.Map;

  public class ReservedInstances extends ProductDescription {
        private Calendar start;
@@ -28,9 +29,9 @@
                                                String availabilityZone, Calendar start, long duration,
                                                double fixedPrice, double usagePrice,
                                                String productDescription, int instanceCount,
-                                               String state) {
+                                               String state, Map<String, String> tagSet) {
                super(reservedInstancesId, instanceType, availabilityZone,
-                               duration, fixedPrice, usagePrice, productDescription);
+                               duration, fixedPrice, usagePrice, productDescription, tagSet);
                this.start = start;
                this.instanceCount = instanceCount;
                this.state = state;
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/SnapshotInfo.java        Sun Mar 21  
15:06:07 2010
+++ /trunk/java/com/xerox/amazonws/ec2/SnapshotInfo.java        Wed Jun 22  
06:03:24 2011
@@ -20,6 +20,7 @@
  import java.util.ArrayList;
  import java.util.Calendar;
  import java.util.List;
+import java.util.Map;

  /**
   * An instance of this class represents an EC2 Snapshot.
@@ -39,10 +40,12 @@
        private String volumeSize;
        private String description;
        private String ownerAlias;
+       private Map<String, String> tagSet;

        public SnapshotInfo(String snapshotId, String volumeId,
                        String status, Calendar startTime, String progress,
-                       String ownerId, String volumeSize, String description, String  
ownerAlias) {
+                       String ownerId, String volumeSize, String description, String  
ownerAlias,
+                       Map<String, String> tagSet) {
                this.snapshotId = snapshotId;
                this.volumeId = volumeId;
                this.status = status;
@@ -52,6 +55,7 @@
                this.volumeSize = volumeSize;
                this.description = description;
                this.ownerAlias = ownerAlias;
+               this.tagSet = tagSet;
        }

        public String getSnapshotId() {
@@ -89,6 +93,10 @@
        public String getOwnerAlias() {
                return ownerAlias;
        }
+
+       public Map<String, String> getTagSet() {
+               return tagSet;
+       }

        public String toString() {
                return "Snapshot[id=" + this.snapshotId
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/SpotInstanceRequest.java Mon Feb 22  
16:30:34 2010
+++ /trunk/java/com/xerox/amazonws/ec2/SpotInstanceRequest.java Wed Jun 22  
06:03:24 2011
@@ -3,6 +3,7 @@
  import com.xerox.amazonws.typica.jaxb.SpotInstanceRequestSetItemType;

  import java.util.Calendar;
+import java.util.Map;

  public class SpotInstanceRequest {
      protected String spotInstanceRequestId;
@@ -18,11 +19,12 @@
      protected String instanceId;
      protected Calendar createTime;
      protected String productDescription;
+       protected Map<String, String> tagSet;

      public SpotInstanceRequest() {
      }

-    SpotInstanceRequest(SpotInstanceRequestSetItemType item) {
+    SpotInstanceRequest(SpotInstanceRequestSetItemType item, Map<String,  
String> tagSet) {
          this.spotInstanceRequestId = item.getSpotInstanceRequestId();
          this.spotPrice = Double.parseDouble(item.getSpotPrice());
          this.type = SpotInstanceType.getTypeFromString(item.getType());
@@ -32,6 +34,7 @@
          this.instanceId = item.getInstanceId();
          this.createTime = item.getCreateTime().toGregorianCalendar();
          this.productDescription = item.getProductDescription();
+               this.tagSet = tagSet;
      }

      public String getSpotInstanceRequestId() {
@@ -69,6 +72,10 @@
      public String getProductDescription() {
          return productDescription;
      }
+
+       public Map<String, String> getTagSet() {
+               return tagSet;
+       }

      @Override
      public String toString() {
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/VolumeInfo.java  Thu Aug 21 04:20:27  
2008
+++ /trunk/java/com/xerox/amazonws/ec2/VolumeInfo.java  Wed Jun 22 06:03:24  
2011
@@ -20,6 +20,7 @@
  import java.util.ArrayList;
  import java.util.Calendar;
  import java.util.List;
+import java.util.Map;

  /**
   * An instance of this class represents an EC2 Volume.
@@ -37,15 +38,17 @@
        private String status;
        private Calendar createTime;
        private List<AttachmentInfo> attachmentSets = new  
ArrayList<AttachmentInfo>();
+       private Map<String, String> tagSet;

        public VolumeInfo(String volumeId, String size, String snapshotId, String  
zone,
-                       String status, Calendar createTime) {
+                       String status, Calendar createTime, Map<String, String> tagSet) {
                this.volumeId = volumeId;
                this.size = size;
                this.snapshotId = snapshotId;
                this.zone = zone;
                this.status = status;
                this.createTime = createTime;
+               this.tagSet = tagSet;
        }

        public String getVolumeId() {
@@ -83,6 +86,10 @@
        public List<AttachmentInfo> getAttachmentInfo() {
                return attachmentSets;
        }
+
+       public Map<String, String> getTagSet() {
+               return tagSet;
+       }

        public String toString() {
                return "Volume[id=" + this.volumeId + ", size="
=======================================
--- /trunk/xsd/ec2.xsd  Wed Jul 14 10:15:41 2010
+++ /trunk/xsd/ec2.xsd  Wed Jun 22 06:03:24 2011
@@ -1,7 +1,7 @@
  <?xml version="1.0" encoding="UTF-8"?>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-                  xmlns:tns="http://ec2.amazonaws.com/doc/2010-06-15/"
-                  targetNamespace="http://ec2.amazonaws.com/doc/2010-06-15/"
+           xmlns:tns="http://ec2.amazonaws.com/doc/2010-11-15/"
+           targetNamespace="http://ec2.amazonaws.com/doc/2010-11-15/"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
                   xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
@@ -92,6 +92,21 @@
          <xs:element name="keyFingerprint" type="xs:string"/>
          <xs:element name="keyMaterial" type="xs:string"/>
        </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ImportKeyPair" type="tns:ImportKeyPairType"/>
+  <xs:element name="ImportKeyPairResponse"  
type="tns:ImportKeyPairResponseType"/>
+  <xs:complexType name="ImportKeyPairType">
+       <xs:sequence>
+         <xs:element name="keyName" type="xs:string"/>
+         <xs:element name="publicKeyMaterial" type="xs:string"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ImportKeyPairResponseType">
+       <xs:sequence>
+         <xs:element name="requestId" type="xs:string"/>
+         <xs:element name="keyName" type="xs:string"/>
+         <xs:element name="keyFingerprint" type="xs:string"/>
+       </xs:sequence>
    </xs:complexType>
    <xs:element name="DeleteKeyPair" type="tns:DeleteKeyPairType"/>
    <xs:complexType name="DeleteKeyPairType">
@@ -110,6 +125,7 @@
    <xs:complexType name="DescribeKeyPairsType">
        <xs:sequence>
          <xs:element name="keySet" type="tns:DescribeKeyPairsInfoType"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeKeyPairsInfoType">
@@ -149,19 +165,20 @@
          <xs:element name="keyName" type="xs:string" minOccurs="0"/>
          <xs:element name="groupSet" type="tns:GroupSetType"/>
          <xs:element name="additionalInfo" type="xs:string" minOccurs="0"/>
-         <xs:element name="userData" type="tns:UserDataType" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="addressingType" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="userData" type="tns:UserDataType" minOccurs="0"/>
+         <xs:element name="addressingType" type="xs:string" minOccurs="0"/>
          <xs:element name="instanceType" type="xs:string"/>
-         <xs:element name="placement" type="tns:PlacementRequestType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="kernelId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="ramdiskId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="monitoring" type="tns:MonitoringInstanceType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="subnetId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="disableApiTermination" type="xs:boolean"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="instanceInitiatedShutdownBehavior" type="xs:string"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="license" type="tns:InstanceLicenseRequestType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="privateIpAddress" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="placement" type="tns:PlacementRequestType"  
minOccurs="0"/>
+         <xs:element name="kernelId" type="xs:string" minOccurs="0"/>
+         <xs:element name="ramdiskId" type="xs:string" minOccurs="0"/>
+         <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"  
minOccurs="0"/>
+         <xs:element name="monitoring" type="tns:MonitoringInstanceType"  
minOccurs="0"/>
+         <xs:element name="subnetId" type="xs:string" minOccurs="0"/>
+         <xs:element name="disableApiTermination" type="xs:boolean"  
minOccurs="0"/>
+         <xs:element name="instanceInitiatedShutdownBehavior" type="xs:string"  
minOccurs="0"/>
+         <xs:element name="license" type="tns:InstanceLicenseRequestType"  
minOccurs="0"/>
+         <xs:element name="privateIpAddress" type="xs:string" minOccurs="0"/>
+         <xs:element name="clientToken" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="GroupSetType">
@@ -205,18 +222,24 @@
    </xs:complexType>
    <xs:complexType name="PlacementRequestType">
        <xs:sequence>
+         <xs:element name="availabilityZone" type="xs:string" minOccurs="0"/>
+         <xs:element name="groupName" type="xs:string" minOccurs="0"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="InstancePlacementType">
+       <xs:sequence>
          <xs:element name="availabilityZone" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
          <xs:element name="groupName" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="MonitoringInstanceType">
        <xs:sequence>
-         <xs:element name="enabled" type="xs:boolean" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="enabled" type="xs:boolean" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="InstanceLicenseRequestType">
        <xs:sequence>
-         <xs:element name="pool" type="xs:string" minOccurs="1" maxOccurs="1"/>
+         <xs:element name="pool" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="RunInstancesResponse"  
type="tns:RunInstancesResponseType"/>
@@ -241,7 +264,7 @@
    </xs:complexType>
    <xs:complexType name="RunningInstancesSetType">
        <xs:sequence>
-         <xs:element name="item" type="tns:RunningInstancesItemType"  
minOccurs="1" maxOccurs="unbounded"/>
+         <xs:element name="item" type="tns:RunningInstancesItemType"  
maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="RunningInstancesItemType">
@@ -253,19 +276,19 @@
          <xs:element name="dnsName" type="xs:string" minOccurs="0"/>
          <xs:element name="reason" type="xs:string" minOccurs="0"/>
          <xs:element name="keyName" type="xs:string" minOccurs="0"/>
-         <xs:element name="amiLaunchIndex" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="productCodes" type="tns:ProductCodesSetType"  
minOccurs="0" maxOccurs="1"/>
+         <xs:element name="amiLaunchIndex" type="xs:string" minOccurs="0"/>
+         <xs:element name="productCodes" type="tns:ProductCodesSetType"  
minOccurs="0"/>
          <xs:element name="instanceType" type="xs:string"/>
          <xs:element name="launchTime" type="xs:dateTime"/>
          <xs:element name="placement" type="tns:PlacementResponseType"  
minOccurs="0"/>
          <xs:element name="kernelId" type="xs:string" minOccurs="0"/>
          <xs:element name="ramdiskId" type="xs:string" minOccurs="0"/>
          <xs:element name="platform" type="xs:string" minOccurs="0"/>
-         <xs:element name="monitoring" type="tns:InstanceMonitoringStateType"  
minOccurs="0" maxOccurs="1"/>
+         <xs:element name="monitoring" type="tns:InstanceMonitoringStateType"  
minOccurs="0"/>
          <xs:element name="subnetId" type="xs:string" minOccurs="0"/>
          <xs:element name="vpcId" type="xs:string" minOccurs="0"/>
-         <xs:element name="privateIpAddress" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="ipAddress" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="privateIpAddress" type="xs:string" minOccurs="0"/>
+         <xs:element name="ipAddress" type="xs:string" minOccurs="0"/>
          <xs:element name="stateReason" type="tns:StateReasonType"  
minOccurs="0"/>
          <xs:element name="architecture" type="xs:string" minOccurs="0"/>
          <xs:element name="rootDeviceType" type="xs:string" minOccurs="0"/>
@@ -273,14 +296,17 @@
          <xs:element name="blockDeviceMapping"  
type="tns:InstanceBlockDeviceMappingResponseType" minOccurs="0"/>
          <xs:element name="instanceLifecycle" type="xs:string" minOccurs="0"/>
          <xs:element name="spotInstanceRequestId" type="xs:string"  
minOccurs="0"/>
-         <xs:element name="license" type="tns:InstanceLicenseResponseType"  
minOccurs="0" maxOccurs="1"/>
+         <xs:element name="license" type="tns:InstanceLicenseResponseType"  
minOccurs="0"/>
          <xs:element name="virtualizationType" type="xs:string" minOccurs="0"/>
+         <xs:element name="clientToken" type="xs:string" minOccurs="0"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
+         <xs:element name="hypervisor" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="PlacementResponseType">
        <xs:sequence>
          <xs:element name="availabilityZone" type="xs:string"/>
-         <xs:element name="groupName" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="groupName" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="StateReasonType">
@@ -312,7 +338,7 @@
    </xs:complexType>
    <xs:complexType name="InstanceLicenseResponseType">
        <xs:sequence>
-         <xs:element name="pool" type="xs:string" minOccurs="1" maxOccurs="1"/>
+         <xs:element name="pool" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="GetConsoleOutput" type="tns:GetConsoleOutputType"/>
@@ -455,6 +481,7 @@
    <xs:complexType name="DescribeInstancesType">
        <xs:sequence>
          <xs:element name="instancesSet" type="tns:DescribeInstancesInfoType"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeInstancesInfoType">
@@ -485,6 +512,7 @@
          <xs:element name="executableBySet"  
type="tns:DescribeImagesExecutableBySetType" minOccurs="0"/>
          <xs:element name="imagesSet" type="tns:DescribeImagesInfoType"/>
          <xs:element name="ownersSet" type="tns:DescribeImagesOwnersType"  
minOccurs="0"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeImagesInfoType">
@@ -550,6 +578,8 @@
          <xs:element name="rootDeviceName" type="xs:string" minOccurs="0"/>
          <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"  
minOccurs="0"/>
          <xs:element name="virtualizationType" type="xs:string" minOccurs="0"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
+         <xs:element name="hypervisor" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="CreateSecurityGroup"  
type="tns:CreateSecurityGroupType"/>
@@ -583,6 +613,7 @@
    <xs:complexType name="DescribeSecurityGroupsType">
        <xs:sequence>
          <xs:element name="securityGroupSet"  
type="tns:DescribeSecurityGroupsSetType"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeSecurityGroupsSetType">
@@ -910,6 +941,7 @@
    <xs:complexType name="DescribeAvailabilityZonesType">
        <xs:sequence>
          <xs:element name="availabilityZoneSet"  
type="tns:DescribeAvailabilityZonesSetType"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeAvailabilityZonesSetType">
@@ -978,6 +1010,7 @@
    <xs:complexType name="DescribeAddressesType">
        <xs:sequence>
          <xs:element name="publicIpsSet" type="tns:DescribeAddressesInfoType"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeAddressesInfoType">
@@ -1072,6 +1105,7 @@
    <xs:complexType name="DescribeVolumesType">
        <xs:sequence>
          <xs:element name="volumeSet" type="tns:DescribeVolumesSetType"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeVolumesSetType">
@@ -1105,6 +1139,7 @@
          <xs:element name="status" type="xs:string"/>
          <xs:element name="createTime" type="xs:dateTime"/>
          <xs:element name="attachmentSet" type="tns:AttachmentSetResponseType"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="AttachmentSetResponseType">
@@ -1145,9 +1180,9 @@
    <xs:complexType name="DetachVolumeType">
        <xs:sequence>
          <xs:element name="volumeId" type="xs:string"/>
-         <xs:element name="instanceId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="device" type="xs:string" minOccurs="0" maxOccurs="1"/>
-         <xs:element name="force" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
+         <xs:element name="instanceId" type="xs:string" minOccurs="0"/>
+         <xs:element name="device" type="xs:string" minOccurs="0"/>
+         <xs:element name="force" type="xs:boolean" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="DetachVolumeResponse"  
type="tns:DetachVolumeResponseType"/>
@@ -1201,6 +1236,7 @@
          <xs:element name="snapshotSet" type="tns:DescribeSnapshotsSetType"/>
          <xs:element name="ownersSet" type="tns:DescribeSnapshotsOwnersType"  
minOccurs="0"/>
          <xs:element name="restorableBySet"  
type="tns:DescribeSnapshotsRestorableBySetType" minOccurs="0"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeSnapshotsSetType">
@@ -1256,6 +1292,7 @@
          <xs:element name="volumeSize" type="xs:string"/>
          <xs:element name="description" type="xs:string" minOccurs="0"/>
          <xs:element name="ownerAlias" type="xs:string" minOccurs="0"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="ModifySnapshotAttribute"  
type="tns:ModifySnapshotAttributeType"/>
@@ -1378,6 +1415,7 @@
    <xs:complexType name="DescribeBundleTasksType">
        <xs:sequence>
          <xs:element name="bundlesSet" type="tns:DescribeBundleTasksInfoType"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeBundleTasksInfoType">
@@ -1419,6 +1457,7 @@
    <xs:complexType name="DescribeRegionsType">
        <xs:sequence>
          <xs:element name="regionSet" type="tns:DescribeRegionsSetType"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeRegionsSetType">
@@ -1456,6 +1495,7 @@
          <xs:element name="instanceType" type="xs:string" minOccurs="0"/>
          <xs:element name="availabilityZone" type="xs:string" minOccurs="0"/>
          <xs:element name="productDescription" type="xs:string" minOccurs="0"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeReservedInstancesOfferingsSetType">
@@ -1509,6 +1549,7 @@
    <xs:complexType name="DescribeReservedInstancesType">
        <xs:sequence>
          <xs:element name="reservedInstancesSet"  
type="tns:DescribeReservedInstancesSetType" minOccurs="0"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeReservedInstancesSetType">
@@ -1545,6 +1586,7 @@
          <xs:element name="instanceCount" type="xs:integer"/>
          <xs:element name="productDescription" type="xs:string"/>
          <xs:element name="state" type="xs:string"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="MonitorInstances" type="tns:MonitorInstancesType"/>
@@ -1606,6 +1648,7 @@
          <xs:element name="type" type="xs:string"/>
          <xs:element name="availabilityZone" type="xs:string"/>
          <xs:element name="attachments" type="tns:AttachmentSetType"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="CustomerGatewayType">
@@ -1615,6 +1658,7 @@
          <xs:element name="type" type="xs:string"/>
          <xs:element name="ipAddress" type="xs:string"/>
          <xs:element name="bgpAsn" type="xs:int"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="VpnConnectionType">
@@ -1625,6 +1669,7 @@
          <xs:element name="type" type="xs:string" minOccurs="0"/>
          <xs:element name="customerGatewayId" type="xs:string"/>
          <xs:element name="vpnGatewayId" type="xs:string"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="VpcType">
@@ -1633,6 +1678,7 @@
          <xs:element name="state" type="xs:string" minOccurs="0"/>
          <xs:element name="cidrBlock" type="xs:string" minOccurs="0"/>
          <xs:element name="dhcpOptionsId" type="xs:string" minOccurs="0"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="SubnetType">
@@ -1643,6 +1689,7 @@
          <xs:element name="cidrBlock" type="xs:string" minOccurs="0"/>
          <xs:element name="availableIpAddressCount" type="xs:int" minOccurs="0"/>
          <xs:element name="availabilityZone" type="xs:string" minOccurs="0"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="CustomerGatewaySetType">
@@ -1750,6 +1797,7 @@
        <xs:sequence>
          <xs:element name="dhcpOptionsId" type="xs:string"/>
          <xs:element name="dhcpConfigurationSet"  
type="tns:DhcpConfigurationItemSetType"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DhcpValueType">
@@ -2040,6 +2088,7 @@
    <xs:complexType name="DescribeDhcpOptionsType">
        <xs:sequence>
          <xs:element name="dhcpOptionsSet" type="tns:DhcpOptionsIdSetType"  
minOccurs="0"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeDhcpOptionsResponseType">
@@ -2102,15 +2151,15 @@
          <xs:element name="imageId" type="xs:string"/>
          <xs:element name="keyName" type="xs:string" minOccurs="0"/>
          <xs:element name="groupSet" type="tns:GroupSetType"/>
-         <xs:element name="userData" type="tns:UserDataType" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="addressingType" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="userData" type="tns:UserDataType" minOccurs="0"/>
+         <xs:element name="addressingType" type="xs:string" minOccurs="0"/>
          <xs:element name="instanceType" type="xs:string"/>
-         <xs:element name="placement" type="tns:PlacementRequestType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="kernelId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="ramdiskId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="monitoring" type="tns:MonitoringInstanceType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="subnetId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="placement" type="tns:PlacementRequestType"  
minOccurs="0"/>
+         <xs:element name="kernelId" type="xs:string" minOccurs="0"/>
+         <xs:element name="ramdiskId" type="xs:string" minOccurs="0"/>
+         <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"  
minOccurs="0"/>
+         <xs:element name="monitoring" type="tns:MonitoringInstanceType"  
minOccurs="0"/>
+         <xs:element name="subnetId" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="LaunchSpecificationResponseType">
@@ -2118,14 +2167,14 @@
          <xs:element name="imageId" type="xs:string"/>
          <xs:element name="keyName" type="xs:string" minOccurs="0"/>
          <xs:element name="groupSet" type="tns:GroupSetType"/>
-         <xs:element name="addressingType" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="addressingType" type="xs:string" minOccurs="0"/>
          <xs:element name="instanceType" type="xs:string"/>
-         <xs:element name="placement" type="tns:PlacementRequestType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="kernelId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="ramdiskId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
-         <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="monitoring" type="tns:MonitoringInstanceType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="subnetId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="placement" type="tns:PlacementRequestType"  
minOccurs="0"/>
+         <xs:element name="kernelId" type="xs:string" minOccurs="0"/>
+         <xs:element name="ramdiskId" type="xs:string" minOccurs="0"/>
+         <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"  
minOccurs="0"/>
+         <xs:element name="monitoring" type="tns:MonitoringInstanceType"  
minOccurs="0"/>
+         <xs:element name="subnetId" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="SpotInstanceRequestSetItemType">
@@ -2143,6 +2192,7 @@
          <xs:element name="instanceId" type="xs:string" minOccurs="0"/>
          <xs:element name="createTime" type="xs:dateTime" minOccurs="0"/>
          <xs:element name="productDescription" type="xs:string" minOccurs="0"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="SpotInstanceStateFaultType">
@@ -2159,12 +2209,13 @@
    <xs:complexType name="RequestSpotInstancesResponseType">
        <xs:sequence>
          <xs:element name="requestId" type="xs:string"/>
-         <xs:element name="spotInstanceRequestSet"  
type="tns:SpotInstanceRequestSetType" minOccurs="1" maxOccurs="1"/>
+         <xs:element name="spotInstanceRequestSet"  
type="tns:SpotInstanceRequestSetType"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DescribeSpotInstanceRequestsType">
        <xs:sequence>
          <xs:element name="spotInstanceRequestIdSet"  
type="tns:SpotInstanceRequestIdSetType"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="SpotInstanceRequestIdSetType">
@@ -2209,8 +2260,9 @@
        <xs:sequence>
          <xs:element name="startTime" type="xs:dateTime" minOccurs="0"/>
          <xs:element name="endTime" type="xs:dateTime" minOccurs="0"/>
-         <xs:element name="instanceTypeSet" type="tns:InstanceTypeSetType"  
minOccurs="0" maxOccurs="1"/>
-         <xs:element name="productDescriptionSet"  
type="tns:ProductDescriptionSetType" minOccurs="0" maxOccurs="1"/>
+         <xs:element name="instanceTypeSet" type="tns:InstanceTypeSetType"  
minOccurs="0"/>
+         <xs:element name="productDescriptionSet"  
type="tns:ProductDescriptionSetType" minOccurs="0"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="InstanceTypeSetType">
@@ -2295,7 +2347,8 @@
    <xs:element name="DeactivateLicenseResponse"  
type="tns:DeactivateLicenseResponseType"/>
    <xs:complexType name="DescribeLicensesType">
        <xs:sequence>
-         <xs:element name="licenseIdSet" type="tns:LicenseIdSetType"  
minOccurs="0" maxOccurs="1"/>
+         <xs:element name="licenseIdSet" type="tns:LicenseIdSetType"  
minOccurs="0"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="LicenseIdSetType">
@@ -2325,6 +2378,7 @@
          <xs:element name="type" type="xs:string"/>
          <xs:element name="pool" type="xs:string"/>
          <xs:element name="capacitySet" type="tns:LicenseCapacitySetType"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="LicenseCapacitySetType">
@@ -2337,7 +2391,7 @@
          <xs:element name="capacity" type="xs:int"/>
          <xs:element name="instanceCapacity" type="xs:int"/>
          <xs:element name="state" type="xs:string"/>
-         <xs:element name="earliestAllowedDeactivationTime" type="xs:dateTime"  
minOccurs="0" maxOccurs="1"/>
+         <xs:element name="earliestAllowedDeactivationTime" type="xs:dateTime"  
minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ActivateLicenseType">
@@ -2406,6 +2460,7 @@
    <xs:complexType name="DescribePlacementGroupsType">
        <xs:sequence>
          <xs:element name="placementGroupSet"  
type="tns:DescribePlacementGroupsInfoType"/>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="PlacementGroupInfoType">
@@ -2425,5 +2480,257 @@
          <xs:element name="requestId" type="xs:string"/>
          <xs:element name="placementGroupSet" type="tns:PlacementGroupSetType"/>
        </xs:sequence>
+  </xs:complexType>
+  <xs:element name="CreateTags" type="tns:CreateTagsType"/>
+  <xs:element name="CreateTagsResponse" type="tns:CreateTagsResponseType"/>
+  <xs:element name="DescribeTags" type="tns:DescribeTagsType"/>
+  <xs:element name="DescribeTagsResponse"  
type="tns:DescribeTagsResponseType"/>
+  <xs:element name="DeleteTags" type="tns:DeleteTagsType"/>
+  <xs:element name="DeleteTagsResponse" type="tns:DeleteTagsResponseType"/>
+  <xs:complexType name="ResourceIdSetType">
+       <xs:sequence>
+         <xs:element name="item" type="tns:ResourceIdSetItemType" minOccurs="0"  
maxOccurs="unbounded"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ResourceIdSetItemType">
+       <xs:sequence>
+         <xs:element name="resourceId" type="xs:string"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ResourceTagSetItemType">
+       <xs:sequence>
+         <xs:element name="key" type="xs:string"/>
+         <xs:element name="value" type="xs:string"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ResourceTagSetType">
+       <xs:sequence>
+         <xs:element name="item" type="tns:ResourceTagSetItemType" minOccurs="0"  
maxOccurs="unbounded"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="CreateTagsType">
+       <xs:sequence>
+         <xs:element name="resourcesSet" type="tns:ResourceIdSetType"/>
+         <xs:element name="tagSet" type="tns:ResourceTagSetType"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="CreateTagsResponseType">
+       <xs:sequence>
+         <xs:element name="requestId" type="xs:string"/>
+         <xs:element name="return" type="xs:boolean"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TagSetItemType">
+       <xs:sequence>
+         <xs:element name="resourceId" type="xs:string" minOccurs="0"/>
+         <xs:element name="resourceType" type="xs:string" minOccurs="0"/>
+         <xs:element name="key" type="xs:string" minOccurs="0"/>
+         <xs:element name="value" type="xs:string" minOccurs="0"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="TagSetType">
+       <xs:sequence>
+         <xs:element name="item" type="tns:TagSetItemType" minOccurs="0"  
maxOccurs="unbounded"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DescribeTagsType">
+       <xs:sequence>
+         <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DescribeTagsResponseType">
+       <xs:sequence>
+         <xs:element name="requestId" type="xs:string"/>
+         <xs:element name="tagSet" type="tns:TagSetType"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DeleteTagsSetItemType">
+       <xs:sequence>
+         <xs:element name="key" type="xs:string" minOccurs="0"/>
+         <xs:element name="value" type="xs:string" minOccurs="0"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DeleteTagsSetType">
+       <xs:sequence>
+         <xs:element name="item" type="tns:DeleteTagsSetItemType" minOccurs="0"  
maxOccurs="unbounded"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DeleteTagsType">
+       <xs:sequence>
+         <xs:element name="resourcesSet" type="tns:ResourceIdSetType"/>
+         <xs:element name="tagSet" type="tns:DeleteTagsSetType"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DeleteTagsResponseType">
+       <xs:sequence>
+         <xs:element name="requestId" type="xs:string"/>
+         <xs:element name="return" type="xs:boolean"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ImportInstance" type="tns:ImportInstanceType"/>
+  <xs:element name="ImportInstanceResponse"  
type="tns:ImportInstanceResponseType"/>
+  <xs:complexType name="ImportInstanceType">
+       <xs:sequence>
+         <xs:element name="description" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="launchSpecification"  
type="tns:ImportInstanceLaunchSpecificationType" minOccurs="1"  
maxOccurs="1"/>
+         <xs:element name="diskImageSet" type="tns:DiskImageSetType"  
minOccurs="1" maxOccurs="1"/>
+         <xs:element name="platform" type="xs:string" minOccurs="1"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ImportInstanceResponseType">
+       <xs:sequence>
+         <xs:element name="conversionTask" type="tns:ConversionTaskType"  
minOccurs="1" maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ImportInstanceLaunchSpecificationType">
+       <xs:sequence>
+         <xs:element name="architecture" type="xs:string" minOccurs="1"  
maxOccurs="1"/>
+         <xs:element name="groupSet" type="tns:GroupSetType" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="userData" type="tns:UserDataType" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="instanceType" type="xs:string"/>
+         <xs:element name="placement" type="tns:InstancePlacementType"  
minOccurs="0" maxOccurs="1"/>
+         <xs:element name="monitoring" type="tns:MonitoringInstanceType"  
minOccurs="0" maxOccurs="1"/>
+         <xs:element name="subnetId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="instanceInitiatedShutdownBehavior" type="xs:string"  
minOccurs="0" maxOccurs="1"/>
+         <xs:element name="privateIpAddress" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DiskImageSetType">
+       <xs:sequence>
+         <xs:element name="item" type="tns:DiskImageType" minOccurs="0"  
maxOccurs="unbounded"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DiskImageType">
+       <xs:sequence>
+         <xs:element name="image" type="tns:DiskImageDetailType" minOccurs="1"  
maxOccurs="1"/>
+         <xs:element name="description" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="volume" type="tns:DiskImageVolumeType" minOccurs="1"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DiskImageDetailType">
+       <xs:sequence>
+         <xs:element name="format" type="xs:string" minOccurs="1" maxOccurs="1"/>
+         <xs:element name="bytes" type="xs:long" minOccurs="1" maxOccurs="1"/>
+         <xs:element name="importManifestUrl" type="xs:string" minOccurs="1"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DiskImageVolumeType">
+       <xs:sequence>
+         <xs:element name="size" type="xs:integer"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ConversionTaskType">
+       <xs:sequence>
+         <xs:element name="conversionTaskId" type="xs:string" minOccurs="1"  
maxOccurs="1"/>
+         <xs:element name="expirationTime" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:choice>
+               <xs:element name="importVolume" type="tns:ImportVolumeTaskDetailsType"  
minOccurs="0" maxOccurs="1"/>
+               <xs:element name="importInstance"  
type="tns:ImportInstanceTaskDetailsType" minOccurs="0" maxOccurs="1"/>
+         </xs:choice>
+         <xs:element name="state" type="xs:string" minOccurs="1" maxOccurs="1"/>
+         <xs:element name="statusMessage" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ImportInstanceTaskDetailsType">
+       <xs:sequence>
+         <xs:element name="volumes" type="tns:ImportInstanceVolumeDetailSetType"  
minOccurs="1" maxOccurs="1"/>
+         <xs:element name="instanceId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="platform" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="description" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ImportVolumeTaskDetailsType">
+       <xs:sequence>
+         <xs:element name="bytesConverted" type="xs:long" minOccurs="1"  
maxOccurs="1"/>
+         <xs:element name="availabilityZone" type="xs:string" minOccurs="1"  
maxOccurs="1"/>
+         <xs:element name="description" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="image" type="tns:DiskImageDescriptionType"  
minOccurs="1" maxOccurs="1"/>
+         <xs:element name="volume" type="tns:DiskImageVolumeDescriptionType"  
minOccurs="1" maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ImportInstanceVolumeDetailSetType">
+       <xs:sequence>
+         <xs:element name="item" type="tns:ImportInstanceVolumeDetailItemType"  
minOccurs="0" maxOccurs="unbounded"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ImportInstanceVolumeDetailItemType">
+       <xs:sequence>
+         <xs:element name="bytesConverted" type="xs:long" minOccurs="1"  
maxOccurs="1"/>
+         <xs:element name="availabilityZone" type="xs:string" minOccurs="1"  
maxOccurs="1"/>
+         <xs:element name="image" type="tns:DiskImageDescriptionType"  
minOccurs="1" maxOccurs="1"/>
+         <xs:element name="description" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="volume" type="tns:DiskImageVolumeDescriptionType"  
minOccurs="1" maxOccurs="1"/>
+         <xs:element name="status" type="xs:string" minOccurs="1" maxOccurs="1"/>
+         <xs:element name="statusMessage" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DiskImageVolumeDescriptionType">
+       <xs:sequence>
+         <xs:element name="size" type="xs:integer"/>
+         <xs:element name="id" type="xs:string" minOccurs="1" maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DiskImageDescriptionType">
+       <xs:sequence>
+         <xs:element name="format" type="xs:string" minOccurs="1" maxOccurs="1"/>
+         <xs:element name="size" type="xs:long" minOccurs="1" maxOccurs="1"/>
+         <xs:element name="importManifestUrl" type="xs:string" minOccurs="1"  
maxOccurs="1"/>
+         <xs:element name="checksum" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ImportVolume" type="tns:ImportVolumeType"/>
+  <xs:element name="ImportVolumeResponse"  
type="tns:ImportVolumeResponseType"/>
+  <xs:complexType name="ImportVolumeType">
+       <xs:sequence>
+         <xs:element name="availabilityZone" type="xs:string"/>
+         <xs:element name="image" type="tns:DiskImageDetailType"/>
+         <xs:element name="description" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+         <xs:element name="volume" type="tns:DiskImageVolumeType" minOccurs="1"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ImportVolumeResponseType">
+       <xs:sequence>
+         <xs:element name="conversionTask" type="tns:ConversionTaskType"  
minOccurs="1" maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:element name="DescribeConversionTasks"  
type="tns:DescribeConversionTasksType"/>
+  <xs:element name="DescribeConversionTasksResponse"  
type="tns:DescribeConversionTasksResponseType"/>
+  <xs:complexType name="DescribeConversionTasksType">
+       <xs:sequence>
+         <xs:element name="conversionTaskIdSet"  
type="tns:ConversionTaskIdSetType" minOccurs="1" maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="DescribeConversionTasksResponseType">
+       <xs:sequence>
+         <xs:element name="conversionTasks" type="tns:ConversionTaskSetType"  
minOccurs="1" maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ConversionTaskIdSetType">
+       <xs:sequence>
+         <xs:element name="item" type="tns:ConversionTaskIdItemType"  
minOccurs="0" maxOccurs="unbounded"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ConversionTaskIdItemType">
+       <xs:sequence>
+         <xs:element name="conversionTaskId" type="xs:string" minOccurs="0"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="ConversionTaskSetType">
+       <xs:sequence>
+         <xs:element name="item" type="tns:ConversionTaskType" minOccurs="0"  
maxOccurs="unbounded"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:element name="CancelConversionTask"  
type="tns:CancelConversionTaskType"/>
+  <xs:element name="CancelConversionTaskResponse"  
type="tns:CancelConversionTaskResponseType"/>
+  <xs:complexType name="CancelConversionTaskType">
+       <xs:sequence>
+         <xs:element name="conversionTaskId" type="xs:string" minOccurs="1"  
maxOccurs="1"/>
+       </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="CancelConversionTaskResponseType">
+       <xs:sequence>
+         <xs:element name="requestId" type="xs:string"/>
+         <xs:element name="return" type="xs:boolean"/>
+       </xs:sequence>
    </xs:complexType>
  </xs:schema>


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »