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/07/07 20:39:39 UTC

isis git commit: ISIS-1464: allow lookup of bookmarks for view models

Repository: isis
Updated Branches:
  refs/heads/master cf7b23d20 -> 2877b1819


ISIS-1464: allow lookup of bookmarks for view models


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

Branch: refs/heads/master
Commit: 2877b1819770fbc7023eccec95e42dc92d870a07
Parents: cf7b23d
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jul 7 21:37:25 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jul 7 21:37:25 2016 +0100

----------------------------------------------------------------------
 .../services/bookmark/BookmarkService2.java     | 13 ++++++++++
 .../applib/service/DomainChangeJdoAbstract.java | 26 ++++++++++++++------
 .../objectstore/jdo/applib/service/Util.java    | 15 ++++++++---
 .../system/persistence/PersistenceSession.java  | 13 +++-------
 4 files changed, 48 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/2877b181/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService2.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService2.java b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService2.java
index 6ed7957..5ae2297 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService2.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService2.java
@@ -32,7 +32,20 @@ import org.apache.isis.applib.annotation.Programmatic;
 public interface BookmarkService2 extends BookmarkService {
 
     enum FieldResetPolicy {
+        /**
+         * Will cause all fields of an object to be re-initialized.
+         *
+         * If the object is unresolved then the object's missing data should be retrieved from the persistence
+         * mechanism and be used to set up the value objects and associations.
+         *
+         * If the object is a view model, then is ignored; the behaviour is as for {@link #DONT_RESET}
+         * @deprecated - retained for previous behaviour, but in most/all cases,
+         */
+        @Deprecated
         RESET,
+        /**
+         * Required in order to recreate view models.
+         */
         DONT_RESET
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/2877b181/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/DomainChangeJdoAbstract.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/DomainChangeJdoAbstract.java b/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/DomainChangeJdoAbstract.java
index 1bd674a..0307bfa 100644
--- a/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/DomainChangeJdoAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/DomainChangeJdoAbstract.java
@@ -23,7 +23,6 @@ import java.util.UUID;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
@@ -37,7 +36,8 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.applib.services.bookmark.BookmarkService2;
+import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.applib.services.metamodel.MetaModelService2;
 import org.apache.isis.applib.services.publish.PublisherService;
 import org.apache.isis.applib.services.publish.PublishingService;
@@ -168,12 +168,14 @@ public abstract class DomainChangeJdoAbstract {
 
     @Programmatic
     public Bookmark getTarget() {
-        return Util.bookmarkFor(getTargetStr());
+        final String str = getTargetStr();
+        return str != null? new Bookmark(str): null;
     }
     
     @Programmatic
     public void setTarget(Bookmark target) {
-        setTargetStr(Util.asString(target));
+        final String targetStr = target != null ? target.toString() : null;
+        setTargetStr(targetStr);
     }
 
     // //////////////////////////////////////
@@ -244,7 +246,17 @@ public abstract class DomainChangeJdoAbstract {
     )
     @MemberOrder(name="TargetStr", sequence="1")
     public Object openTargetObject() {
-        return Util.lookupBookmark(getTarget(), bookmarkService, container);
+        try {
+            return bookmarkService != null
+                    ? bookmarkService.lookup(getTarget(), BookmarkService2.FieldResetPolicy.DONT_RESET)
+                    : null;
+        } catch(RuntimeException ex) {
+            if(ex.getClass().getName().contains("ObjectNotFoundException")) {
+                messageService.warnUser("Object not found - has it since been deleted?");
+                return null;
+            }
+            throw ex;
+        }
     }
 
     public boolean hideOpenTargetObject() {
@@ -363,10 +375,10 @@ public abstract class DomainChangeJdoAbstract {
     // //////////////////////////////////////
     
     @javax.inject.Inject
-    protected BookmarkService bookmarkService;
+    protected BookmarkService2 bookmarkService;
     
     @javax.inject.Inject
-    protected DomainObjectContainer container;
+    protected MessageService messageService;
 
     @javax.inject.Inject
     protected MetaModelService2 metaModelService;

http://git-wip-us.apache.org/repos/asf/isis/blob/2877b181/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/Util.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/Util.java b/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/Util.java
index cd6f4c9..d5083ce 100644
--- a/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/Util.java
+++ b/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/Util.java
@@ -21,23 +21,30 @@ import java.math.RoundingMode;
 import java.sql.Timestamp;
 
 import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.applib.services.HasTransactionId;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
-import org.apache.isis.applib.services.command.Command;
 
+/**
+ * This class is deprecated with no replacement.
+ *
+ * @deprecated - with no replacement
+ */
+@Deprecated
 public class Util {
 
     private Util() {}
 
+    @Deprecated
     public static Bookmark bookmarkFor(final String str) {
         return str != null? new Bookmark(str): null;
     }
 
+    @Deprecated
     public static String asString(Bookmark bookmark) {
         return bookmark != null? bookmark.toString(): null;
     }
 
+    @Deprecated
     public static Object lookupBookmark(Bookmark bookmark, final BookmarkService bookmarkService, DomainObjectContainer container) {
         try {
             return bookmarkService != null
@@ -52,11 +59,13 @@ public class Util {
         }
     }
 
-    
+
+    @Deprecated
     public static String abbreviated(final String str, final int maxLength) {
         return str != null? (str.length() < maxLength ? str : str.substring(0, maxLength - 3) + "..."): null;
     }
 
+    @Deprecated
     public static BigDecimal durationBetween(Timestamp startedAt, Timestamp completedAt) {
         if(completedAt == null) {
             return null;

http://git-wip-us.apache.org/repos/asf/isis/blob/2877b181/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index 1f21a5c..a4e6981 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -923,14 +923,9 @@ public class PersistenceSession implements
      *             when no object corresponding to the oid can be found
      */
     public ObjectAdapter loadObjectInTransaction(final RootOid oid) {
-        
-        // REVIEW: 
-        // this method does not account for the oid possibly being a view model
-        // alternatively, can call #adapterFor(oid); this code
-        // delegates to the PojoRecreator which *does* take view models into account
-        //
-        // it's possible, therefore, that existing callers to this method (the Scimpi viewer)
-        // could be refactored to use #adapterFor(...)
+
+        // can be either a view model or a persistent entity.
+
         ensureThatArg(oid, is(notNullValue()));
 
         final ObjectAdapter adapter = getAdapterFor(oid);
@@ -2327,7 +2322,7 @@ public class PersistenceSession implements
         if(adapter == null) {
             return null;
         }
-        if(fieldResetPolicy == BookmarkService2.FieldResetPolicy.RESET) {
+        if(fieldResetPolicy == BookmarkService2.FieldResetPolicy.RESET && !adapter.getSpecification().isViewModel()) {
             refreshRootInTransaction(adapter);
         } else {
             loadObjectInTransaction(oid);