You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by za...@apache.org on 2015/04/09 21:54:40 UTC

jclouds-labs-openstack git commit: Parse image properties when get image metadata from headers; comments; formatting.

Repository: jclouds-labs-openstack
Updated Branches:
  refs/heads/master e7d93f406 -> 32815adb3


Parse image properties when get image metadata from headers; comments; formatting.


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/commit/32815adb
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/tree/32815adb
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/diff/32815adb

Branch: refs/heads/master
Commit: 32815adb34dd0259a1416d38adf371eb8b225a5d
Parents: e7d93f4
Author: Evgeny Tarasenko <et...@xored.com>
Authored: Fri Mar 27 16:41:31 2015 +0600
Committer: Zack Shoylev <za...@rackspace.com>
Committed: Thu Apr 9 14:53:46 2015 -0500

----------------------------------------------------------------------
 .../functions/ParseImageDetailsFromHeaders.java | 21 ++++++++++++++++++++
 .../ParseImageDetailsFromHeadersTest.java       |  3 +++
 2 files changed, 24 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/32815adb/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
----------------------------------------------------------------------
diff --git a/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java b/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
index e683a7c..776604d 100644
--- a/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
+++ b/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
@@ -28,12 +28,15 @@ import static org.jclouds.openstack.glance.v1_0.options.ImageField.MIN_DISK;
 import static org.jclouds.openstack.glance.v1_0.options.ImageField.MIN_RAM;
 import static org.jclouds.openstack.glance.v1_0.options.ImageField.NAME;
 import static org.jclouds.openstack.glance.v1_0.options.ImageField.OWNER;
+import static org.jclouds.openstack.glance.v1_0.options.ImageField.PROPERTY;
 import static org.jclouds.openstack.glance.v1_0.options.ImageField.SIZE;
 import static org.jclouds.openstack.glance.v1_0.options.ImageField.STATUS;
 import static org.jclouds.openstack.glance.v1_0.options.ImageField.UPDATED_AT;
 
 import javax.inject.Inject;
 
+import com.google.common.base.Strings;
+import com.google.common.collect.Maps;
 import org.jclouds.date.DateService;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.openstack.glance.v1_0.domain.ContainerFormat;
@@ -43,6 +46,8 @@ import org.jclouds.openstack.glance.v1_0.domain.ImageDetails;
 
 import com.google.common.base.Function;
 
+import java.util.Map;
+
 /**
  * This parses {@link ImageDetails} from HTTP headers.
  */
@@ -79,6 +84,22 @@ public class ParseImageDetailsFromHeaders implements Function<HttpResponse, Imag
       if (deletedAt != null) builder.deletedAt(dateService.iso8601SecondsDateParse(deletedAt));
       if (size != null) builder.size(Long.parseLong(size));
 
+      // There may be multiple headers that begin with the prefix x-image-meta-property-. These headers are free-form
+      // key/value pairs that have been saved with the image metadata. The key is the string after
+      // x-image-meta-property- and the value is the value of the header
+      Map<String, String> properties = Maps.newHashMap();
+      String propertyHeader = PROPERTY.asHeader();
+      for (Map.Entry<String, String> headerEntry : from.getHeaders().entries()) {
+         String headerName = headerEntry.getKey();
+         if (!Strings.isNullOrEmpty(headerName) && headerName.startsWith(propertyHeader)
+                 && headerName.length() > propertyHeader.length()) {
+            String propertyName = headerName.substring(PROPERTY.asHeader().length() + 1).toLowerCase();
+            String propertyValue = headerEntry.getValue();
+            properties.put(propertyName, propertyValue);
+         }
+      }
+      builder.properties(properties);
+
       return builder.build();
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/32815adb/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
----------------------------------------------------------------------
diff --git a/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java b/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
index bdb64e0..920524c 100644
--- a/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
+++ b/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
@@ -18,6 +18,7 @@ package org.jclouds.openstack.glance.v1_0.functions;
 
 import static org.testng.Assert.assertEquals;
 
+import com.google.common.collect.ImmutableMap;
 import org.jclouds.date.internal.SimpleDateFormatDateService;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.openstack.glance.v1_0.domain.ContainerFormat;
@@ -52,6 +53,7 @@ public class ParseImageDetailsFromHeadersTest {
                                                 .put("X-Image-Meta-Updated_at", "2012-05-18T18:42:58")
                                                 .put("X-Image-Meta-Disk_format", "raw")
                                                 .put("X-Image-Meta-Name", "debian")
+                                                .put("X-Image-Meta-Property-Description", "debian image description")
                                                 .put("Location", "http://HOST/v1/images/fcc451d0-f6e4-4824-ad8f-70ec12326d07")
                                                 .put("Etag", "233afa7b8809d840679b5f0d36d7350a")
                                                 .build())
@@ -65,6 +67,7 @@ public class ParseImageDetailsFromHeadersTest {
       return ImageDetails.builder()
                         .id("fcc451d0-f6e4-4824-ad8f-70ec12326d07")
                         .name("debian")
+                        .properties(ImmutableMap.of("description", "debian image description"))
                         .containerFormat(ContainerFormat.BARE)
                         .diskFormat(DiskFormat.RAW)
                         .checksum("233afa7b8809d840679b5f0d36d7350a")