use new public class MaybeSupplier for Maybe instances backed by supplier

so callers can access the supplier in cases where it might also provide other 
info such as Identifiable


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/784bc960
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/784bc960
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/784bc960

Branch: refs/heads/master
Commit: 784bc960f926823be374fa05d3df3fd542ee857a
Parents: 9d2faf0
Author: Alex Heneveld <[email protected]>
Authored: Mon Sep 11 18:00:11 2017 +0100
Committer: Alex Heneveld <[email protected]>
Committed: Fri Sep 15 10:29:08 2017 +0100

----------------------------------------------------------------------
 .../org/apache/brooklyn/util/guava/Maybe.java   | 43 ++++++++++++--------
 1 file changed, 25 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/784bc960/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java
----------------------------------------------------------------------
diff --git 
a/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java 
b/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java
index b115acb..a68b400 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/guava/Maybe.java
@@ -183,29 +183,40 @@ public abstract class Maybe<T> implements Serializable, 
Supplier<T> {
             public T get() {
                 return value.get();
             }
-            @Override
-            public boolean isNull() {
-                // should always be false as per Optional contract
-                return get()==null;
-            }
         };
         return absent();
     }
     
-    public static <T> Maybe<T> of(final Supplier<T> value) {
+    @SuppressWarnings("unused")
+    private static <T> Maybe<T> 
ofOldKeptForDeserializationOfAnonymousInnerClass(final Supplier<T> value) {
         return new AbstractPresent<T>() {
             private static final long serialVersionUID = -5735268814211401356L;
             @Override
             public T get() {
                 return value.get();
             }
-            @Override
-            public boolean isNull() {
-                return get()==null;
-            }
         };
     }
     
+    public static <T> Maybe<T> of(final Supplier<T> value) {
+        return new MaybeSupplier<T>(value);
+    }
+    
+    public static class MaybeSupplier<T> extends AbstractPresent<T> {
+        private static final long serialVersionUID = -823731500051341455L;
+        private Supplier<T> supplier;
+        public MaybeSupplier(Supplier<T> value) {
+            this.supplier = value;
+        }
+        @Override
+        public T get() {
+            return supplier.get();
+        }
+        public Supplier<T> getSupplier() {
+            return supplier;
+        }
+    }
+    
     /** returns a Maybe containing the next element in the iterator, or absent 
if none */ 
     public static <T> Maybe<T> next(Iterator<T> iterator) {
         return iterator.hasNext() ? Maybe.of(iterator.next()) : 
Maybe.<T>absent();
@@ -279,10 +290,6 @@ public abstract class Maybe<T> implements Serializable, 
Supplier<T> {
             public V get() {
                 return f.apply(Maybe.this.get());
             }
-            @Override
-            public boolean isNull() {
-                return get()==null;
-            }
         };
         return absent();
     }
@@ -392,6 +399,10 @@ public abstract class Maybe<T> implements Serializable, 
Supplier<T> {
         protected AbstractPresent() {
         }
         @Override
+        public boolean isNull() {
+            return get()==null;
+        }
+        @Override
         public boolean isPresent() {
             return true;
         }
@@ -407,10 +418,6 @@ public abstract class Maybe<T> implements Serializable, 
Supplier<T> {
         public T get() {
             return value;
         }
-        @Override
-        public boolean isNull() {
-            return value==null;
-        }
     }
 
     public static class SoftlyPresent<T> extends Maybe<T> {

Reply via email to