1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.aws.ec2.xml;
20
21 import javax.annotation.Resource;
22 import javax.inject.Inject;
23
24 import org.jclouds.aws.ec2.domain.LaunchSpecification;
25 import org.jclouds.aws.ec2.domain.LaunchSpecification.Builder;
26 import org.jclouds.date.DateService;
27 import org.jclouds.ec2.domain.BlockDeviceMapping;
28 import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult;
29 import org.jclouds.location.Region;
30 import org.jclouds.logging.Logger;
31 import org.xml.sax.Attributes;
32
33
34
35
36
37 public class LaunchSpecificationHandler extends HandlerForGeneratedRequestWithResult<LaunchSpecification> {
38
39 @Resource
40 protected Logger logger = Logger.NULL;
41
42 protected final DateService dateService;
43 protected final String defaultRegion;
44 protected final Builder builder;
45 protected final BlockDeviceMapping.Builder blockDeviceMappingBuilder;
46
47 @Inject
48 public LaunchSpecificationHandler(DateService dateService, @Region String defaultRegion,
49 LaunchSpecification.Builder builder, BlockDeviceMapping.Builder blockDeviceMappingBuilder) {
50 this.dateService = dateService;
51 this.defaultRegion = defaultRegion;
52 this.builder = builder;
53 this.blockDeviceMappingBuilder = blockDeviceMappingBuilder;
54 }
55
56 protected String currentOrNull() {
57 String returnVal = currentText.toString().trim();
58 return returnVal.equals("") ? null : returnVal;
59 }
60
61 protected StringBuilder currentText = new StringBuilder();
62
63 private boolean inBlockDeviceMapping;
64
65 private String groupId;
66
67 public void startElement(String uri, String name, String qName, Attributes attrs) {
68 if (qName.equals("blockDeviceMapping")) {
69 inBlockDeviceMapping = true;
70 }
71 }
72
73 public void endElement(String uri, String name, String qName) {
74 if (qName.equals("blockDeviceMapping")) {
75 inBlockDeviceMapping = false;
76 } else if (qName.equals("item") && inBlockDeviceMapping) {
77 try {
78 builder.blockDeviceMapping(blockDeviceMappingBuilder.build());
79 } finally {
80 blockDeviceMappingBuilder.clear();
81 }
82 } else if (qName.equals("deviceName")) {
83 blockDeviceMappingBuilder.deviceName(currentOrNull());
84 } else if (qName.equals("virtualName")) {
85 blockDeviceMappingBuilder.virtualName(currentOrNull());
86 } else if (qName.equals("snapshotId")) {
87 blockDeviceMappingBuilder.snapshotId(currentOrNull());
88 } else if (qName.equals("volumeSize")) {
89 String volumeSize = currentOrNull();
90 if (volumeSize != null)
91 blockDeviceMappingBuilder.sizeInGib(Integer.parseInt(volumeSize));
92 } else if (qName.equals("noDevice")) {
93 String noDevice = currentOrNull();
94 if (noDevice != null)
95 blockDeviceMappingBuilder.noDevice(Boolean.parseBoolean(noDevice));
96 } else if (qName.equals("deleteOnTermination")) {
97 String deleteOnTermination = currentOrNull();
98 if (deleteOnTermination != null)
99 blockDeviceMappingBuilder.deleteOnTermination(Boolean.parseBoolean(deleteOnTermination));
100 } else if (qName.equals("groupId")) {
101 groupId = currentOrNull();
102 } else if (qName.equals("groupName")) {
103 builder.securityGroupIdToName(groupId, currentOrNull());
104 groupId = null;
105 } else if (qName.equals("imageId")) {
106 builder.imageId(currentOrNull());
107 } else if (qName.equals("instanceType")) {
108 builder.instanceType(currentOrNull());
109 } else if (qName.equals("kernelId")) {
110 builder.kernelId(currentOrNull());
111 } else if (qName.equals("keyName")) {
112 builder.keyName(currentOrNull());
113 } else if (qName.equals("availabilityZone")) {
114 builder.availabilityZone(currentOrNull());
115 } else if (qName.equals("ramdiskId")) {
116 builder.ramdiskId(currentOrNull());
117 } else if (qName.equals("enabled")) {
118 String monitoringEnabled = currentOrNull();
119 if (monitoringEnabled != null)
120 builder.monitoringEnabled(new Boolean(monitoringEnabled));
121 }
122 currentText = new StringBuilder();
123 }
124
125 public void characters(char ch[], int start, int length) {
126 currentText.append(ch, start, length);
127 }
128
129 @Override
130 public LaunchSpecification getResult() {
131 try {
132 return builder.build();
133 } finally {
134 builder.clear();
135 }
136 }
137
138 }