|
2 | 2 |
|
3 | 3 | import java.util.Calendar; |
4 | 4 | import java.util.Collection; |
| 5 | +import java.util.HashMap; |
5 | 6 | import java.util.Map; |
6 | 7 |
|
7 | 8 | import org.codehaus.jackson.annotate.JsonProperty; |
|
13 | 14 | import com.woorea.openstack.base.client.OpenStackResponse; |
14 | 15 | import com.woorea.openstack.glance.model.Image; |
15 | 16 | import com.woorea.openstack.glance.model.ImageDownload; |
16 | | -import com.woorea.openstack.glance.model.ImageForUpload; |
| 17 | +import com.woorea.openstack.glance.model.ImageUpload; |
17 | 18 | import com.woorea.openstack.glance.model.ImageMember; |
18 | 19 | import com.woorea.openstack.glance.model.ImageMembers; |
19 | 20 | import com.woorea.openstack.glance.model.Images; |
@@ -46,10 +47,14 @@ public Delete delete(String id) { |
46 | 47 | return new Delete(id); |
47 | 48 | } |
48 | 49 |
|
49 | | - public Upload upload(ImageForUpload image) { |
| 50 | + public Upload upload(ImageUpload image) { |
50 | 51 | return new Upload(image); |
51 | 52 | } |
52 | 53 |
|
| 54 | + public Upload upload(String id, ImageUpload image) { |
| 55 | + return new Upload(id, image); |
| 56 | + } |
| 57 | + |
53 | 58 | public Download download(String id) { |
54 | 59 | return new Download(id); |
55 | 60 | } |
@@ -80,22 +85,19 @@ public List(boolean detail) { |
80 | 85 |
|
81 | 86 | public class Create extends OpenStackRequest<Image> { |
82 | 87 |
|
83 | | - private Image image; |
84 | | - |
85 | 88 | public Create(Image image) { |
86 | | - super(CLIENT, HttpMethod.POST, "/images", Entity.json(image), Image.class); |
87 | | - this.image = image; |
| 89 | + super(CLIENT, HttpMethod.POST, "/images", null, Image.class); |
| 90 | + for (Map.Entry<String, String> entry : compose(image).entrySet()) { |
| 91 | + header(entry.getKey(), entry.getValue()); |
| 92 | + } |
88 | 93 | } |
89 | 94 |
|
90 | 95 | } |
91 | 96 |
|
92 | 97 | public class Update extends OpenStackRequest<Image> { |
93 | 98 |
|
94 | | - private Image image; |
95 | | - |
96 | 99 | public Update(String id, Image image) { |
97 | 100 | super(CLIENT, HttpMethod.PUT, new StringBuilder("/images/").append(id).toString(), Entity.json(image), Image.class); |
98 | | - this.image = image; |
99 | 101 | } |
100 | 102 |
|
101 | 103 | } |
@@ -124,31 +126,28 @@ public Image execute() { |
124 | 126 |
|
125 | 127 | public class Upload extends OpenStackRequest<Image> { |
126 | 128 |
|
127 | | - private ImageForUpload imageForUpload; |
128 | | - |
129 | | - public Upload(ImageForUpload imageForUpload) { |
130 | | - super(CLIENT, HttpMethod.POST, "/images", Entity.stream(imageForUpload.getInputStream()), Image.class); |
131 | | - header("x-image-meta-name", imageForUpload.getName()); |
132 | | - header("x-image-meta-disk_format", imageForUpload.getDiskFormat()); |
133 | | - header("x-image-meta-container_format", imageForUpload.getContainerFormat()); |
134 | | - header("x-image-meta-id", imageForUpload.getId()); |
135 | | - //file,s3,swift |
136 | | - header("x-image-meta-store", imageForUpload.getStore()); |
137 | | - header("x-image-meta-size", imageForUpload.getSize()); |
138 | | - header("x-image-meta-checksum", imageForUpload.getChecksum()); |
139 | | - header("x-image-meta-is-public", imageForUpload.isPublic()); |
140 | | - header("x-image-meta-owner", imageForUpload.getOwner()); |
141 | | - for(String key : imageForUpload.getProperties().keySet()) { |
142 | | - imageForUpload.getProperties().put("x-image-meta-property-" + key, imageForUpload.getProperties().get(key)); |
| 129 | + public Upload(String id, ImageUpload imageUpload) { |
| 130 | + super(CLIENT, HttpMethod.PUT, new StringBuilder("/images/").append(id).toString(), |
| 131 | + Entity.stream(imageUpload.getInputStream()), Image.class); |
| 132 | + } |
| 133 | + |
| 134 | + public Upload(ImageUpload imageUpload) { |
| 135 | + super(CLIENT, HttpMethod.POST, "/images", Entity.stream(imageUpload.getInputStream()), Image.class); |
| 136 | + |
| 137 | + for (Map.Entry<String, String> entry : compose(imageUpload.getImage()).entrySet()) { |
| 138 | + header(entry.getKey(), entry.getValue()); |
143 | 139 | } |
| 140 | + |
| 141 | + //file,s3,swift |
| 142 | + header("x-image-meta-store", imageUpload.getStore()); |
144 | 143 | } |
145 | 144 |
|
146 | 145 | } |
147 | 146 |
|
148 | 147 | public class Download extends OpenStackRequest<ImageDownload> { |
149 | 148 |
|
150 | 149 | public Download(String id) { |
151 | | - super(CLIENT, HttpMethod.HEAD, new StringBuilder("/images/").append(id).toString(), null, ImageDownload.class); |
| 150 | + super(CLIENT, HttpMethod.GET, new StringBuilder("/images/").append(id).toString(), null, ImageDownload.class); |
152 | 151 | header("Accept", "application/octet-stream"); |
153 | 152 | } |
154 | 153 |
|
@@ -182,20 +181,39 @@ public ReplaceMembers(String id, Collection<ImageMember> members) { |
182 | 181 |
|
183 | 182 | public class AddMember extends OpenStackRequest<ImageMember> { |
184 | 183 |
|
185 | | - public AddMember(String id, String tenantId) { |
186 | | - super(CLIENT, HttpMethod.PUT, new StringBuilder("/images/").append(id).append("/members").append(tenantId).toString(), null, ImageMember.class); |
| 184 | + public AddMember(String id, String tenantId) { |
| 185 | + super(CLIENT, HttpMethod.PUT, new StringBuilder("/images/").append(id).append("/members").append(tenantId).toString(), null, ImageMember.class); |
| 186 | + } |
| 187 | + |
187 | 188 | } |
188 | | - |
189 | | -} |
190 | 189 |
|
191 | 190 | public class RemoveMember extends OpenStackRequest<Void> { |
192 | 191 |
|
193 | | - public RemoveMember(String id, String tenantId) { |
194 | | - super(CLIENT, HttpMethod.DELETE, new StringBuilder("/images/").append(id).append("/members/").append(tenantId).toString(), null, Void.class); |
| 192 | + public RemoveMember(String id, String tenantId) { |
| 193 | + super(CLIENT, HttpMethod.DELETE, new StringBuilder("/images/").append(id).append("/members/").append(tenantId).toString(), null, Void.class); |
| 194 | + } |
| 195 | + |
195 | 196 | } |
196 | | - |
197 | | -} |
198 | | - |
| 197 | + |
| 198 | + public static Map<String, String> compose(Image image) { |
| 199 | + Map<String, String> headers = new HashMap<String, String>(); |
| 200 | + |
| 201 | + headers.put("X-Image-Meta-Name", image.getName()); |
| 202 | + headers.put("X-Image-Meta-Disk_format", image.getDiskFormat()); |
| 203 | + headers.put("X-Image-Meta-Container_format", image.getContainerFormat()); |
| 204 | + headers.put("X-Image-Meta-Id", image.getId()); |
| 205 | + headers.put("X-Image-Meta-Size", (image.getSize() != null) ? image.getSize().toString() : null); |
| 206 | + headers.put("X-Image-Meta-Checksum", image.getChecksum()); |
| 207 | + headers.put("X-Image-Meta-Is_public", String.valueOf(image.isPublic())); |
| 208 | + headers.put("X-Image-Meta-Owner", image.getOwner()); |
| 209 | + |
| 210 | + for(String key : image.getProperties().keySet()) { |
| 211 | + image.getProperties().put("x-image-meta-property-" + key, image.getProperties().get(key)); |
| 212 | + } |
| 213 | + |
| 214 | + return headers; |
| 215 | + } |
| 216 | + |
199 | 217 | public static Image parse(Map<String, String> headers) { |
200 | 218 | Image image = new Image(); |
201 | 219 | image.setId(headers.get("X-Image-Meta-Id")); |
|
0 commit comments