|
|
@@ -0,0 +1,64 @@
|
|
|
+package net.ranides.assira.system;
|
|
|
+
|
|
|
+import lombok.experimental.UtilityClass;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+
|
|
|
+@UtilityClass
|
|
|
+public class AssiraConfiguration {
|
|
|
+
|
|
|
+ private static final String CACHE_USE_THREAD_PROPERTY = "assira.cache.use-thread";
|
|
|
+ private static final String CACHE_USE_THREAD_DEFAULT = "false";
|
|
|
+
|
|
|
+ private static final boolean DONT_USE_FLAT_STREAM_VALUE = true;
|
|
|
+
|
|
|
+ private static final boolean WALKER_JDK7_VALUE = true;
|
|
|
+
|
|
|
+ private static final boolean CASE_SENSITIVE_FILES_VALUE = !new File( "a" ).equals( new File( "A" ) );
|
|
|
+
|
|
|
+ private static final boolean STRICT_REFLECTIVE_RESOLVE_VALUE = false;
|
|
|
+
|
|
|
+ public static boolean CACHE_USE_THREAD() {
|
|
|
+ return !RuntimeUtils.getProperty(CACHE_USE_THREAD_PROPERTY, CACHE_USE_THREAD_DEFAULT).equals("true");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * We can't use stream#flatMap because derived stream evaluates too much.
|
|
|
+ * more precisely, it applies #map to all elements generated from element:
|
|
|
+ *
|
|
|
+ * EXPECTED:
|
|
|
+ * A source: abc def ghi
|
|
|
+ * B flat: a b c | d e f | .
|
|
|
+ * C map: A B C | D . .
|
|
|
+ * d limit(4) A B C | D
|
|
|
+ * UNFORTUNATELY:
|
|
|
+ * A source: abc def ghi
|
|
|
+ * B flat: a b c | d e f | .
|
|
|
+ * C map: A B C | D E F
|
|
|
+ * d limit(4) A B C | D
|
|
|
+ *
|
|
|
+ * So we fall-back to our own iterator implementation, sorry
|
|
|
+ *
|
|
|
+ * Reference:
|
|
|
+ * https://bugs.openjdk.java.net/browse/JDK-8075939
|
|
|
+ * https://stackoverflow.com/questions/29229373/why-filter-after-flatmap-is-not-completely-lazy-in-java-streams
|
|
|
+ *
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ public static boolean DONT_USE_FLAT_STREAM() {
|
|
|
+ return DONT_USE_FLAT_STREAM_VALUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static boolean WALKER_JDK7() {
|
|
|
+ return WALKER_JDK7_VALUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static boolean CASE_SENSITIVE_FILES() {
|
|
|
+ return CASE_SENSITIVE_FILES_VALUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static boolean STRICT_REFLECTIVE_RESOLVE() {
|
|
|
+ return STRICT_REFLECTIVE_RESOLVE_VALUE;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|