You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/05/22 10:17:47 UTC
[isis] branch master updated: ISIS-1841 Internal API: polishing
using _With
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new c737ca1 ISIS-1841 Internal API: polishing using _With
c737ca1 is described below
commit c737ca14085502ab9a0e141c13bc3b98b652f229
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue May 22 12:17:40 2018 +0200
ISIS-1841 Internal API: polishing using _With
---
.../isis/applib/internal/memento/MementosTest.java | 2 +-
.../apache/isis/commons/internal/base/_Bytes.java | 21 ++---
.../apache/isis/commons/internal/base/_Casts.java | 11 ++-
.../apache/isis/commons/internal/base/_Lazy.java | 6 +-
.../isis/commons/internal/base/_Strings.java | 99 ++++++++++------------
.../apache/isis/commons/internal/base/_With.java | 43 +++++++++-
.../isis/commons/internal/context/_Context.java | 32 +++----
.../isis/commons/internal/resources/_Resource.java | 7 +-
8 files changed, 119 insertions(+), 102 deletions(-)
diff --git a/core/applib/src/test/java/org/apache/isis/applib/internal/memento/MementosTest.java b/core/applib/src/test/java/org/apache/isis/applib/internal/memento/MementosTest.java
index 2fb86aa..da0c0fb 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/internal/memento/MementosTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/internal/memento/MementosTest.java
@@ -64,7 +64,7 @@ public class MementosTest {
@Override
public <T> T read(Class<T> cls, Serializable value) {
- return _Casts.castToOrElse(value, cls, ()->null);
+ return _Casts.castToOrElseGet(value, cls, ()->null);
}
};
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Bytes.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Bytes.java
index 107d8db..4b4c018 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Bytes.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Bytes.java
@@ -19,11 +19,13 @@
package org.apache.isis.commons.internal.base;
+import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
+import static org.apache.isis.commons.internal.base._With.requires;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Base64;
-import java.util.Objects;
import java.util.function.UnaryOperator;
import javax.annotation.Nullable;
@@ -128,11 +130,8 @@ public final class _Bytes {
* @return null if {@code input} is null
*/
public final static byte[] encodeToBase64(Base64.Encoder encoder, @Nullable final byte[] input) {
- if(input==null) {
- return null;
- }
- Objects.requireNonNull(encoder);
- return encoder.encode(input);
+ requires(encoder, "encoder");
+ return mapIfPresentElse(input, encoder::encode, null);
}
/**
@@ -143,11 +142,8 @@ public final class _Bytes {
* @return null if {@code base64} is null
*/
public final static byte[] decodeBase64(Base64.Decoder decoder, @Nullable final byte[] base64) {
- if(base64==null) {
- return null;
- }
- Objects.requireNonNull(decoder);
- return decoder.decode(base64);
+ requires(decoder, "decoder");
+ return mapIfPresentElse(base64, decoder::decode, null);
}
// -- COMPRESSION
@@ -204,8 +200,7 @@ public final class _Bytes {
private final UnaryOperator<byte[]> operator;
private BytesOperator(UnaryOperator<byte[]> operator) {
- Objects.requireNonNull(operator);
- this.operator = operator;
+ this.operator = requires(operator, "operator");
}
public byte[] apply(byte[] input) {
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Casts.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Casts.java
index 3757b0e..64c0ebd 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Casts.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Casts.java
@@ -19,7 +19,8 @@
package org.apache.isis.commons.internal.base;
-import java.util.Objects;
+import static org.apache.isis.commons.internal.base._With.requires;
+
import java.util.function.Supplier;
import javax.annotation.Nullable;
@@ -52,14 +53,12 @@ public final class _Casts {
* @param orElse
* @return
*/
- public static <T> T castToOrElse(@Nullable Object value, Class<T> cls, Supplier<T> orElse) {
- Objects.requireNonNull(cls);
- Objects.requireNonNull(orElse);
+ public static <T> T castToOrElseGet(@Nullable Object value, Class<T> cls, Supplier<T> orElse) {
try {
- return cls.cast(value);
+ return requires(cls, "cls").cast(value);
} catch (Exception e) {
- return orElse.get();
+ return requires(orElse, "orElse").get();
}
}
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
index f10f7c5..f394d1c 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
@@ -19,7 +19,8 @@
package org.apache.isis.commons.internal.base;
-import java.util.Objects;
+import static org.apache.isis.commons.internal.base._With.requires;
+
import java.util.function.Supplier;
/**
@@ -45,8 +46,7 @@ public final class _Lazy<T> implements Supplier<T> {
}
private _Lazy(Supplier<? extends T> supplier) {
- Objects.requireNonNull(supplier, "supplier required");
- this.supplier = supplier;
+ this.supplier = requires(supplier, "supplier");
}
public boolean isMemoized() {
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
index 61730d5..21b7bbd 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
@@ -20,9 +20,10 @@
package org.apache.isis.commons.internal.base;
import static org.apache.isis.commons.internal.base._Strings_SplitIterator.splitIterator;
+import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
+import static org.apache.isis.commons.internal.base._With.requires;
import java.nio.charset.Charset;
-import java.util.Objects;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.UnaryOperator;
@@ -98,10 +99,7 @@ public final class _Strings {
* @return null if the {@code input} is null
*/
public static String trim(@Nullable String input) {
- if(input==null) {
- return null;
- }
- return input.trim();
+ return mapIfPresentElse(input, String::trim, null);
}
/**
@@ -110,10 +108,7 @@ public final class _Strings {
* @return null if {@code input} is null
*/
public static String lower(@Nullable final String input) {
- if(input==null) {
- return null;
- }
- return input.toLowerCase();
+ return mapIfPresentElse(input, String::toLowerCase, null);
}
/**
@@ -122,10 +117,7 @@ public final class _Strings {
* @return null if {@code input} is null
*/
public static String upper(@Nullable final String input) {
- if(input==null) {
- return null;
- }
- return input.toUpperCase();
+ return mapIfPresentElse(input, String::toUpperCase, null);
}
/**
@@ -158,7 +150,7 @@ public final class _Strings {
if(input==null) {
return null;
}
- Objects.requireNonNull(prefix);
+ requires(prefix, "prefix");
if(input.startsWith(prefix)) {
return input;
}
@@ -175,7 +167,7 @@ public final class _Strings {
if(input==null) {
return null;
}
- Objects.requireNonNull(suffix);
+ requires(suffix, "suffix");
if(input.endsWith(suffix)) {
return input;
}
@@ -206,14 +198,18 @@ public final class _Strings {
}
final int fillCount = minLength - len;
- final StringBuilder sb = new StringBuilder();
- for(int i=0; i<fillCount; ++i) {
- sb.append(c);
- }
- if(len>0) {
- sb.append(str);
- }
- return sb.toString();
+
+ return _With.stringBuilder(sb->{
+
+ for(int i=0; i<fillCount; ++i) {
+ sb.append(c);
+ }
+
+ if(len>0) {
+ sb.append(str);
+ }
+
+ }).toString();
}
/**
@@ -238,14 +234,18 @@ public final class _Strings {
}
final int fillCount = minLength - len;
- final StringBuilder sb = new StringBuilder();
- if(len>0) {
- sb.append(str);
- }
- for(int i=0; i<fillCount; ++i) {
- sb.append(c);
- }
- return sb.toString();
+
+ return _With.stringBuilder(sb->{
+
+ if(len>0) {
+ sb.append(str);
+ }
+
+ for(int i=0; i<fillCount; ++i) {
+ sb.append(c);
+ }
+
+ }).toString();
}
// -- SPLITTING
@@ -288,11 +288,8 @@ public final class _Strings {
* @return null if {@code input} is null
*/
public static String condenseWhitespaces(@Nullable final String input, final String replacement) {
- if(input==null) {
- return null;
- }
- Objects.requireNonNull(replacement);
- return input.replaceAll("\\s+", replacement);
+ requires(replacement, "replacement");
+ return mapIfPresentElse(input, __->input.replaceAll("\\s+", replacement), null);
}
// -- BYTE ARRAY CONVERSION
@@ -304,11 +301,8 @@ public final class _Strings {
* @return null if {@code str} is null
*/
public final static byte[] toBytes(@Nullable final String str, Charset charset) {
- if(str==null) {
- return null;
- }
- Objects.requireNonNull(charset);
- return str.getBytes(charset);
+ requires(charset, "charset");
+ return mapIfPresentElse(str, __->str.getBytes(charset), null);
}
/**
@@ -318,11 +312,8 @@ public final class _Strings {
* @return null if {@code bytes} is null
*/
public final static String ofBytes(@Nullable final byte[] bytes, Charset charset) {
- if(bytes==null) {
- return null;
- }
- Objects.requireNonNull(charset);
- return new String(bytes, charset);
+ requires(charset, "charset");
+ return mapIfPresentElse(bytes, __->new String(bytes, charset), null);
}
/**
@@ -335,12 +326,9 @@ public final class _Strings {
* @return null if {@code input} is null
*/
public final static String convert(@Nullable final String input, final BytesOperator converter, final Charset charset) {
- if(input==null) {
- return null;
- }
- Objects.requireNonNull(converter);
- Objects.requireNonNull(charset);
- return ofBytes(converter.apply(toBytes(input, charset)), charset);
+ requires(converter, "converter");
+ requires(charset, "charset");
+ return mapIfPresentElse(input, __->ofBytes(converter.apply(toBytes(input, charset)), charset), null);
}
// -- UNARY OPERATOR COMPOSITION
@@ -353,8 +341,7 @@ public final class _Strings {
private final UnaryOperator<String> operator;
private StringOperator(UnaryOperator<String> operator) {
- Objects.requireNonNull(operator);
- this.operator = operator;
+ this.operator = requires(operator, "operator");
}
public String apply(String input) {
@@ -391,8 +378,8 @@ public final class _Strings {
public final static String asFileNameWithExtension(final String fileName, String fileExtension) {
- Objects.requireNonNull(fileName);
- Objects.requireNonNull(fileExtension);
+ requires(fileName, "fileName");
+ requires(fileExtension, "fileExtension");
return suffix(fileName, prefix(fileExtension, "."));
}
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
index 2e67d45..bbc5a5c 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
@@ -33,7 +33,7 @@ import javax.annotation.Nullable;
/**
* <h1>- internal use only -</h1>
* <p>
- * Provides fluent replacements for common accept/apply/supply idioms.
+ * Provides shortcuts for common 'Optional' idioms.
* </p>
* <p>
* <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this package! <br/>
@@ -46,6 +46,45 @@ public final class _With<T> {
private _With() { }
+ // -- OPTION IDIOMS
+
+ /**
+ * Equivalent to {@code Optional.ofNullable(obj).orElse(orElse);}
+ * @param obj (nullable)
+ * @param orElse (nullable)
+ * @return {@code obj!=null ? obj : orElse}
+ */
+ public static <X> X ifPresentElse(@Nullable X obj, @Nullable X orElse) {
+ return obj!=null ? obj : orElse;
+ }
+
+ /**
+ * Equivalent to {@code Optional.ofNullable(obj).orElseGet(elseGet);}
+ * @param obj (nullable)
+ * @param elseGet
+ * @return {@code obj!=null ? obj : elseGet.get()}
+ */
+ public static <X> X ifPresentElseGet(@Nullable X obj, Supplier<X> elseGet) {
+ return obj!=null ? obj : requires(elseGet, "elseGet").get();
+ }
+
+ /**
+ * Equivalent to {@code Optional.ofNullable(obj).orElseThrow(elseThrow);}
+ * @param obj (nullable)
+ * @param elseThrow
+ * @return {@code obj!=null ? obj : throw( elseThrow.get() )}
+ * @throws E
+ */
+ public static <X, E extends Exception> X ifPresentElseThrow(
+ @Nullable X obj,
+ Supplier<E> elseThrow)
+ throws E {
+ if(obj!=null) {
+ return obj;
+ }
+ throw requires(elseThrow, "elseThrow").get();
+ }
+
// -- CONSUMER IDIOMS
/**
@@ -166,7 +205,7 @@ public final class _With<T> {
// -- PARAMETER NON-NULL CHECK
- public static <T> T requires(T obj, String paramName) {
+ public static <T> T requires(@Nullable T obj, String paramName) {
if (obj == null) {
throw new NullPointerException(String.format("Parameter '%s' is required to be non-null.", paramName));
}
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context.java b/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context.java
index 0da16ae..d150085 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context.java
@@ -19,6 +19,10 @@
package org.apache.isis.commons.internal.context;
+import static org.apache.isis.commons.internal.base._With.ifPresentElseGet;
+import static org.apache.isis.commons.internal.base._With.ifPresentElseThrow;
+import static org.apache.isis.commons.internal.base._With.requires;
+
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -63,8 +67,8 @@ public final class _Context {
* on the current context.
*/
public static <T> void putSingleton(Class<? super T> type, T singleton) {
- Objects.requireNonNull(type);
- Objects.requireNonNull(singleton);
+ requires(type, "type");
+ requires(singleton, "singleton");
// let writes to the map be atomic
synchronized (singletonMap) {
@@ -84,8 +88,8 @@ public final class _Context {
* @return whether the {@code singleton} was put on the context or ignored because there is already one present
*/
public static <T> boolean put(Class<? super T> type, T singleton, boolean override) {
- Objects.requireNonNull(type);
- Objects.requireNonNull(singleton);
+ requires(type, "type");
+ requires(singleton, "singleton");
// let writes to the map be atomic
synchronized (singletonMap) {
@@ -116,8 +120,8 @@ public final class _Context {
* @return null, if there is no such instance
*/
public static <T> T computeIfAbsent(Class<? super T> type, Function<Class<? super T>, T> factory) {
- Objects.requireNonNull(type);
- Objects.requireNonNull(factory);
+ requires(type, "type");
+ requires(factory, "factory");
// let writes to the map be atomic
synchronized (singletonMap) {
@@ -134,12 +138,8 @@ public final class _Context {
* @return
*/
public static <T> T getOrElse(Class<? super T> type, Supplier<T> fallback) {
- Objects.requireNonNull(fallback);
- final T singleton = getIfAny(type);
- if(singleton!=null) {
- return singleton;
- }
- return fallback.get();
+ requires(fallback, "fallback");
+ return ifPresentElseGet(getIfAny(type), fallback);
}
/**
@@ -154,12 +154,8 @@ public final class _Context {
Class<? super T> type,
Supplier<E> onNotFound)
throws E {
- Objects.requireNonNull(onNotFound);
- final T singleton = getIfAny(type);
- if(singleton!=null) {
- return singleton;
- }
- throw onNotFound.get();
+ requires(onNotFound, "onNotFound");
+ return ifPresentElseThrow(getIfAny(type), onNotFound);
}
/**
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource.java b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource.java
index 951745d..654a70e 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resource.java
@@ -19,10 +19,11 @@
package org.apache.isis.commons.internal.resources;
+import static org.apache.isis.commons.internal.base._With.requires;
+
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
-import java.util.Objects;
import org.apache.isis.commons.internal.base._Bytes;
import org.apache.isis.commons.internal.base._Strings;
@@ -45,8 +46,8 @@ public final class _Resource {
public static InputStream load(Class<?> contextClass, String resourceName) {
- Objects.requireNonNull(contextClass);
- Objects.requireNonNull(resourceName);
+ requires(contextClass, "contextClass");
+ requires(resourceName, "resourceName");
final String absoluteResourceName = resolveName(resourceName, contextClass);
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.