You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/10/08 07:06:18 UTC

[3/5] git commit: JCLOUDS-641 fix return code for deleteIfEmpty

JCLOUDS-641 fix return code for deleteIfEmpty


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/cc00dee9
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/tree/cc00dee9
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/diff/cc00dee9

Branch: refs/heads/master
Commit: cc00dee92a3075fa26b4fef307d79f571ad9de73
Parents: 389a3d8
Author: Adrian Cole <ad...@gmail.com>
Authored: Tue Oct 7 21:33:21 2014 -0700
Committer: Adrian Cole <ad...@apache.org>
Committed: Tue Oct 7 22:05:58 2014 -0700

----------------------------------------------------------------------
 .../openstack/swift/v1/SwiftFallbacks.java      | 43 ++++++++++++++++++++
 .../swift/v1/features/ContainerApi.java         |  4 +-
 .../swift/v1/features/ContainerApiMockTest.java |  3 +-
 3 files changed, 46 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/cc00dee9/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/SwiftFallbacks.java
----------------------------------------------------------------------
diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/SwiftFallbacks.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/SwiftFallbacks.java
new file mode 100644
index 0000000..c875707
--- /dev/null
+++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/SwiftFallbacks.java
@@ -0,0 +1,43 @@
+/*
+ * 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;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Predicates.equalTo;
+import static com.google.common.base.Throwables.propagate;
+import static org.jclouds.http.HttpUtils.contains404;
+import static org.jclouds.http.HttpUtils.returnValueOnCodeOrNull;
+
+import org.jclouds.Fallback;
+
+public final class SwiftFallbacks {
+
+   public static final class TrueOn404FalseOn409 implements Fallback<Boolean> {
+      @Override
+      public Boolean createOrPropagate(Throwable t) throws Exception {
+         if (contains404(checkNotNull(t, "throwable")))
+            return true;
+         if (returnValueOnCodeOrNull(t, false, equalTo(409)) != null)
+            return false;
+         throw propagate(t);
+      }
+   }
+
+   private SwiftFallbacks() {
+      throw new AssertionError("intentionally unimplemented");
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/cc00dee9/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ContainerApi.java
----------------------------------------------------------------------
diff --git a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ContainerApi.java b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ContainerApi.java
index 1eb7ddf..4cbac0d 100644
--- a/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ContainerApi.java
+++ b/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ContainerApi.java
@@ -17,6 +17,7 @@
 package org.jclouds.openstack.swift.v1.features;
 
 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
+import static org.jclouds.openstack.swift.v1.SwiftFallbacks.TrueOn404FalseOn409;
 
 import java.util.Map;
 
@@ -33,7 +34,6 @@ import javax.ws.rs.PathParam;
 import org.jclouds.Fallbacks.EmptyFluentIterableOnNotFoundOr404;
 import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
 import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.Fallbacks.TrueOnNotFoundOr404;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest;
 import org.jclouds.openstack.swift.v1.binders.BindMetadataToHeaders.BindContainerMetadataToHeaders;
@@ -209,7 +209,7 @@ public interface ContainerApi {
    @Named("container:deleteIfEmpty")
    @DELETE
    @Path("/{containerName}")
-   @Fallback(TrueOnNotFoundOr404.class)
+   @Fallback(TrueOn404FalseOn409.class)
    boolean deleteIfEmpty(@PathParam("containerName") String containerName) throws IllegalStateException;
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/cc00dee9/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java
----------------------------------------------------------------------
diff --git a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java
index 64c5993..6b3ef66 100644
--- a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java
+++ b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/features/ContainerApiMockTest.java
@@ -334,7 +334,6 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> {
       }
    }
 
-   @Test(expectedExceptions = IllegalStateException.class)
    public void testDeleteWhenNotEmpty() throws Exception {
       MockWebServer server = mockOpenStackServer();
       server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
@@ -342,7 +341,7 @@ public class ContainerApiMockTest extends BaseOpenStackMockTest<SwiftApi> {
 
       try {
          SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift");
-         api.getContainerApi("DFW").deleteIfEmpty("myContainer");
+         assertFalse(api.getContainerApi("DFW").deleteIfEmpty("myContainer"));
 
       } finally {
          assertEquals(server.getRequestCount(), 2);