blob: 80030dc5d6915452f3acc5b3ccb3ca138d786138 [file] [log] [blame]
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.aws.ec2.xml;
import static org.jclouds.util.SaxUtils.equalsOrSuffix;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.jclouds.aws.ec2.domain.LaunchSpecification;
import org.jclouds.aws.ec2.domain.LaunchSpecification.Builder;
import org.jclouds.date.DateCodec;
import org.jclouds.date.DateCodecFactory;
import org.jclouds.ec2.domain.BlockDeviceMapping;
import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult;
import org.jclouds.logging.Logger;
import org.xml.sax.Attributes;
/**
*
* @author Adrian Cole
*/
public class LaunchSpecificationHandler extends HandlerForGeneratedRequestWithResult<LaunchSpecification> {
@Resource
protected Logger logger = Logger.NULL;
protected final DateCodec dateCodec;
protected final Builder builder;
protected final BlockDeviceMapping.Builder blockDeviceMappingBuilder;
@Inject
public LaunchSpecificationHandler(DateCodecFactory dateCodecFactory, LaunchSpecification.Builder builder,
BlockDeviceMapping.Builder blockDeviceMappingBuilder) {
this.dateCodec = dateCodecFactory.iso8601();
this.builder = builder;
this.blockDeviceMappingBuilder = blockDeviceMappingBuilder;
}
protected String currentOrNull() {
String returnVal = currentText.toString().trim();
return returnVal.equals("") ? null : returnVal;
}
protected StringBuilder currentText = new StringBuilder();
private boolean inBlockDeviceMapping;
private boolean inIamInstanceProfile;
private String groupId;
public void startElement(String uri, String name, String qName, Attributes attrs) {
if (qName.equals("blockDeviceMapping")) {
inBlockDeviceMapping = true;
} else if (equalsOrSuffix(qName, "iamInstanceProfile")) {
inIamInstanceProfile = true;
}
}
public void endElement(String uri, String name, String qName) {
if (qName.equals("blockDeviceMapping")) {
inBlockDeviceMapping = false;
} else if (equalsOrSuffix(qName, "iamInstanceProfile")) {
inIamInstanceProfile = false;
} else if (qName.equals("item") && inBlockDeviceMapping) {
try {
builder.blockDeviceMapping(blockDeviceMappingBuilder.build());
} finally {
blockDeviceMappingBuilder.clear();
}
} else if (equalsOrSuffix(qName, "arn") && inIamInstanceProfile) {
builder.iamInstanceProfileArn(currentOrNull());
} else if (equalsOrSuffix(qName, "name") && inIamInstanceProfile) {
builder.iamInstanceProfileName(currentOrNull());
} else if (qName.equals("deviceName")) {
blockDeviceMappingBuilder.deviceName(currentOrNull());
} else if (qName.equals("virtualName")) {
blockDeviceMappingBuilder.virtualName(currentOrNull());
} else if (qName.equals("snapshotId")) {
blockDeviceMappingBuilder.snapshotId(currentOrNull());
} else if (qName.equals("volumeSize")) {
String volumeSize = currentOrNull();
if (volumeSize != null)
blockDeviceMappingBuilder.sizeInGib(Integer.parseInt(volumeSize));
} else if (qName.equals("noDevice")) {
String noDevice = currentOrNull();
if (noDevice != null)
blockDeviceMappingBuilder.noDevice(Boolean.parseBoolean(noDevice));
} else if (qName.equals("deleteOnTermination")) {
String deleteOnTermination = currentOrNull();
if (deleteOnTermination != null)
blockDeviceMappingBuilder.deleteOnTermination(Boolean.parseBoolean(deleteOnTermination));
} else if (qName.equals("groupId")) {
groupId = currentOrNull();
} else if (qName.equals("groupName")) {
builder.securityGroupIdToName(groupId, currentOrNull());
groupId = null;
} else if (qName.equals("imageId")) {
builder.imageId(currentOrNull());
} else if (qName.equals("instanceType")) {
builder.instanceType(currentOrNull());
} else if (qName.equals("kernelId")) {
builder.kernelId(currentOrNull());
} else if (qName.equals("keyName")) {
builder.keyName(currentOrNull());
} else if (qName.equals("availabilityZone")) {
builder.availabilityZone(currentOrNull());
} else if (qName.equals("subnetId")) {
builder.subnetId(currentOrNull());
} else if (qName.equals("ramdiskId")) {
builder.ramdiskId(currentOrNull());
} else if (qName.equals("enabled")) {
String monitoringEnabled = currentOrNull();
if (monitoringEnabled != null)
builder.monitoringEnabled(Boolean.valueOf(monitoringEnabled));
}
currentText = new StringBuilder();
}
public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length);
}
@Override
public LaunchSpecification getResult() {
try {
return builder.build();
} finally {
builder.clear();
}
}
}