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/01/22 19:26:27 UTC

[isis] branch ISIS-1846_internal_utils updated: ISIS-1827 refactoring out some guava predicate usages yet without breaking API

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1846_internal_utils by this push:
     new 954c03d  ISIS-1827 refactoring out some guava predicate usages yet without breaking API
954c03d is described below

commit 954c03d7e7cdbb5d17511ab23ddf65fdef57610e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 22 20:26:25 2018 +0100

    ISIS-1827 refactoring out some guava predicate usages
    yet without breaking API
---
 .../isis/applib/layout/grid/bootstrap3/BS3Tab.java |  4 +--
 .../java/org/apache/isis/applib/query/Query.java   |  2 +-
 .../services/repository/RepositoryService.java     | 17 +++++++----
 .../RepositoryServiceInternalDefault.java          | 35 +++++++++++++++++-----
 .../wicket/ui/components/layout/bs3/col/Col.java   | 18 +++++------
 .../components/layout/bs3/tabs/TabGroupPanel.java  | 29 +++++++++---------
 6 files changed, 64 insertions(+), 41 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java
index 1cd3268..a724a2d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java
@@ -20,13 +20,13 @@ package org.apache.isis.applib.layout.grid.bootstrap3;
 
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Predicate;
 
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.base.Predicate;
 import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.annotation.Programmatic;
