You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/10/21 15:01:21 UTC

[27/44] isis git commit: ISIS-1499: enhances BookmarkServiceDefault to also support lookup of domain services.

ISIS-1499: enhances BookmarkServiceDefault to also support lookup of domain services.

nb: requires that the bookmark's objectType is the fully qualified class name of the service.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/c8f56552
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/c8f56552
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/c8f56552

Branch: refs/heads/master
Commit: c8f565523dd926edf9d690618face73a99524cf4
Parents: c5a7b5e
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Sep 27 18:04:18 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Sep 27 18:04:18 2016 +0100

----------------------------------------------------------------------
 .../BookmarkServiceInternalDefault.java         | 56 ++++++++++++++++++--
 1 file changed, 52 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c8f56552/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceInternalDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceInternalDefault.java
index 7eb86f5..d4f9406 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceInternalDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/bookmarks/BookmarkServiceInternalDefault.java
@@ -18,12 +18,20 @@
  */
 package org.apache.isis.core.metamodel.services.bookmarks;
 
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import com.google.common.collect.Maps;
+
 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.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkHolder;
 import org.apache.isis.applib.services.bookmark.BookmarkService2;
+import org.apache.isis.applib.services.registry.ServiceRegistry2;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
@@ -43,7 +51,6 @@ public class BookmarkServiceInternalDefault implements BookmarkService2 {
 
 
     @Programmatic
-    @Override
     public Object lookup(
             final BookmarkHolder bookmarkHolder,
             final FieldResetPolicy fieldResetPolicy) {
@@ -58,9 +65,7 @@ public class BookmarkServiceInternalDefault implements BookmarkService2 {
     }
 
 
-    @Programmatic
-    @Override
-    public Object lookup(
+    private Object lookupInternal(
             final Bookmark bookmark,
             final FieldResetPolicy fieldResetPolicy) {
         if(bookmark == null) {
@@ -73,6 +78,25 @@ public class BookmarkServiceInternalDefault implements BookmarkService2 {
         }
     }
 
+
+    @Programmatic
+    @Override
+    public Object lookup(
+            final Bookmark bookmark,
+            final FieldResetPolicy fieldResetPolicy) {
+        if(bookmark == null) {
+            return null;
+        }
+        final String objectType = bookmark.getObjectType();
+        final Object service = lookupService(objectType);
+        if(service != null) {
+            return service;
+        }
+        return lookupInternal(bookmark, fieldResetPolicy);
+    }
+
+
+
     @Programmatic
     @Override
     public Object lookup(final Bookmark bookmark) {
@@ -120,10 +144,34 @@ public class BookmarkServiceInternalDefault implements BookmarkService2 {
 
 
 
+
+
+    private Map<String,Object> servicesByClassName;
+    private Object lookupService(final String className) {
+        cacheServicesByClassNameIfNecessary();
+        return servicesByClassName.get(className);
+    }
+
+    private void cacheServicesByClassNameIfNecessary() {
+        if (servicesByClassName == null) {
+            final Map<String,Object> servicesByClassName = Maps.newHashMap();
+            final List<Object> registeredServices = serviceRegistry2.getRegisteredServices();
+            for (Object registeredService : registeredServices) {
+                final String serviceClassName = registeredService.getClass().getName();
+                servicesByClassName.put(serviceClassName, registeredService);
+            }
+            this.servicesByClassName = servicesByClassName;
+        }
+    }
+
+
     @javax.inject.Inject
     PersistenceSessionServiceInternal persistenceSessionServiceInternal;
 
     @javax.inject.Inject
     private WrapperFactory wrapperFactory;
 
+    @Inject
+    ServiceRegistry2 serviceRegistry2;
+
 }