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.