@@ -104,7 +104,7 @@ public class BS3Tab extends BS3ElementAbstract implements BS3RowOwner {
 
             return new Predicate<BS3Tab>() {
                 @Override
-                public boolean apply(final BS3Tab thisBs3Tab) {
+                public boolean test(final BS3Tab thisBs3Tab) {
                     final BS3Grid owningGrid = thisBs3Tab.getGrid();
                     owningGrid.visit(new BS3Grid.VisitorAdapter() {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/query/Query.java b/core/applib/src/main/java/org/apache/isis/applib/query/Query.java
index 746f133..cb39144 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/query/Query.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/query/Query.java
@@ -21,7 +21,7 @@ package org.apache.isis.applib.query;
 
 import java.io.Serializable;
 
-import com.google.common.base.Predicate;
+import java.util.function.Predicate;
 
 import org.apache.isis.applib.DomainObjectContainer;
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/repository/RepositoryService.java b/core/applib/src/main/java/org/apache/isis/applib/services/repository/RepositoryService.java
index 3c19e5c..3699db1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/repository/RepositoryService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/repository/RepositoryService.java
@@ -20,8 +20,7 @@
 package org.apache.isis.applib.services.repository;
 
 import java.util.List;
-
-import com.google.common.base.Predicate;
+import java.util.function.Predicate;
 
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.query.Query;
@@ -144,9 +143,12 @@ public interface RepositoryService {
      *
      * @param range 2 longs, specifying 0-based start and count.
      */
-    @Programmatic
-    <T> List<T> allMatches(final Class<T> ofType, final Predicate<? super T> predicate, long... range);
+    @Programmatic @Deprecated //TODO ISIS-1827 remove guava from public API
+    <T> List<T> allMatches(final Class<T> ofType, final com.google.common.base.Predicate<? super T> predicate, long... range);
 
+    @Programmatic
+    <T> List<T> allMatches8(final Class<T> ofType, final Predicate<? super T> predicate, long... range);
+    
     /**
      * Returns all the instances that match the given {@link Query}.
      *
@@ -178,7 +180,7 @@ public interface RepositoryService {
      */
     @Deprecated
     @Programmatic
-    <T> T firstMatch(final Class<T> ofType, final Predicate<T> predicate);
+    <T> T firstMatch(final Class<T> ofType, final com.google.common.base.Predicate<T> predicate);
 
     /**
      * Returns the first instance that matches the supplied query, or <tt>null</tt> if none.
@@ -210,8 +212,11 @@ public interface RepositoryService {
      * instances.  Use {@link #uniqueMatch(Query)} for production code.
      * </p>
      */
+    @Programmatic @Deprecated //TODO ISIS-1827 remove guava from public API 
+    <T> T uniqueMatch(final Class<T> ofType, final com.google.common.base.Predicate<T> predicate);
+    
     @Programmatic
-    <T> T uniqueMatch(final Class<T> ofType, final Predicate<T> predicate);
+    <T> T uniqueMatch8(final Class<T> ofType, final Predicate<T> predicate);
 
     /**
      * Find the only instance that matches the provided query.
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceInternalDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceInternalDefault.java
index 15853c1..c60fc0d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceInternalDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceInternalDefault.java
@@ -25,13 +25,15 @@ import java.util.Map;
 
 import javax.annotation.PostConstruct;
 
-import com.google.common.base.Predicate;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 import org.apache.isis.applib.PersistFailedException;
 import org.apache.isis.applib.RepositoryException;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.base._NullSafe;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.query.QueryFindAllInstances;
 import org.apache.isis.applib.services.factory.FactoryService;
@@ -47,8 +49,6 @@ import org.apache.isis.core.metamodel.services.persistsession.PersistenceSession
 )
 public class RepositoryServiceInternalDefault implements RepositoryService {
 
-
-
     private boolean autoFlush;
 
     @Programmatic
@@ -151,7 +151,7 @@ public class RepositoryServiceInternalDefault implements RepositoryService {
 
     @Programmatic
     @Override
-    public <T> List<T> allMatches(final Class<T> cls, final Predicate<? super T> predicate, long... range) {
+    public <T> List<T> allMatches(final Class<T> cls, final com.google.common.base.Predicate<? super T> predicate, long... range) {
         final List<T> allInstances = allInstances(cls, range);
         final List<T> filtered = new ArrayList<T>();
         for (final T instance : allInstances) {
@@ -161,6 +161,14 @@ public class RepositoryServiceInternalDefault implements RepositoryService {
         }
         return filtered;
     }
+    
+    @Programmatic
+	@Override
+	public <T> List<T> allMatches8(Class<T> ofType, final Predicate<? super T> predicate, long... range) {
+		return _NullSafe.stream(allInstances(ofType, range))
+				.filter(predicate)
+				.collect(Collectors.toCollection(ArrayList::new));
+	}
 
 
     @Programmatic
@@ -176,20 +184,30 @@ public class RepositoryServiceInternalDefault implements RepositoryService {
         final List<ObjectAdapter> allMatching = persistenceSessionServiceInternal.allMatchingQuery(query);
         return ObjectAdapter.Util.unwrapT(allMatching);
     }
-
+    
 
     // //////////////////////////////////////
 
 
     @Programmatic
     @Override
-    public <T> T uniqueMatch(final Class<T> type, final Predicate<T> predicate) {
+    public <T> T uniqueMatch(final Class<T> type, final com.google.common.base.Predicate<T> predicate) {
         final List<T> instances = allMatches(type, predicate, 0, 2); // No need to fetch more than 2.
         if (instances.size() > 1) {
             throw new RepositoryException("Found more than one instance of " + type + " matching filter " + predicate);
         }
         return firstInstanceElseNull(instances);
     }
+    
+    @Programmatic
+    @Override
+    public <T> T uniqueMatch8(final Class<T> type, final Predicate<T> predicate) {
+        final List<T> instances = allMatches8(type, predicate, 0, 2); // No need to fetch more than 2.
+        if (instances.size() > 1) {
+            throw new RepositoryException("Found more than one instance of " + type + " matching filter " + predicate);
+        }
+        return firstInstanceElseNull(instances);
+    }
 
 
     @Programmatic
@@ -208,7 +226,7 @@ public class RepositoryServiceInternalDefault implements RepositoryService {
 
     @Programmatic
     @Override
-    public <T> T firstMatch(final Class<T> cls, final Predicate<T> predicate) {
+    public <T> T firstMatch(final Class<T> cls, final com.google.common.base.Predicate<T> predicate) {
         final List<T> allInstances = allInstances(cls); // Have to fetch all, as matching is done in next loop
         for (final T instance : allInstances) {
             if (predicate.apply(instance)) {
@@ -218,7 +236,6 @@ public class RepositoryServiceInternalDefault implements RepositoryService {
         return null;
     }
 
-
     @Programmatic
     @Override
     @SuppressWarnings("unchecked")
@@ -256,4 +273,6 @@ public class RepositoryServiceInternalDefault implements RepositoryService {
     @javax.inject.Inject
     PersistenceSessionServiceInternal persistenceSessionServiceInternal;
 
+
+
 }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
index 0770f66..ba2c32a 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
@@ -19,6 +19,7 @@
 package org.apache.isis.viewer.wicket.ui.components.layout.bs3.col;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.Nullable;
 
@@ -30,7 +31,7 @@ import com.google.common.collect.Lists;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.WebMarkupContainer;
-
+import org.apache.isis.applib.internal.base._NullSafe;
 import org.apache.isis.applib.layout.component.ActionLayoutData;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
 import org.apache.isis.applib.layout.component.DomainObjectLayoutData;
@@ -178,11 +179,9 @@ public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVis
                 FluentIterable.from(bs3Col.getTabGroups())
                         .filter(new Predicate<BS3TabGroup>() {
                             @Override public boolean apply(@Nullable final BS3TabGroup bs3TabGroup) {
-                                final List<BS3Tab> bs3TabsWithRows =
-                                        FluentIterable
-                                                .from(bs3TabGroup.getTabs())
+                                final List<BS3Tab> bs3TabsWithRows = _NullSafe.stream(bs3TabGroup.getTabs())
                                                 .filter(BS3Tab.Predicates.notEmpty())
-                                                .toList();
+                                                .collect(Collectors.toList());
                                 return !bs3TabsWithRows.isEmpty();
                             }
                         }).toList();
@@ -193,11 +192,10 @@ public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVis
             for (BS3TabGroup bs3TabGroup : tabGroupsWithNonEmptyTabs) {
 
                 final String id = tabGroupRv.newChildId();
-                final List<BS3Tab> tabs =
-                        FluentIterable
-                                .from(bs3TabGroup.getTabs())
-                                .filter(BS3Tab.Predicates.notEmpty())
-                                .toList();
+                final List<BS3Tab> tabs = _NullSafe.stream(bs3TabGroup.getTabs())
+                        .filter(BS3Tab.Predicates.notEmpty())
+                        .collect(Collectors.toList());
+
                 switch (tabs.size()) {
                 case 0:
                     // shouldn't occur; previously have filtered these out
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
index 8eb5039..013f188 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
@@ -19,17 +19,9 @@
 package org.apache.isis.viewer.wicket.ui.components.layout.bs3.tabs;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
-import com.google.common.base.Predicate;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.Lists;
-
-import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
-import org.apache.wicket.extensions.markup.html.tabs.ITab;
-import org.apache.wicket.extensions.markup.html.tabs.TabbedPanel;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.Model;
-
+import org.apache.isis.applib.internal.base._NullSafe;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3Tab;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3TabGroup;
 import org.apache.isis.applib.services.i18n.TranslationService;
@@ -37,6 +29,15 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.util.ComponentHintKey;
 import org.apache.isis.viewer.wicket.ui.components.layout.bs3.col.RepeatingViewWithDynamicallyVisibleContent;
+import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.extensions.markup.html.tabs.TabbedPanel;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.Lists;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
 
@@ -52,10 +53,10 @@ public class TabGroupPanel extends AjaxBootstrapTabbedPanel  {
     private static List<ITab> tabsFor(final EntityModel entityModel, final BS3TabGroup bs3TabGroup) {
         final List<ITab> tabs = Lists.newArrayList();
 
-        final List<BS3Tab> tablist = FluentIterable
-                .from(bs3TabGroup.getTabs())
-                .filter(BS3Tab.Predicates.notEmpty())
-                .toList();
+        final List<BS3Tab> tablist = _NullSafe.stream(bs3TabGroup.getTabs())
+        		.filter(BS3Tab.Predicates.notEmpty())
+        		.collect(Collectors.toList());
+        		
 
         for (final BS3Tab bs3Tab : tablist) {
             final RepeatingViewWithDynamicallyVisibleContent rv = TabPanel.newRows(entityModel, bs3Tab);

-- 
To stop receiving notification emails like this one, please contact
ahuber@apache.org.