You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2021/12/06 13:36:09 UTC

[commons-vfs] branch master updated: Add RandomAccessMode.from(AccessMode).

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-vfs.git


The following commit(s) were added to refs/heads/master by this push:
     new 18fac32  Add RandomAccessMode.from(AccessMode).
18fac32 is described below

commit 18fac329df12f1afc22c37c2107e2acf3e0d0ea6
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Mon Dec 6 08:36:06 2021 -0500

    Add RandomAccessMode.from(AccessMode).
---
 .../apache/commons/vfs2/util/RandomAccessMode.java | 25 ++++++++++++++++++++++
 .../commons/vfs2/util/RandomAccessModeTest.java    | 16 ++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/RandomAccessMode.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/RandomAccessMode.java
index e2251a9..4e485e7 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/RandomAccessMode.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/util/RandomAccessMode.java
@@ -17,6 +17,8 @@
 package org.apache.commons.vfs2.util;
 
 import java.nio.file.AccessMode;
+import java.util.Arrays;
+import java.util.Objects;
 
 /**
  * An enumerated type representing the modes of a random access content.
@@ -45,6 +47,29 @@ public enum RandomAccessMode {
     }
 
     /**
+     * Converts an array of {@link AccessMode} into a RandomAccessMode.
+     *
+     * @param accessModes AccessMode array, only {@link AccessMode#READ} and {@link AccessMode#WRITE} are supported.
+     * @return A RandomAccessMode.
+     * @since 2.10.0
+     */
+    public static RandomAccessMode from(final AccessMode... accessModes) {
+        Objects.requireNonNull(accessModes, "accessModes");
+        if (accessModes.length == 0) {
+            throw new IllegalArgumentException("Empty AccessMode[].");
+        }
+        final AccessMode modes[] = accessModes.clone();
+        Arrays.sort(modes);
+        if (Arrays.binarySearch(modes, AccessMode.WRITE) >= 0) {
+            return READWRITE;
+        }
+        if (Arrays.binarySearch(modes, AccessMode.READ) >= 0) {
+            return READ;
+        }
+        throw new IllegalArgumentException(Arrays.toString(accessModes));
+    }
+
+    /**
      * @return The mode String.
      * @since 2.0
      */
diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/util/RandomAccessModeTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/util/RandomAccessModeTest.java
index 128ed90..14e20c1 100644
--- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/util/RandomAccessModeTest.java
+++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/util/RandomAccessModeTest.java
@@ -18,8 +18,11 @@ package org.apache.commons.vfs2.util;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
 
+import java.nio.file.AccessMode;
+
 import org.junit.Test;
 
 /**
@@ -28,6 +31,19 @@ import org.junit.Test;
 public class RandomAccessModeTest {
 
     @Test
+    public void test_fromAccessMode() {
+        assertEquals(RandomAccessMode.READ, RandomAccessMode.from(AccessMode.READ));
+        assertEquals(RandomAccessMode.READ, RandomAccessMode.from(AccessMode.READ, AccessMode.READ));
+        assertEquals(RandomAccessMode.READ, RandomAccessMode.from(AccessMode.READ, AccessMode.READ, AccessMode.EXECUTE));
+        assertEquals(RandomAccessMode.READWRITE, RandomAccessMode.from(AccessMode.WRITE));
+        assertEquals(RandomAccessMode.READWRITE, RandomAccessMode.from(AccessMode.WRITE, AccessMode.WRITE));
+        assertEquals(RandomAccessMode.READWRITE, RandomAccessMode.from(AccessMode.WRITE, AccessMode.READ));
+        assertEquals(RandomAccessMode.READWRITE, RandomAccessMode.from(AccessMode.READ, AccessMode.WRITE));
+        assertEquals(RandomAccessMode.READWRITE, RandomAccessMode.from(AccessMode.WRITE, AccessMode.WRITE, AccessMode.EXECUTE));
+        assertThrows(IllegalArgumentException.class, () -> RandomAccessMode.from(AccessMode.EXECUTE));
+    }
+
+    @Test
     public void test_getModeStringRead() {
         assertEquals("r", RandomAccessMode.READ.getModeString());
     }