You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2015/04/01 02:30:35 UTC

[2/4] jclouds git commit: JCLOUDS-660: Filesystem portable container ACLs

JCLOUDS-660: Filesystem portable container ACLs


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

Branch: refs/heads/1.9.x
Commit: e829690e7ef43e481ff733feaff5c66e0213d86e
Parents: 1bd9c46
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Mar 12 18:46:22 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Mar 31 17:24:31 2015 -0700

----------------------------------------------------------------------
 .../internal/FilesystemStorageStrategyImpl.java | 45 ++++++++++++++++++--
 .../FilesystemContainerIntegrationTest.java     |  6 ---
 2 files changed, 42 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/e829690e/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
index 325b22c..53b26e7 100644
--- a/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
+++ b/apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java
@@ -17,7 +17,9 @@
 package org.jclouds.filesystem.strategy.internal;
 
 import static java.nio.file.Files.getFileAttributeView;
+import static java.nio.file.Files.getPosixFilePermissions;
 import static java.nio.file.Files.readAttributes;
+import static java.nio.file.Files.setPosixFilePermissions;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Strings.isNullOrEmpty;
@@ -29,6 +31,7 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.file.Path;
 import java.nio.file.attribute.BasicFileAttributes;
+import java.nio.file.attribute.PosixFilePermission;
 import java.nio.file.attribute.UserDefinedFileAttributeView;
 import java.nio.charset.StandardCharsets;
 import java.util.Date;
@@ -43,10 +46,12 @@ import javax.inject.Provider;
 import org.jclouds.blobstore.LocalStorageStrategy;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.domain.BlobBuilder;
+import org.jclouds.blobstore.domain.ContainerAccess;
 import org.jclouds.blobstore.domain.MutableStorageMetadata;
 import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.domain.StorageType;
 import org.jclouds.blobstore.domain.internal.MutableStorageMetadataImpl;
+import org.jclouds.blobstore.options.CreateContainerOptions;
 import org.jclouds.blobstore.options.ListContainerOptions;
 import org.jclouds.blobstore.reference.BlobStoreConstants;
 import org.jclouds.domain.Location;
@@ -136,11 +141,45 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
    }
 
    @Override
-   public boolean createContainerInLocation(String container, Location location) {
+   public boolean createContainerInLocation(String container, Location location, CreateContainerOptions options) {
       // TODO: implement location
       logger.debug("Creating container %s", container);
       filesystemContainerNameValidator.validate(container);
-      return createDirectoryWithResult(container, null);
+      boolean created = createDirectoryWithResult(container, null);
+      if (created) {
+         setContainerAccess(container, options.isPublicRead() ? ContainerAccess.PUBLIC_READ : ContainerAccess.PRIVATE);
+      }
+      return created;
+   }
+
+   @Override
+   public ContainerAccess getContainerAccess(String container) {
+      Path path = new File(buildPathStartingFromBaseDir(container)).toPath();
+      Set<PosixFilePermission> permissions;
+      try {
+         permissions = getPosixFilePermissions(path);
+      } catch (IOException ioe) {
+         throw Throwables.propagate(ioe);
+      }
+      return permissions.contains(PosixFilePermission.OTHERS_READ)
+            ? ContainerAccess.PUBLIC_READ : ContainerAccess.PRIVATE;
+   }
+
+   @Override
+   public void setContainerAccess(String container, ContainerAccess access) {
+      Path path = new File(buildPathStartingFromBaseDir(container)).toPath();
+      Set<PosixFilePermission> permissions;
+      try {
+         permissions = getPosixFilePermissions(path);
+         if (access == ContainerAccess.PRIVATE) {
+            permissions.remove(PosixFilePermission.OTHERS_READ);
+         } else if (access == ContainerAccess.PUBLIC_READ) {
+            permissions.add(PosixFilePermission.OTHERS_READ);
+         }
+         setPosixFilePermissions(path, permissions);
+      } catch (IOException ioe) {
+         throw Throwables.propagate(ioe);
+      }
    }
 
    @Override
@@ -449,7 +488,7 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
 
    public boolean createContainer(String container) {
       filesystemContainerNameValidator.validate(container);
-      return createContainerInLocation(container, null);
+      return createContainerInLocation(container, null, CreateContainerOptions.NONE);
    }
 
    public Blob newBlob(@ParamValidators({ FilesystemBlobKeyValidator.class }) String name) {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/e829690e/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemContainerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemContainerIntegrationTest.java b/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemContainerIntegrationTest.java
index 005052f..4b6cd03 100644
--- a/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemContainerIntegrationTest.java
+++ b/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemContainerIntegrationTest.java
@@ -36,7 +36,6 @@ import org.jclouds.filesystem.reference.FilesystemConstants;
 import org.jclouds.filesystem.utils.TestUtils;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
-import org.testng.SkipException;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
@@ -167,9 +166,4 @@ public class FilesystemContainerIntegrationTest extends BaseContainerIntegration
       return TestUtils.isWindowsOs() ? TestUtils.NO_INVOCATIONS
             : TestUtils.SINGLE_NO_ARG_INVOCATION;
    }
-
-   @Override
-   public void testSetContainerAccess() throws Exception {
-      throw new SkipException("Intentionally not implemented for the transient provider");
-   }
 }