http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeBundleTasksResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeBundleTasksResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeBundleTasksResponseHandler.java new file mode 100644 index 0000000..7724f5b --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeBundleTasksResponseHandler.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import java.util.Set; + +import javax.inject.Inject; + +import org.jclouds.ec2.domain.BundleTask; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.functions.ParseSax; +import org.jclouds.http.functions.ParseSax.HandlerWithResult; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import com.google.common.collect.Sets; + +public class DescribeBundleTasksResponseHandler extends ParseSax.HandlerWithResult<Set<BundleTask>> { + + private Set<BundleTask> bundleTasks = Sets.newLinkedHashSet(); + private final BundleTaskHandler bundleTaskHandler; + + @Inject + public DescribeBundleTasksResponseHandler(BundleTaskHandler bundleTaskHandler) { + this.bundleTaskHandler = bundleTaskHandler; + } + + public Set<BundleTask> getResult() { + return bundleTasks; + } + + @Override + public HandlerWithResult<Set<BundleTask>> setContext(HttpRequest request) { + bundleTaskHandler.setContext(request); + return super.setContext(request); + } + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + if (!qName.equals("item")) + bundleTaskHandler.startElement(uri, localName, qName, attributes); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + if (qName.equals("item")) { + bundleTasks.add(bundleTaskHandler.getResult()); + } + bundleTaskHandler.endElement(uri, localName, qName); + } + + public void characters(char ch[], int start, int length) { + bundleTaskHandler.characters(ch, start, length); + } + +}
http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeImagesResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeImagesResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeImagesResponseHandler.java new file mode 100644 index 0000000..8cfea0f --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeImagesResponseHandler.java @@ -0,0 +1,232 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import static org.jclouds.util.SaxUtils.currentOrNull; +import static org.jclouds.util.SaxUtils.equalsOrSuffix; + +import javax.annotation.Resource; +import javax.inject.Inject; +import java.util.Map; +import java.util.Set; + +import com.google.common.base.Supplier; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import org.jclouds.aws.util.AWSUtils; +import org.jclouds.ec2.domain.Hypervisor; +import org.jclouds.ec2.domain.Image; +import org.jclouds.ec2.domain.Image.Architecture; +import org.jclouds.ec2.domain.Image.EbsBlockDevice; +import org.jclouds.ec2.domain.Image.ImageState; +import org.jclouds.ec2.domain.Image.ImageType; +import org.jclouds.ec2.domain.RootDeviceType; +import org.jclouds.ec2.domain.VirtualizationType; +import org.jclouds.http.functions.ParseSax; +import org.jclouds.location.Region; +import org.jclouds.logging.Logger; +import org.xml.sax.Attributes; + +/** + * Parses the following XML document: + * <p/> + * DescribeImagesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/" + * + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeImages.html" + * /> + */ +public class DescribeImagesResponseHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Set<Image>> { + + @Inject + public DescribeImagesResponseHandler(@Region Supplier<String> defaultRegion, TagSetHandler tagSetHandler) { + this.defaultRegion = defaultRegion; + this.tagSetHandler = tagSetHandler; + } + + @Resource + protected Logger logger = Logger.NULL; + + protected Set<Image> contents = Sets.newLinkedHashSet(); + private StringBuilder currentText = new StringBuilder(); + private final Supplier<String> defaultRegion; + private final TagSetHandler tagSetHandler; + + private Architecture architecture; + private String name; + private String description; + private String imageId; + private String imageLocation; + private String imageOwnerId; + private ImageState imageState; + private String rawState; + private ImageType imageType; + private boolean isPublic; + private String kernelId; + private String platform; + private Set<String> productCodes = Sets.newHashSet(); + private String ramdiskId; + private boolean inProductCodes; + private boolean inBlockDeviceMapping; + private boolean inTagSet; + private RootDeviceType rootDeviceType = RootDeviceType.INSTANCE_STORE; + private Map<String, EbsBlockDevice> ebsBlockDevices = Maps.newHashMap(); + private Map<String, String> tags = Maps.newLinkedHashMap(); + private String deviceName; + private String snapshotId; + private VirtualizationType virtualizationType = VirtualizationType.PARAVIRTUAL; + private Hypervisor hypervisor = Hypervisor.XEN; + + private int volumeSize; + private boolean deleteOnTermination = true;// correct default is true. + private boolean encrypted = false; + private String volumeType; + private Integer iops; + private String rootDeviceName; + + public Set<Image> getResult() { + return contents; + } + + public void startElement(String uri, String name, String qName, Attributes attrs) { + if (qName.equals("productCodes")) { + inProductCodes = true; + } else if (qName.equals("blockDeviceMapping")) { + inBlockDeviceMapping = true; + } else if (equalsOrSuffix(qName, "tagSet")) { + inTagSet = true; + } + if (inTagSet) { + tagSetHandler.startElement(uri, name, qName, attrs); + } + } + + public void endElement(String uri, String name, String qName) { + if (equalsOrSuffix(qName, "tagSet")) { + inTagSet = false; + tags = tagSetHandler.getResult(); + } else if (inTagSet) { + tagSetHandler.endElement(uri, name, qName); + } + if (qName.equals("architecture")) { + architecture = Architecture.fromValue(currentText.toString().trim()); + // Nova Diablo uses the wrong name for this field + } else if (qName.equals("name") || qName.equals("displayName")) { + this.name = currentText.toString().trim(); + } else if (qName.equals("description")) { + description = currentText.toString().trim(); + } else if (qName.equals("imageId")) { + imageId = currentText.toString().trim(); + } else if (qName.equals("deviceName")) { + deviceName = currentText.toString().trim(); + } else if (qName.equals("imageLocation")) { + imageLocation = currentText.toString().trim(); + } else if (qName.equals("imageOwnerId")) { + imageOwnerId = currentText.toString().trim(); + } else if (qName.equals("imageState")) { + rawState = currentOrNull(currentText); + imageState = ImageState.fromValue(rawState); + } else if (qName.equals("imageType")) { + imageType = ImageType.fromValue(currentText.toString().trim()); + } else if (qName.equals("isPublic")) { + isPublic = Boolean.parseBoolean(currentText.toString().trim()); + } else if (qName.equals("kernelId")) { + kernelId = currentText.toString().trim(); + } else if (qName.equals("platform")) { + platform = currentText.toString().trim(); + } else if (qName.equals("productCode")) { + productCodes.add(currentText.toString().trim()); + } else if (qName.equals("productCodes")) { + inProductCodes = false; + } else if (qName.equals("blockDeviceMapping")) { + inBlockDeviceMapping = false; + } else if (qName.equals("snapshotId")) { + snapshotId = currentText.toString().trim(); + } else if (qName.equals("volumeSize")) { + volumeSize = Integer.parseInt(currentText.toString().trim()); + } else if (qName.equals("deleteOnTermination")) { + deleteOnTermination = Boolean.parseBoolean(currentText.toString().trim()); + } else if (qName.equals("encrypted")) { + encrypted = Boolean.parseBoolean(currentText.toString().trim()); + } else if (qName.equals("iops")) { + iops = Integer.valueOf(currentText.toString().trim()); + } else if (qName.equals("volumeType")) { + volumeType = currentText.toString().trim(); + } else if (qName.equals("ramdiskId")) { + ramdiskId = currentText.toString().trim(); + } else if (qName.equals("rootDeviceType")) { + rootDeviceType = RootDeviceType.fromValue(currentText.toString().trim()); + } else if (qName.equals("rootDeviceName")) { + rootDeviceName = currentText.toString().trim(); + } else if (qName.equals("virtualizationType")) { + virtualizationType = VirtualizationType.fromValue(currentText.toString().trim()); + } else if (qName.equals("hypervisor")) { + hypervisor = Hypervisor.fromValue(currentText.toString().trim()); + } else if (qName.equals("item")) { + if (inBlockDeviceMapping) { + ebsBlockDevices.put(deviceName, new Image.EbsBlockDevice(snapshotId, volumeSize, deleteOnTermination, + volumeType, iops, encrypted)); + this.deviceName = null; + this.snapshotId = null; + this.volumeSize = 0; + this.deleteOnTermination = true; + this.encrypted = false; + this.volumeType = null; + this.iops = null; + } else if (!inTagSet && !inProductCodes) { + try { + String region = getRequest() != null ? AWSUtils.findRegionInArgsOrNull(getRequest()) : null; + if (region == null) + region = defaultRegion.get(); + contents.add(new Image(region, architecture, this.name, description, imageId, imageLocation, + imageOwnerId, imageState, rawState, imageType, isPublic, productCodes, kernelId, platform, + ramdiskId, rootDeviceType, rootDeviceName, ebsBlockDevices, tags, virtualizationType, hypervisor)); + } catch (NullPointerException e) { + logger.warn(e, "malformed image: %s", imageId); + } + this.name = null; + this.description = null; + this.architecture = null; + this.imageId = null; + this.imageLocation = null; + this.imageOwnerId = null; + this.imageState = null; + this.rawState = null; + this.imageType = null; + this.isPublic = false; + this.kernelId = null; + this.platform = null; + this.productCodes = Sets.newHashSet(); + this.ramdiskId = null; + this.rootDeviceType = RootDeviceType.INSTANCE_STORE; + this.rootDeviceName = null; + this.ebsBlockDevices = Maps.newHashMap(); + this.virtualizationType = VirtualizationType.PARAVIRTUAL; + this.hypervisor = Hypervisor.XEN; + } + + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + if (inTagSet) { + tagSetHandler.characters(ch, start, length); + } else { + currentText.append(ch, start, length); + } + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeInstancesResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeInstancesResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeInstancesResponseHandler.java new file mode 100644 index 0000000..f154fe4 --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeInstancesResponseHandler.java @@ -0,0 +1,108 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import static org.jclouds.util.SaxUtils.equalsOrSuffix; + +import java.util.Set; + +import javax.inject.Inject; + +import org.jclouds.date.DateCodecFactory; +import org.jclouds.ec2.domain.Reservation; +import org.jclouds.ec2.domain.RunningInstance; +import org.jclouds.location.Region; +import org.xml.sax.Attributes; + +import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSet.Builder; + +/** + * Parses the following XML document: + * <p/> + * DescribeImagesResponse xmlns="http: + * + * @see <a href="http: /> + */ +public class DescribeInstancesResponseHandler extends + BaseReservationHandler<Set<Reservation<? extends RunningInstance>>> { + private final TagSetHandler tagSetHandler; + private Builder<Reservation<? extends RunningInstance>> reservations = ImmutableSet + .<Reservation<? extends RunningInstance>> builder(); + private boolean inTagSet; + + @Inject + DescribeInstancesResponseHandler(DateCodecFactory dateCodecFactory, @Region Supplier<String> defaultRegion, + TagSetHandler tagSetHandler) { + super(dateCodecFactory, defaultRegion); + this.tagSetHandler = tagSetHandler; + } + + @Override + public void startElement(String uri, String name, String qName, Attributes attrs) { + super.startElement(uri, name, qName, attrs); + if (equalsOrSuffix(qName, "tagSet")) { + inTagSet = true; + } + if (inTagSet) { + tagSetHandler.startElement(uri, name, qName, attrs); + } + } + + @Override + public void characters(char ch[], int start, int length) { + if (inTagSet) { + tagSetHandler.characters(ch, start, length); + } else { + super.characters(ch, start, length); + } + } + + @Override + public void endElement(String uri, String name, String qName) { + if (equalsOrSuffix(qName, "tagSet")) { + inTagSet = false; + builder.tags(tagSetHandler.getResult()); + } else if (inTagSet) { + tagSetHandler.endElement(uri, name, qName); + } + super.endElement(uri, name, qName); + } + + @Override + public Set<Reservation<? extends RunningInstance>> getResult() { + return reservations.build(); + } + + protected boolean endOfReservationItem() { + return itemDepth == 1; + } + + @Override + protected void inItem() { + if (endOfReservationItem()) { + reservations.add(super.newReservation()); + } else { + super.inItem(); + } + } + + protected boolean endOfInstanceItem() { + return itemDepth == 2 && inInstancesSet; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeKeyPairsResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeKeyPairsResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeKeyPairsResponseHandler.java new file mode 100644 index 0000000..b3a19df --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeKeyPairsResponseHandler.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import static org.jclouds.util.SaxUtils.currentOrNull; + +import java.util.Set; + +import javax.inject.Inject; + +import org.jclouds.aws.util.AWSUtils; +import org.jclouds.ec2.domain.KeyPair; +import org.jclouds.ec2.domain.KeyPair.Builder; +import org.jclouds.http.functions.ParseSax; +import org.jclouds.location.Region; + +import com.google.common.base.Supplier; +import com.google.common.collect.Sets; + +/** + * Parses: DescribeKeyPairsResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/" + * + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeKeyPairs.html" + * /> + */ +public class DescribeKeyPairsResponseHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Set<KeyPair>> { + private final Supplier<String> defaultRegion; + private Builder builder; + + @Inject + public DescribeKeyPairsResponseHandler(@Region Supplier<String> defaultRegion) { + this.defaultRegion = defaultRegion; + } + + @Override + public void startDocument() { + builder = KeyPair.builder().region(defaultRegion.get()); + } + + private StringBuilder currentText = new StringBuilder(); + private Set<KeyPair> keyPairs = Sets.newLinkedHashSet(); + + public Set<KeyPair> getResult() { + return keyPairs; + } + + public void endElement(String uri, String name, String qName) { + + if (qName.equals("keyFingerprint")) { + builder.sha1OfPrivateKey(currentOrNull(currentText)); + } else if (qName.equals("item")) { + String region = AWSUtils.findRegionInArgsOrNull(getRequest()); + if (region != null) + builder.region(region); + try { + keyPairs.add(builder.build()); + } finally { + builder = KeyPair.builder().region(defaultRegion.get()); + } + } else if (qName.equals("keyName")) { + builder.keyName(currentOrNull(currentText)); + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeRegionsResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeRegionsResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeRegionsResponseHandler.java new file mode 100644 index 0000000..b0dab5e --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeRegionsResponseHandler.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import java.net.URI; +import java.util.Map; + +import javax.annotation.Resource; + +import org.jclouds.http.functions.ParseSax; +import org.jclouds.logging.Logger; + +import com.google.common.collect.Maps; + +public class DescribeRegionsResponseHandler extends ParseSax.HandlerWithResult<Map<String, URI>> { + private StringBuilder currentText = new StringBuilder(); + + private Map<String, URI> regionEndpoints = Maps.newHashMap(); + private String region; + private URI regionEndpoint; + @Resource + protected Logger logger = Logger.NULL; + + public Map<String, URI> getResult() { + return regionEndpoints; + } + + public void endElement(String uri, String name, String qName) { + if (qName.equals("regionName")) { + String pending = currentText.toString().trim(); + if (pending.indexOf("Walrus") == -1) + region = pending; + // Nova uses regionUrl + } else if (qName.equals("regionEndpoint") || qName.equals("regionUrl")) { + String pending = currentText.toString().trim(); + if (pending.indexOf("Walrus") == -1) + regionEndpoint = URI.create(pending.startsWith("http") ? pending : String.format("https://%s", pending)); + } else if (qName.equals("item") && region != null && regionEndpoint != null) { + regionEndpoints.put(region, regionEndpoint); + this.region = null; + this.regionEndpoint = null; + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSecurityGroupsResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSecurityGroupsResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSecurityGroupsResponseHandler.java new file mode 100644 index 0000000..abd7fd4 --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSecurityGroupsResponseHandler.java @@ -0,0 +1,125 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import static org.jclouds.util.SaxUtils.equalsOrSuffix; + +import java.util.Set; + +import javax.inject.Inject; + +import org.jclouds.ec2.domain.SecurityGroup; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.functions.ParseSax; +import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSet.Builder; + +/** + * Parses: DescribeSecurityGroupsResponse + * xmlns="http://ec2.amazonaws.com/doc/2010-08-31/" + * + * @see <a href= + * "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribesecurityGroupInfo.html" + * /> + */ +public class DescribeSecurityGroupsResponseHandler extends + ParseSax.HandlerForGeneratedRequestWithResult<Set<SecurityGroup>> { + + private final SecurityGroupHandler securityGroupHandler; + + private StringBuilder currentText = new StringBuilder(); + private Builder<SecurityGroup> securityGroups = ImmutableSet.<SecurityGroup> builder(); + private boolean inSecurityGroupInfo; + + protected int itemDepth; + + @Inject + public DescribeSecurityGroupsResponseHandler(SecurityGroupHandler securityGroupHandler) { + this.securityGroupHandler = securityGroupHandler; + } + + @Override + public HandlerForGeneratedRequestWithResult<Set<SecurityGroup>> setContext(HttpRequest request) { + securityGroupHandler.setContext(request); + return super.setContext(request); + } + + /** + * {@inheritDoc} + */ + @Override + public Set<SecurityGroup> getResult() { + return securityGroups.build(); + } + + /** + * {@inheritDoc} + */ + @Override + public void startElement(String url, String name, String qName, Attributes attributes) throws SAXException { + if (equalsOrSuffix(qName, "item")) { + itemDepth++; + } else if (equalsOrSuffix(qName, "securityGroupInfo")) { + inSecurityGroupInfo = true; + } + if (inSecurityGroupInfo) { + securityGroupHandler.startElement(url, name, qName, attributes); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void endElement(String uri, String name, String qName) throws SAXException { + if (equalsOrSuffix(qName, "item")) { + endItem(uri, name, qName); + itemDepth--; + } else if (equalsOrSuffix(qName, "securityGroupInfo")) { + inSecurityGroupInfo = false; + } else if (inSecurityGroupInfo) { + securityGroupHandler.endElement(uri, name, qName); + } + currentText = new StringBuilder(); + } + + protected void endItem(String uri, String name, String qName) throws SAXException { + if (inSecurityGroupInfo) { + if (itemDepth == 1) + securityGroups.add(securityGroupHandler.getResult()); + else + securityGroupHandler.endElement(uri, name, qName); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void characters(char ch[], int start, int length) { + if (inSecurityGroupInfo) { + securityGroupHandler.characters(ch, start, length); + } else { + currentText.append(ch, start, length); + } + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSnapshotsResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSnapshotsResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSnapshotsResponseHandler.java new file mode 100644 index 0000000..4aa1f70 --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSnapshotsResponseHandler.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import java.util.Set; + +import javax.inject.Inject; + +import org.jclouds.ec2.domain.Snapshot; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.functions.ParseSax; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import com.google.common.collect.Sets; + +public class DescribeSnapshotsResponseHandler extends ParseSax.HandlerWithResult<Set<Snapshot>> { + + private Set<Snapshot> snapshots = Sets.newLinkedHashSet(); + private final SnapshotHandler snapshotHandler; + private int itemDepth = 0; + + @Inject + public DescribeSnapshotsResponseHandler(SnapshotHandler snapshotHandler) { + this.snapshotHandler = snapshotHandler; + } + + public Set<Snapshot> getResult() { + return snapshots; + } + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException { + itemDepth++; + snapshotHandler.startElement(uri, localName, qName, attributes); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + snapshotHandler.endElement(uri, localName, qName); + itemDepth--; + + if (qName.equals("item") && itemDepth == 2) { + this.snapshots.add(snapshotHandler.getResult()); + } + } + + public void characters(char ch[], int start, int length) { + snapshotHandler.characters(ch, start, length); + } + + @Override + public DescribeSnapshotsResponseHandler setContext(HttpRequest request) { + snapshotHandler.setContext(request); + super.setContext(request); + return this; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSubnetsResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSubnetsResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSubnetsResponseHandler.java new file mode 100644 index 0000000..cac4b2d --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeSubnetsResponseHandler.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import static org.jclouds.util.SaxUtils.equalsOrSuffix; + +import org.jclouds.ec2.domain.Subnet; +import org.jclouds.http.functions.ParseSax; +import org.xml.sax.Attributes; + +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSet.Builder; +import com.google.inject.Inject; + +/** + * @see <a href="http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSubnets.html" >xml</a> + */ +public class DescribeSubnetsResponseHandler extends + ParseSax.HandlerForGeneratedRequestWithResult<FluentIterable<Subnet>> { + private final SubnetHandler subnetHandler; + + private StringBuilder currentText = new StringBuilder(); + private boolean inSubnetSet; + private boolean inTagSet; + private Builder<Subnet> subnets = ImmutableSet.<Subnet> builder(); + + @Inject + public DescribeSubnetsResponseHandler(SubnetHandler subnetHandler) { + this.subnetHandler = subnetHandler; + } + + @Override + public FluentIterable<Subnet> getResult() { + return FluentIterable.from(subnets.build()); + } + + @Override + public void startElement(String url, String name, String qName, Attributes attributes) { + if (equalsOrSuffix(qName, "subnetSet")) { + inSubnetSet = true; + } else if (inSubnetSet) { + if (equalsOrSuffix(qName, "tagSet")) { + inTagSet = true; + } + subnetHandler.startElement(url, name, qName, attributes); + } + } + + @Override + public void endElement(String uri, String name, String qName) { + if (equalsOrSuffix(qName, "subnetSet")) { + inSubnetSet = false; + } else if (equalsOrSuffix(qName, "tagSet")) { + inTagSet = false; + subnetHandler.endElement(uri, name, qName); + } else if (equalsOrSuffix(qName, "item") && !inTagSet) { + subnets.add(subnetHandler.getResult()); + } else if (inSubnetSet) { + subnetHandler.endElement(uri, name, qName); + } + + currentText = new StringBuilder(); + } + + @Override + public void characters(char ch[], int start, int length) { + if (inSubnetSet) { + subnetHandler.characters(ch, start, length); + } else { + currentText.append(ch, start, length); + } + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeTagsResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeTagsResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeTagsResponseHandler.java new file mode 100644 index 0000000..9efd6fb --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeTagsResponseHandler.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import static org.jclouds.util.SaxUtils.equalsOrSuffix; + +import org.jclouds.ec2.domain.Tag; +import org.jclouds.http.functions.ParseSax; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSet.Builder; +import com.google.inject.Inject; + +/** + * @see <a + * href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeTags.html" + * >xml</a> + */ +public class DescribeTagsResponseHandler extends ParseSax.HandlerForGeneratedRequestWithResult<FluentIterable<Tag>> { + + private final TagHandler tagHander; + + private StringBuilder currentText = new StringBuilder(); + private Builder<Tag> tags = ImmutableSet.<Tag> builder(); + private boolean inTags; + + @Inject + public DescribeTagsResponseHandler(TagHandler tagHander) { + this.tagHander = tagHander; + } + + /** + * {@inheritDoc} + */ + @Override + public FluentIterable<Tag> getResult() { + return FluentIterable.from(tags.build()); + } + + /** + * {@inheritDoc} + */ + @Override + public void startElement(String url, String name, String qName, Attributes attributes) throws SAXException { + if (equalsOrSuffix(qName, "tagSet")) { + inTags = true; + } + if (inTags) { + tagHander.startElement(url, name, qName, attributes); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void endElement(String uri, String name, String qName) throws SAXException { + if (equalsOrSuffix(qName, "tagSet")) { + inTags = false; + } else if (equalsOrSuffix(qName, "item")) { + tags.add(tagHander.getResult()); + } else if (inTags) { + tagHander.endElement(uri, name, qName); + } + currentText = new StringBuilder(); + } + + /** + * {@inheritDoc} + */ + @Override + public void characters(char ch[], int start, int length) { + if (inTags) { + tagHander.characters(ch, start, length); + } else { + currentText.append(ch, start, length); + } + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeVolumesResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeVolumesResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeVolumesResponseHandler.java new file mode 100644 index 0000000..aa51fa3 --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/DescribeVolumesResponseHandler.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import java.util.Set; + +import javax.inject.Inject; + +import org.jclouds.ec2.domain.Volume; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.functions.ParseSax; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import com.google.common.collect.Sets; + +public class DescribeVolumesResponseHandler extends ParseSax.HandlerWithResult<Set<Volume>> { + + private Set<Volume> volumes = Sets.newLinkedHashSet(); + private final CreateVolumeResponseHandler volumeHandler; + + private boolean inAttachmentSet; + + @Inject + public DescribeVolumesResponseHandler(CreateVolumeResponseHandler volumeHandler) { + this.volumeHandler = volumeHandler; + } + + public Set<Volume> getResult() { + return volumes; + } + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) + throws SAXException { + if (qName.equals("attachmentSet")) { + inAttachmentSet = true; + } + volumeHandler.startElement(uri, localName, qName, attributes); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + volumeHandler.endElement(uri, localName, qName); + if (qName.equals("attachmentSet")) { + inAttachmentSet = false; + } else if (qName.equals("item") && !inAttachmentSet) { + this.volumes.add(volumeHandler.getResult()); + } + } + + public void characters(char ch[], int start, int length) { + volumeHandler.characters(ch, start, length); + } + + @Override + public DescribeVolumesResponseHandler setContext(HttpRequest request) { + volumeHandler.setContext(request); + super.setContext(request); + return this; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/GetConsoleOutputResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/GetConsoleOutputResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/GetConsoleOutputResponseHandler.java new file mode 100644 index 0000000..3c342b1 --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/GetConsoleOutputResponseHandler.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import static com.google.common.base.Charsets.UTF_8; +import static com.google.common.io.BaseEncoding.base64; + +import java.util.regex.Pattern; + +import org.jclouds.http.functions.ParseSax; + +/** + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-GetConsoleOutput.html"> + * ApiReference query GetConsoleOutput</a> + */ +public class GetConsoleOutputResponseHandler extends ParseSax.HandlerWithResult<String> { + + private StringBuilder currentText = new StringBuilder(); + private String output; + + @Override + public String getResult() { + return output; + } + + private static final Pattern whitespace = Pattern.compile("\\s"); + + @Override + public void endElement(String uri, String name, String qName) { + if (qName.equalsIgnoreCase("output")) { + this.output = new String(base64().decode(whitespace.matcher(currentText).replaceAll("")), UTF_8); + } + currentText = new StringBuilder(); + } + + @Override + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/GetPasswordDataResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/GetPasswordDataResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/GetPasswordDataResponseHandler.java new file mode 100644 index 0000000..124af5e --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/GetPasswordDataResponseHandler.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import javax.inject.Inject; + +import org.jclouds.date.DateCodec; +import org.jclouds.date.DateCodecFactory; +import org.jclouds.ec2.domain.PasswordData; +import org.jclouds.http.functions.ParseSax; + +public class GetPasswordDataResponseHandler extends ParseSax.HandlerWithResult<PasswordData> { + protected final DateCodec dateCodec; + + + @Inject + protected GetPasswordDataResponseHandler(DateCodecFactory dateCodecFactory) { + this.dateCodec = dateCodecFactory.iso8601(); + } + + private StringBuilder currentText = new StringBuilder(); + private PasswordData.Builder builder = PasswordData.builder(); + + @Override + public PasswordData getResult() { + return builder.build(); + } + + public void endElement(String uri, String name, String qName) { + if (qName.equals("instanceId")) { + builder.instanceId(currentText.toString().trim()); + } else if (qName.equals("timestamp")) { + builder.timestamp(dateCodec.toDate(currentText.toString().trim())); + } else if (qName.equals("passwordData")) { + builder.passwordData(currentText.toString().trim()); + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/ImageIdHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/ImageIdHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/ImageIdHandler.java new file mode 100644 index 0000000..9d1939c --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/ImageIdHandler.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import org.jclouds.http.functions.ParseSax; + +/** + * + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-RegisterImage.html" + * /> + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-CreateImage.html" + * /> + */ +public class ImageIdHandler extends ParseSax.HandlerWithResult<String> { + + private StringBuilder currentText = new StringBuilder(); + private String imageId; + + public String getResult() { + return imageId; + } + + public void endElement(String uri, String name, String qName) { + + if (qName.equalsIgnoreCase("ImageId")) { + this.imageId = currentText.toString().trim(); + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceInitiatedShutdownBehaviorHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceInitiatedShutdownBehaviorHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceInitiatedShutdownBehaviorHandler.java new file mode 100644 index 0000000..1fb81b6 --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceInitiatedShutdownBehaviorHandler.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import org.jclouds.ec2.domain.Volume.InstanceInitiatedShutdownBehavior; +import org.jclouds.http.functions.ParseSax; + +/** + * + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeInstanceAttribute.html" + * /> + */ +public class InstanceInitiatedShutdownBehaviorHandler extends + ParseSax.HandlerWithResult<InstanceInitiatedShutdownBehavior> { + + private StringBuilder currentText = new StringBuilder(); + private InstanceInitiatedShutdownBehavior behavior; + + public InstanceInitiatedShutdownBehavior getResult() { + return behavior; + } + + public void endElement(String uri, String name, String qName) { + if (qName.equalsIgnoreCase("value")) { + this.behavior = InstanceInitiatedShutdownBehavior.fromValue(currentText.toString().trim()); + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceStateChangeHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceStateChangeHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceStateChangeHandler.java new file mode 100644 index 0000000..5290e6b --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceStateChangeHandler.java @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import java.util.Set; + +import javax.inject.Inject; + +import org.jclouds.aws.util.AWSUtils; +import org.jclouds.ec2.domain.InstanceState; +import org.jclouds.ec2.domain.InstanceStateChange; +import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult; +import org.jclouds.location.Region; +import org.xml.sax.Attributes; + +import com.google.common.base.Supplier; +import com.google.common.collect.Sets; + +/** + * Parses the following XML document: + * <p/> + * TerminateInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/" + * StartInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/" StopInstancesResponse + * xmlns="http://ec2.amazonaws.com/doc/2010-08-31/" + * + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-TerminateInstancesResponseInfoType.html" + * /> + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-StartInstancesResponseInfoType.html" + * /> + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-StopInstancesResponseInfoType.html" + * /> + */ +public class InstanceStateChangeHandler extends + HandlerForGeneratedRequestWithResult<Set<InstanceStateChange>> { + private StringBuilder currentText = new StringBuilder(); + @Inject + @Region + Supplier<String> defaultRegion; + + Set<InstanceStateChange> instances = Sets.newLinkedHashSet(); + private InstanceState shutdownState; + private InstanceState previousState; + private String instanceId; + + private boolean inCurrentState; + + private boolean inPreviousState; + + @Override + public Set<InstanceStateChange> getResult() { + return instances; + } + + public void startElement(String uri, String name, String qName, Attributes attrs) { + if (qName.equals("shutdownState") || qName.equals("currentState")) { + inCurrentState = true; + } else if (qName.equals("previousState")) { + inPreviousState = true; + } + } + + public void endElement(String uri, String name, String qName) { + + if (qName.equals("instanceId")) { + this.instanceId = currentOrNull(); + } else if (qName.equals("shutdownState") || qName.equals("currentState")) { + inCurrentState = false; + } else if (qName.equals("previousState")) { + inPreviousState = false; + } else if (qName.equals("name")) { + if (inCurrentState) { + shutdownState = InstanceState.fromValue(currentOrNull()); + } else if (inPreviousState) { + previousState = InstanceState.fromValue(currentOrNull()); + } + } else if (qName.equals("item")) { + String region = AWSUtils.findRegionInArgsOrNull(getRequest()); + if (region == null) + region = defaultRegion.get(); + instances.add(new InstanceStateChange(region, instanceId, shutdownState, previousState)); + this.instanceId = null; + this.shutdownState = null; + this.previousState = null; + } + + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } + + protected String currentOrNull() { + String returnVal = currentText.toString().trim(); + return returnVal.equals("") ? null : returnVal; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceTypeHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceTypeHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceTypeHandler.java new file mode 100644 index 0000000..6572c0e --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/InstanceTypeHandler.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import org.jclouds.http.functions.ParseSax; + +/** + * + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeInstanceAttribute.html" + * /> + */ +public class InstanceTypeHandler extends + ParseSax.HandlerWithResult<String> { + + private StringBuilder currentText = new StringBuilder(); + private String type; + + public String getResult() { + return type; + } + + public void endElement(String uri, String name, String qName) { + if (qName.equalsIgnoreCase("value")) { + this.type = currentText.toString().trim(); + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/IpPermissionHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/IpPermissionHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/IpPermissionHandler.java new file mode 100644 index 0000000..83393fb --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/IpPermissionHandler.java @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import static org.jclouds.util.SaxUtils.currentOrNull; +import static org.jclouds.util.SaxUtils.equalsOrSuffix; + +import org.jclouds.http.functions.ParseSax; +import org.jclouds.net.domain.IpPermission; +import org.jclouds.net.domain.IpProtocol; +import org.xml.sax.SAXException; + +public class IpPermissionHandler extends ParseSax.HandlerForGeneratedRequestWithResult<IpPermission> { + + private StringBuilder currentText = new StringBuilder(); + private IpPermission.Builder builder = IpPermission.builder(); + + /** + * {@inheritDoc} + */ + @Override + public IpPermission getResult() { + try { + return builder.build(); + } finally { + builder = IpPermission.builder(); + } + } + + private String userId; + private String groupId; + + /** + * {@inheritDoc} + */ + @Override + public void endElement(String uri, String name, String qName) throws SAXException { + if (equalsOrSuffix(qName, "ipProtocol")) { + // Algorete: ipProtocol can be an empty tag on EC2 clone (e.g. + // OpenStack EC2) + builder.ipProtocol(IpProtocol.fromValue(currentOrNegative(currentText))); + } else if (equalsOrSuffix(qName, "fromPort")) { + // Algorete: fromPort can be an empty tag on EC2 clone (e.g. OpenStack + // EC2) + builder.fromPort(Integer.parseInt(currentOrNegative(currentText))); + } else if (equalsOrSuffix(qName, "toPort")) { + // Algorete: toPort can be an empty tag on EC2 clone (e.g. OpenStack + // EC2) + builder.toPort(Integer.parseInt(currentOrNegative(currentText))); + } else if (equalsOrSuffix(qName, "cidrIp")) { + builder.cidrBlock(currentOrNull(currentText)); + } else if (equalsOrSuffix(qName, "userId")) { + this.userId = currentOrNull(currentText); + } else if (equalsOrSuffix(qName, "groupName") || equalsOrSuffix(qName, "groupId")) { + this.groupId = currentOrNull(currentText); + } else if (equalsOrSuffix(qName, "item")) { + if (userId != null && groupId != null) + builder.tenantIdGroupNamePair(userId, groupId); + userId = groupId = null; + } + currentText = new StringBuilder(); + } + + private static String currentOrNegative(StringBuilder currentText) { + String returnVal = currentText.toString().trim(); + return returnVal.equals("") ? "-1" : returnVal; + } + /** + * {@inheritDoc} + */ + @Override + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/KeyPairResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/KeyPairResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/KeyPairResponseHandler.java new file mode 100644 index 0000000..59f8f8f --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/KeyPairResponseHandler.java @@ -0,0 +1,78 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import static org.jclouds.util.SaxUtils.currentOrNull; + +import javax.inject.Inject; + +import org.jclouds.aws.util.AWSUtils; +import org.jclouds.ec2.domain.KeyPair; +import org.jclouds.ec2.domain.KeyPair.Builder; +import org.jclouds.http.functions.ParseSax; +import org.jclouds.location.Region; + +import com.google.common.base.Supplier; + +/** + * + * @see <a href= + * "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html" + * /> + */ +public class KeyPairResponseHandler extends ParseSax.HandlerForGeneratedRequestWithResult<KeyPair> { + private final Supplier<String> defaultRegion; + private Builder builder; + + @Inject + public KeyPairResponseHandler(@Region Supplier<String> defaultRegion) { + this.defaultRegion = defaultRegion; + } + + @Override + public void startDocument() { + builder = KeyPair.builder().region(defaultRegion.get()); + } + + private StringBuilder currentText = new StringBuilder(); + + public KeyPair getResult() { + String region = AWSUtils.findRegionInArgsOrNull(getRequest()); + if (region != null) + builder.region(region); + try { + return builder.build(); + } finally { + builder = KeyPair.builder().region(defaultRegion.get()); + } + } + + public void endElement(String uri, String name, String qName) { + if (qName.equals("keyFingerprint")) { + builder.sha1OfPrivateKey(currentOrNull(currentText)); + } else if (qName.equals("keyMaterial")) { + builder.keyMaterial(currentOrNull(currentText)); + } else if (qName.equals("keyName")) { + builder.keyName(currentOrNull(currentText)); + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/PermissionHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/PermissionHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/PermissionHandler.java new file mode 100644 index 0000000..0eef83f --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/PermissionHandler.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import java.util.Set; + +import org.jclouds.ec2.domain.Permission; +import org.jclouds.http.functions.ParseSax; + +import com.google.common.collect.Sets; + +/** + * + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeImageAttribute.html" + * /> + */ +public class PermissionHandler extends ParseSax.HandlerWithResult<Permission> { + + private StringBuilder currentText = new StringBuilder(); + private Set<String> userIds = Sets.newHashSet(); + private Set<String> groups = Sets.newHashSet(); + + public Permission getResult() { + return new Permission(userIds, groups); + } + + public void endElement(String uri, String name, String qName) { + + if (qName.equalsIgnoreCase("group")) { + groups.add(currentText.toString().trim()); + } else if (qName.equalsIgnoreCase("userId")) { + userIds.add(currentText.toString().trim()); + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/RunInstancesResponseHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/RunInstancesResponseHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/RunInstancesResponseHandler.java new file mode 100644 index 0000000..4593989 --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/RunInstancesResponseHandler.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import javax.inject.Inject; + +import org.jclouds.date.DateCodecFactory; +import org.jclouds.ec2.domain.Reservation; +import org.jclouds.ec2.domain.RunningInstance; +import org.jclouds.location.Region; + +import com.google.common.base.Supplier; + +/** + * Parses the following XML document: + * <p/> + * RunInstancesResponse xmlns="http: + * + * @see <a href="http: /> + */ +public class RunInstancesResponseHandler extends BaseReservationHandler<Reservation<? extends RunningInstance>> { + + @Inject + public RunInstancesResponseHandler(DateCodecFactory dateCodecFactory, @Region Supplier<String> defaultRegion) { + super(dateCodecFactory, defaultRegion); + } + + @Override + public Reservation<? extends RunningInstance> getResult() { + return newReservation(); + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/SecurityGroupHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/SecurityGroupHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/SecurityGroupHandler.java new file mode 100644 index 0000000..f5ea378 --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/SecurityGroupHandler.java @@ -0,0 +1,140 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import static org.jclouds.util.SaxUtils.currentOrNull; +import static org.jclouds.util.SaxUtils.equalsOrSuffix; + +import org.jclouds.aws.util.AWSUtils; +import org.jclouds.ec2.domain.SecurityGroup; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.functions.ParseSax; +import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult; +import org.jclouds.location.Region; +import org.jclouds.rest.internal.GeneratedHttpRequest; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import com.google.common.base.Supplier; +import com.google.inject.Inject; + +public class SecurityGroupHandler extends ParseSax.HandlerForGeneratedRequestWithResult<SecurityGroup> { + + protected final IpPermissionHandler ipPermissionHandler; + protected final Supplier<String> defaultRegion; + + protected StringBuilder currentText = new StringBuilder(); + protected SecurityGroup.Builder<?> builder; + protected boolean inIpPermissions; + + protected int itemDepth; + + protected String region; + + @Inject + public SecurityGroupHandler(IpPermissionHandler ipPermissionHandler, @Region Supplier<String> defaultRegion) { + this.ipPermissionHandler = ipPermissionHandler; + this.defaultRegion = defaultRegion; + } + + protected SecurityGroup.Builder<?> builder() { + return SecurityGroup.builder().region(region); + } + + @Override + public HandlerForGeneratedRequestWithResult<SecurityGroup> setContext(HttpRequest request) { + region = AWSUtils.findRegionInArgsOrNull(GeneratedHttpRequest.class.cast(request)); + if (region == null) + region = defaultRegion.get(); + builder = builder(); + return super.setContext(request); + } + + /** + * {@inheritDoc} + */ + @Override + public SecurityGroup getResult() { + try { + return builder.build(); + } finally { + builder = builder(); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void startElement(String url, String name, String qName, Attributes attributes) throws SAXException { + if (equalsOrSuffix(qName, "item")) { + itemDepth++; + } else if (equalsOrSuffix(qName, "ipPermissions")) { + inIpPermissions = true; + } + if (inIpPermissions) { + ipPermissionHandler.startElement(url, name, qName, attributes); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void endElement(String uri, String name, String qName) throws SAXException { + if (equalsOrSuffix(qName, "item")) { + endItem(uri, name, qName); + itemDepth--; + } else if (equalsOrSuffix(qName, "ipPermissions")) { + inIpPermissions = false; + itemDepth = 0; + } else if (inIpPermissions) { + ipPermissionHandler.endElement(uri, name, qName); + } else if (equalsOrSuffix(qName, "groupName")) { + builder.name(currentOrNull(currentText)); + } else if (equalsOrSuffix(qName, "groupId")) { + builder.id(currentOrNull(currentText)); + } else if (equalsOrSuffix(qName, "ownerId")) { + builder.ownerId(currentOrNull(currentText)); + } else if (equalsOrSuffix(qName, "groupDescription")) { + builder.description(currentOrNull(currentText)); + } + currentText = new StringBuilder(); + } + + protected void endItem(String uri, String name, String qName) throws SAXException { + if (inIpPermissions) { + if (itemDepth == 2) + builder.ipPermission(ipPermissionHandler.getResult()); + else + ipPermissionHandler.endElement(uri, name, qName); + } + } + + /** + * {@inheritDoc} + */ + @Override + public void characters(char ch[], int start, int length) { + if (inIpPermissions) { + ipPermissionHandler.characters(ch, start, length); + } else { + currentText.append(ch, start, length); + } + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/SnapshotHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/SnapshotHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/SnapshotHandler.java new file mode 100644 index 0000000..bf4ebc6 --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/SnapshotHandler.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import java.util.Date; + +import javax.inject.Inject; + +import org.jclouds.aws.util.AWSUtils; +import org.jclouds.date.DateCodec; +import org.jclouds.date.DateCodecFactory; +import org.jclouds.ec2.domain.Snapshot; +import org.jclouds.ec2.domain.Snapshot.Status; +import org.jclouds.http.functions.ParseSax; +import org.jclouds.location.Region; + +import com.google.common.base.Supplier; + +public class SnapshotHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Snapshot> { + private StringBuilder currentText = new StringBuilder(); + + protected final DateCodec dateCodec; + protected final Supplier<String> defaultRegion; + + private String id; + private String volumeId; + private int volumeSize; + private Status status; + private Date startTime; + private int progress; + private String ownerId; + private String description; + private String ownerAlias; + + @Inject + public SnapshotHandler(DateCodecFactory dateCodecFactory, @Region Supplier<String> defaultRegion) { + this.dateCodec = dateCodecFactory.iso8601(); + this.defaultRegion = defaultRegion; + } + + public Snapshot getResult() { + String region = AWSUtils.findRegionInArgsOrNull(getRequest()); + if (region == null) + region = defaultRegion.get(); + Snapshot snapshot = new Snapshot(region, id, volumeId, volumeSize, status, startTime, + progress, ownerId, description, ownerAlias); + this.id = null; + this.volumeId = null; + this.volumeSize = 0; + this.status = null; + this.startTime = null; + this.progress = 0; + this.ownerId = null; + this.description = null; + this.ownerAlias = null; + return snapshot; + } + + public void endElement(String uri, String name, String qName) { + if (qName.equals("snapshotId")) { + id = currentText.toString().trim(); + } else if (qName.equals("volumeId")) { + volumeId = currentText.toString().trim(); + } else if (qName.equals("volumeSize")) { + volumeSize = Integer.parseInt(currentText.toString().trim()); + } else if (qName.equals("status")) { + status = Snapshot.Status.fromValue(currentText.toString().trim()); + } else if (qName.equals("startTime")) { + startTime = dateCodec.toDate(currentText.toString().trim()); + } else if (qName.equals("progress")) { + String progressString = currentText.toString().trim(); + if (!progressString.equals("")) { + progressString = progressString.substring(0, progressString.length() - 1); + progress = Integer.parseInt(progressString); + } + } else if (qName.equals("ownerId")) { + ownerId = currentText.toString().trim(); + } else if (qName.equals("description")) { + description = currentText.toString().trim(); + } else if (qName.equals("ownerAlias")) { + ownerAlias = currentText.toString().trim(); + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/StringValueHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/StringValueHandler.java b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/StringValueHandler.java new file mode 100644 index 0000000..5e1d0e5 --- /dev/null +++ b/dependencies/jclouds/apis/ec2/1.8.0-stratos/src/main/java/org/jclouds/ec2/xml/StringValueHandler.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.ec2.xml; + +import org.jclouds.http.functions.ParseSax; + +/** + * + * @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeInstanceAttribute.html" + * /> + */ +public class StringValueHandler extends + ParseSax.HandlerWithResult<String> { + + private StringBuilder currentText = new StringBuilder(); + private String value; + + public String getResult() { + return value; + } + + public void endElement(String uri, String name, String qName) { + if (qName.equalsIgnoreCase("value")) { + this.value = currentText.toString().trim(); + } + currentText = new StringBuilder(); + } + + public void characters(char ch[], int start, int length) { + currentText.append(ch, start, length); + } +}
