Updated Branches:
  refs/heads/master 83a1c202e -> 0982e0005

JCLOUDS-298. create swift-specific ListContainerOptions


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

Branch: refs/heads/master
Commit: 0982e00050969ddedfefa84fe33dd34f24248452
Parents: 38bcafd
Author: Adrian Cole <[email protected]>
Authored: Sat Sep 28 17:02:48 2013 -0700
Committer: Adrian Cole <[email protected]>
Committed: Sat Sep 28 17:13:22 2013 -0700

----------------------------------------------------------------------
 .../openstack/swift/v1/features/ObjectApi.java  |  20 +---
 .../swift/v1/options/ListContainerOptions.java  | 111 +++++++++++++++++++
 .../swift/v1/features/ObjectApiLiveTest.java    |   8 +-
 .../swift/v1/features/ObjectApiMockTest.java    |  14 ++-
 4 files changed, 126 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/0982e000/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java
----------------------------------------------------------------------
diff --git 
a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java
 
b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java
index 05995af..aadba9f 100644
--- 
a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java
+++ 
b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java
@@ -29,7 +29,6 @@ import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
-import javax.ws.rs.QueryParam;
 
 import org.jclouds.Fallbacks.EmptyFluentIterableOnNotFoundOr404;
 import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
@@ -46,6 +45,7 @@ import org.jclouds.openstack.swift.v1.domain.SwiftObject;
 import org.jclouds.openstack.swift.v1.functions.ETagHeader;
 import org.jclouds.openstack.swift.v1.functions.ParseObjectFromResponse;
 import org.jclouds.openstack.swift.v1.functions.ParseObjectListFromResponse;
+import org.jclouds.openstack.swift.v1.options.ListContainerOptions;
 import org.jclouds.rest.Binder;
 import org.jclouds.rest.annotations.BinderParam;
 import org.jclouds.rest.annotations.Fallback;
