From 4c93f1b399e205030082c55866bcc2d9d2d6457e Mon Sep 17 00:00:00 2001 From: michael-conway Date: Thu, 15 Jun 2017 02:09:14 -0400 Subject: [PATCH] #1 io params --- .../common/confg/enumz/EnumIoStyle.java | 26 +++++++++ .../common/confg/enumz/package-info.java | 10 ++++ .../confg/props/CachedJargonProperties.java | 39 ++++++++++++++ .../common/confg/props/JargonProperties.java | 54 +++++++++++++++++++ .../common/confg/enumz/EnumIoStyleTest.java | 15 ++++++ .../jargon2/utils/unittest/AllTests.java | 3 +- .../irods/jargon2/core/context/IOContext.java | 3 ++ 7 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/enumz/EnumIoStyle.java create mode 100644 jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/enumz/package-info.java create mode 100644 jargon2-core-common/src/test/java/org/irods/jargon2/common/confg/enumz/EnumIoStyleTest.java diff --git a/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/enumz/EnumIoStyle.java b/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/enumz/EnumIoStyle.java new file mode 100644 index 0000000..45d656d --- /dev/null +++ b/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/enumz/EnumIoStyle.java @@ -0,0 +1,26 @@ +package org.irods.jargon2.common.confg.enumz; + +/** + * use standard or nio + * + * @author mcc + * + * https://thomaswabner.wordpress.com/2007/10/09/fast-stream-copy-using-javanio-channels/ + * + */ +public enum EnumIoStyle { + NIO, Standard; + + public static EnumIoStyle mapIoStyleToEnum(final String ioStyle) { + EnumIoStyle enumIoStyle = null; + for (EnumIoStyle enumValue : EnumIoStyle.values()) { + if (enumValue.toString().equals(ioStyle)) { + enumIoStyle = enumValue; + break; + } + } + + return enumIoStyle; + } + +} diff --git a/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/enumz/package-info.java b/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/enumz/package-info.java new file mode 100644 index 0000000..b0596f9 --- /dev/null +++ b/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/enumz/package-info.java @@ -0,0 +1,10 @@ +/** + * + */ +/** + * Enumerations and constants for configuration data + * + * @author mcc + * + */ +package org.irods.jargon2.common.confg.enumz; \ No newline at end of file diff --git a/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/props/CachedJargonProperties.java b/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/props/CachedJargonProperties.java index 9e7f751..596680c 100644 --- a/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/props/CachedJargonProperties.java +++ b/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/props/CachedJargonProperties.java @@ -5,6 +5,8 @@ import java.util.concurrent.ConcurrentHashMap; +import org.irods.jargon2.common.confg.enumz.EnumIoStyle; + /** * Defines global tuning and behavior properties. Properties are internally * stored as a concurrent hashmap, allowing sharing of this properties class @@ -16,6 +18,7 @@ public class CachedJargonProperties implements JargonProperties { public static final String CONNECTION_TIMEOUT_IN_SECONDS = "connection.timeout"; + public static final String IO_STYLE = "io.style"; private ConcurrentHashMap propertiesCache = new ConcurrentHashMap<>(); @@ -41,6 +44,42 @@ public void setConnectionTimeoutInSeconds(int timeout) { propertiesCache.put(CONNECTION_TIMEOUT_IN_SECONDS, String.valueOf(timeout)); } + @Override + public EnumIoStyle getEnumIoStyle() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setEnumIoStyle(EnumIoStyle enumIoStyle) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isUseNioDirect() { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setUseNioDirect(boolean useNioDirect) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isUseFastChannelCopy() { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setUseFastChannelCopy(boolean useFastChannelCopy) { + // TODO Auto-generated method stub + + } + private int valAsIntOrZero(final String key) { String stringVal = propertiesCache.get(key); if (stringVal == null) { diff --git a/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/props/JargonProperties.java b/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/props/JargonProperties.java index 8520bad..7cea73d 100644 --- a/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/props/JargonProperties.java +++ b/jargon2-core-common/src/main/java/org/irods/jargon2/common/confg/props/JargonProperties.java @@ -1,14 +1,68 @@ package org.irods.jargon2.common.confg.props; +import org.irods.jargon2.common.confg.enumz.EnumIoStyle; + /** * Interface for jargon + * * @author mconway * */ public interface JargonProperties { + /* + * iRODS connection properties + */ int getConnectionTimeoutInSeconds(); void setConnectionTimeoutInSeconds(int connectionTimeoutInSeconds); + /* + * General i/o properties + */ + + /** + * Get the configured io style + * + * @return {@link EnumIoStyle} + */ + EnumIoStyle getEnumIoStyle(); + + void setEnumIoStyle(EnumIoStyle enumIoStyle); + + /* + * local file system i/o properties + */ + + /** + * Check if using NIO direct buffers. Only active if NIO is the chosen IO + * mode + * + * @return boolean use nio direct + */ + boolean isUseNioDirect(); + + /** + * Set nio direct + * + * @param useNioDirect + * boolean if nio direct is to be used, otherwise an + * indirect byte buffer is used + */ + void setUseNioDirect(boolean useNioDirect); + + /** + * Use fast channel copy between channels, only active if io style is nio + * + * @return boolean if using fast channel copy + */ + boolean isUseFastChannelCopy(); + + /** + * Set fast channel copy behavior + * + * @param useFastChannelCopy + */ + void setUseFastChannelCopy(boolean useFastChannelCopy); + } \ No newline at end of file diff --git a/jargon2-core-common/src/test/java/org/irods/jargon2/common/confg/enumz/EnumIoStyleTest.java b/jargon2-core-common/src/test/java/org/irods/jargon2/common/confg/enumz/EnumIoStyleTest.java new file mode 100644 index 0000000..1cc3967 --- /dev/null +++ b/jargon2-core-common/src/test/java/org/irods/jargon2/common/confg/enumz/EnumIoStyleTest.java @@ -0,0 +1,15 @@ +package org.irods.jargon2.common.confg.enumz; + +import org.junit.Assert; +import org.junit.Test; + +public class EnumIoStyleTest { + + @Test + public void testMapIoStyleToEnum() { + String test = EnumIoStyle.NIO.toString(); + EnumIoStyle actual = EnumIoStyle.mapIoStyleToEnum(test); + Assert.assertNotNull("null enumIoStyle", actual); + } + +} diff --git a/jargon2-core-common/src/test/java/org/irods/jargon2/utils/unittest/AllTests.java b/jargon2-core-common/src/test/java/org/irods/jargon2/utils/unittest/AllTests.java index 6278fda..d727ce4 100644 --- a/jargon2-core-common/src/test/java/org/irods/jargon2/utils/unittest/AllTests.java +++ b/jargon2-core-common/src/test/java/org/irods/jargon2/utils/unittest/AllTests.java @@ -1,12 +1,13 @@ package org.irods.jargon2.utils.unittest; +import org.irods.jargon2.common.confg.enumz.EnumIoStyleTest; import org.irods.jargon2.utils.exception.bundle.MessageUtilTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) -@SuiteClasses({ MessageUtilTest.class }) +@SuiteClasses({ MessageUtilTest.class, EnumIoStyleTest.class }) public class AllTests { } diff --git a/jargon2-core-if/src/main/java/org/irods/jargon2/core/context/IOContext.java b/jargon2-core-if/src/main/java/org/irods/jargon2/core/context/IOContext.java index 912e091..cccf6c2 100644 --- a/jargon2-core-if/src/main/java/org/irods/jargon2/core/context/IOContext.java +++ b/jargon2-core-if/src/main/java/org/irods/jargon2/core/context/IOContext.java @@ -16,6 +16,9 @@ */ public class IOContext { + /** + * Reference to controlling properties + */ private JargonProperties jargonProperties; /**