@@ -75,23 +75,7 @@ public interface ObjectApi {
    @ResponseParser(ParseObjectListFromResponse.class)
    @Fallback(EmptyFluentIterableOnNotFoundOr404.class)
    @Path("/")
-   FluentIterable<SwiftObject> listFirstPage();
-
-   /**
-    * Lists up to 10,000 objects, starting at {@code marker}.
-    * 
-    * @param marker
-    *           lexicographic position to start list.
-    * 
-    * @return a list of existing storage objects ordered by name.
-    */
-   @Named("ListObjects")
-   @GET
-   @QueryParams(keys = "format", values = "json")
-   @ResponseParser(ParseObjectListFromResponse.class)
-   @Fallback(EmptyFluentIterableOnNotFoundOr404.class)
-   @Path("/")
-   FluentIterable<SwiftObject> listAt(@QueryParam("marker") String marker);
+   FluentIterable<SwiftObject> list(ListContainerOptions options);
 
    /**
     * Creates or updates an object.

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/0982e000/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/options/ListContainerOptions.java
----------------------------------------------------------------------
diff --git 
a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/options/ListContainerOptions.java
 
b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/options/ListContainerOptions.java
new file mode 100644
index 0000000..f106325
--- /dev/null
+++ 
b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/options/ListContainerOptions.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.openstack.swift.v1.options;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+import org.jclouds.openstack.swift.v1.features.ObjectApi;
+
+/**
+ * Options available for <a href=
+ * 
"http://docs.openstack.org/api/openstack-object-storage/1.0/content/list-objects.html";
+ * >listing objects</a>.
+ * 
+ * @see ObjectApi#list
+ */
+public class ListContainerOptions extends BaseHttpRequestOptions {
+   public static final ListContainerOptions NONE = new ListContainerOptions();
+
+   /** list operation returns no more than this amount. */
+   public ListContainerOptions limit(int limit) {
+      checkState(limit >= 0, "limit must be >= 0");
+      checkState(limit <= 10000, "limit must be <= 10000");
+      queryParameters.put("limit", Integer.toString(limit));
+      return this;
+   }
+
+   /** object names greater in value than the specified marker are returned. */
+   public ListContainerOptions marker(String marker) {
+      queryParameters.put("marker", checkNotNull(marker, "marker"));
+      return this;
+   }
+
+   /** object names less in value than the specified marker are returned. */
+   public ListContainerOptions endMarker(String endMarker) {
+      queryParameters.put("end_marker", checkNotNull(endMarker, "endMarker"));
+      return this;
+   }
+
+   /** object names beginning with this substring are returned. */
+   public ListContainerOptions prefix(String prefix) {
+      queryParameters.put("prefix", checkNotNull(prefix, "prefix"));
+      return this;
+   }
+
+   /** object names nested in the container are returned. */
+   public ListContainerOptions delimiter(char delimiter) {
+      queryParameters.put("delimiter", Character.toString(delimiter));
+      return this;
+   }
+
+   /** object names nested in the pseudo path are returned. */
+   public ListContainerOptions path(String path) {
+      queryParameters.put("path", checkNotNull(path, "path"));
+      return this;
+   }
+
+   public static class Builder {
+
+      /** @see ListContainerOptions#limit */
+      public static ListContainerOptions limit(int limit) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.limit(limit);
+      }
+
+      /** @see ListContainerOptions#marker */
+      public static ListContainerOptions marker(String marker) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.marker(marker);
+      }
+
+      /** @see ListContainerOptions#endMarker */
+      public static ListContainerOptions endMarker(String endMarker) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.endMarker(endMarker);
+      }
+
+      /** @see ListContainerOptions#prefix */
+      public static ListContainerOptions prefix(String prefix) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.prefix(prefix);
+      }
+
+      /** @see ListContainerOptions#delimiter */
+      public static ListContainerOptions delimiter(char delimiter) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.delimiter(delimiter);
+      }
+
+      /** @see ListContainerOptions#path */
+      public static ListContainerOptions path(String path) {
+         ListContainerOptions options = new ListContainerOptions();
+         return options.path(path);
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/0982e000/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiLiveTest.java
 
b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiLiveTest.java
index 5d9ac6c..a90f3c8 100644
--- 
a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiLiveTest.java
+++ 
b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiLiveTest.java
@@ -18,6 +18,7 @@ package org.jclouds.openstack.swift.v1.features;
 
 import static org.jclouds.http.options.GetOptions.Builder.tail;
 import static org.jclouds.io.Payloads.newStringPayload;
+import static 
org.jclouds.openstack.swift.v1.options.ListContainerOptions.Builder.marker;
 import static org.jclouds.util.Strings2.toStringAndClose;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -34,6 +35,7 @@ import org.jclouds.http.options.GetOptions;
 import org.jclouds.openstack.swift.v1.domain.SwiftObject;
 import org.jclouds.openstack.swift.v1.internal.BaseSwiftApiLiveTest;
 import org.jclouds.openstack.swift.v1.options.CreateContainerOptions;
+import org.jclouds.openstack.swift.v1.options.ListContainerOptions;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -54,7 +56,7 @@ public class ObjectApiLiveTest extends BaseSwiftApiLiveTest {
    public void list() throws Exception {
       for (String regionId : api.configuredRegions()) {
          ObjectApi objectApi = api.objectApiInRegionForContainer(regionId, 
containerName);
-         FluentIterable<SwiftObject> response = objectApi.listFirstPage();
+         FluentIterable<SwiftObject> response = objectApi.list(new 
ListContainerOptions());
          assertNotNull(response);
          for (SwiftObject object : response) {
             checkObject(object);
@@ -109,11 +111,11 @@ public class ObjectApiLiveTest extends 
BaseSwiftApiLiveTest {
       }
    }
 
-   public void listAt() throws Exception {
+   public void listOptions() throws Exception {
       String lexicographicallyBeforeName = name.substring(0, name.length() - 
1);
       for (String regionId : api.configuredRegions()) {
          SwiftObject object = api.objectApiInRegionForContainer(regionId, 
containerName)
-               .listAt(lexicographicallyBeforeName).get(0);
+               .list(marker(lexicographicallyBeforeName)).get(0);
          assertEquals(object.name(), name);
          checkObject(object);
       }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/0982e000/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java
 
b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java
index 1cef6fe..30d3f4d 100644
--- 
a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java
+++ 
b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ObjectApiMockTest.java
@@ -20,6 +20,7 @@ import static com.google.common.base.Charsets.US_ASCII;
 import static com.google.common.net.HttpHeaders.RANGE;
 import static org.jclouds.http.options.GetOptions.Builder.tail;
 import static org.jclouds.io.Payloads.newStringPayload;
+import static 
org.jclouds.openstack.swift.v1.options.ListContainerOptions.Builder.marker;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
@@ -33,6 +34,7 @@ import org.jclouds.io.Payloads;
 import org.jclouds.openstack.swift.v1.SwiftApi;
 import org.jclouds.openstack.swift.v1.domain.SwiftObject;
 import org.jclouds.openstack.swift.v1.internal.BaseSwiftMockTest;
+import org.jclouds.openstack.swift.v1.options.ListContainerOptions;
 import org.jclouds.util.Strings2;
 import org.testng.annotations.Test;
 
@@ -77,15 +79,15 @@ public class ObjectApiMockTest extends BaseSwiftMockTest {
                   
.lastModified(dates.iso8601DateParse("2009-02-03T05:26:32.612278")).build());
    }
 
-   public void listFirstPage() throws Exception {
+   public void list() throws Exception {
       MockWebServer server = mockSwiftServer();
       server.enqueue(new MockResponse().setBody(access));
       server.enqueue(new MockResponse().setBody(objectList));
 
       try {
          SwiftApi api = swiftApi(server.getUrl("/").toString());
-         ImmutableList<SwiftObject> objects = 
api.objectApiInRegionForContainer("DFW", "myContainer").listFirstPage()
-               .toList();
+         ImmutableList<SwiftObject> objects = 
api.objectApiInRegionForContainer("DFW", "myContainer")
+               .list(new ListContainerOptions()).toList();
          assertEquals(objects, 
parsedObjectsForUrl(server.getUrl("/").toString()));
 
          assertEquals(server.getRequestCount(), 2);
@@ -97,15 +99,15 @@ public class ObjectApiMockTest extends BaseSwiftMockTest {
       }
    }
 
-   public void listAt() throws Exception {
+   public void listOptions() throws Exception {
       MockWebServer server = mockSwiftServer();
       server.enqueue(new MockResponse().setBody(access));
       server.enqueue(new MockResponse().setBody(objectList));
 
       try {
          SwiftApi api = swiftApi(server.getUrl("/").toString());
-         ImmutableList<SwiftObject> objects = 
api.objectApiInRegionForContainer("DFW", "myContainer").listAt("test")
-               .toList();
+         ImmutableList<SwiftObject> objects = 
api.objectApiInRegionForContainer("DFW", "myContainer")
+               .list(marker("test")).toList();
          assertEquals(objects, 
parsedObjectsForUrl(server.getUrl("/").toString()));
 
          assertEquals(server.getRequestCount(), 2);

Reply via email to