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 2013/12/03 01:21:09 UTC

git commit: ISIS-620: fixed bookmark pages so holds oids without versions

Updated Branches:
  refs/heads/master 8ba1d6dd8 -> 5e181df78


ISIS-620: fixed bookmark pages so holds oids without versions

so cannot accidentally trigger a concurrency exception

Also updated to EntityPropertiesForm so that a concurrency exception,
when detected, is correctly rendered (by setting the response page to
the entity page for redisplay in this case)


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

Branch: refs/heads/master
Commit: 5e181df78cefd69ca01a1df0e33ed95fa4028ce0
Parents: 8ba1d6d
Author: Dan Haywood <da...@apache.org>
Authored: Tue Dec 3 00:09:20 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Dec 3 00:09:20 2013 +0000

----------------------------------------------------------------------
 .../wicket/model/models/BookmarkTreeNode.java   | 86 ++++++++++++++------
 .../models/BookmarkTreeNodeComparator.java      |  4 +-
 .../model/models/BookmarkedPagesModel.java      | 29 ++-----
 .../bookmarkedpages/BookmarkedPagesPanel.java   |  6 +-
 .../entity/properties/EntityPropertiesForm.java |  5 ++
 5 files changed, 79 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/5e181df7/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
index e3b88fd..741f0b6 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
@@ -40,29 +40,45 @@ public class BookmarkTreeNode implements Serializable {
     
         private static final long serialVersionUID = 1L;
         
-        public static final Function<? super BookmarkTreeNode, ? extends PageParameters> AS_PAGE_PARAMETERS = new Function<BookmarkTreeNode, PageParameters>() {
-            public PageParameters apply(BookmarkTreeNode node) {
-                return node.getPageParameters();
-            }
-        };
+//        public static final Function<? super BookmarkTreeNode, ? extends PageParameters> AS_PAGE_PARAMETERS = new Function<BookmarkTreeNode, PageParameters>() {
+//            public PageParameters apply(BookmarkTreeNode node) {
+//                return node.getPageParameters();
+//            }
+//        };
         private final List<BookmarkTreeNode> children = Lists.newArrayList();
         private final int depth;
 
-        private final BookmarkableModel<?> bookmarkableModel;
-
-        private String title;
+        //private final PageParameters pageParameters;
+        private final RootOid oidNoVer;
+        private final String oidNoVerStr;
+        private final PageType pageType;
         
-        public static BookmarkTreeNode newRoot(BookmarkableModel<?> bookmarkableModel) {
+        private String title;
+
+
+        public static BookmarkTreeNode newRoot(
+                BookmarkableModel<?> bookmarkableModel) {
             return new BookmarkTreeNode(bookmarkableModel, 0);
         }
 
-        private BookmarkTreeNode(BookmarkableModel<?> bookmarkableModel, int depth) {
-            this.bookmarkableModel = bookmarkableModel;
-            this.depth = depth;
+        private BookmarkTreeNode(
+                final BookmarkableModel<?> bookmarkableModel, 
+                final int depth) {
+            PageParameters pageParameters = bookmarkableModel.getPageParameters();
+            RootOid oid = oidFrom(pageParameters);
+            this.oidNoVerStr = IsisContext.getOidMarshaller().marshalNoVersion(oid);
+            this.oidNoVer = IsisContext.getOidMarshaller().unmarshal(oidNoVerStr, RootOid.class); 
             this.title = bookmarkableModel.getTitle();
+            this.pageType = bookmarkableModel instanceof EntityModel ? PageType.ENTITY : PageType.ACTION_PROMPT;
+            this.depth = depth;
         }
-        public PageType getPageType() {
-            return bookmarkableModel instanceof EntityModel ? PageType.ENTITY : PageType.ACTION_PROMPT;
+
+        public RootOid getOidNoVer() {
+            return oidNoVer;
+        }
+
+        public String getOidNoVerStr() {
+            return oidNoVerStr;
         }
 
         public String getTitle() {
@@ -72,11 +88,14 @@ public class BookmarkTreeNode implements Serializable {
             this.title = title;
         }
 
-
-        public PageParameters getPageParameters() {
-            //return pageParameters;
-            return bookmarkableModel.getPageParameters();
+        public PageType getPageType() {
+            return pageType;
         }
+
+
+//        public PageParameters getPageParameters() {
+//            return pageParameters;
+//        }
         public List<BookmarkTreeNode> getChildren() {
             return children;
         }
@@ -106,9 +125,8 @@ public class BookmarkTreeNode implements Serializable {
          */
         public boolean matchAndUpdateTitle(BookmarkableModel<?> candidateBookmarkableModel) {
 
-            boolean inGraph = false;
-
-            inGraph = this.getPageParameters().equals(candidateBookmarkableModel.getPageParameters());
+            final String candidateOidStr = oidStrFrom(candidateBookmarkableModel);
+            boolean inGraph = Objects.equal(this.oidNoVerStr, candidateOidStr);
             if(inGraph) {
                 this.setTitle(candidateBookmarkableModel.getTitle());
             }
@@ -127,6 +145,7 @@ public class BookmarkTreeNode implements Serializable {
         }
 
 
+
         private boolean addToGraphIfParented(BookmarkableModel<?> candidateBookmarkableModel) {
             
             boolean whetherAdded = false;
@@ -145,8 +164,7 @@ public class BookmarkTreeNode implements Serializable {
                         continue;
                     } 
                     final String possibleParentOidStr = possibleParentOid.enStringNoVersion(IsisContext.getOidMarshaller());
-                    final String thisOidStr = PageParameterNames.OBJECT_OID.getStringFrom(this.getPageParameters());
-                    if(Objects.equal(thisOidStr, possibleParentOidStr)) {
+                    if(Objects.equal(this.oidNoVerStr, possibleParentOidStr)) {
                         this.addChild(candidateBookmarkableModel);
                         whetherAdded = true;
                     }
@@ -166,4 +184,26 @@ public class BookmarkTreeNode implements Serializable {
             return depth;
         }
 
+        
+        // //////////////////////////////////////
+
+        public static RootOid oidFrom(final PageParameters pageParameters) {
+            String oidStr = PageParameterNames.OBJECT_OID.getStringFrom(pageParameters);
+            if(oidStr == null) {
+                return null;
+            }
+            try {
+                return IsisContext.getOidMarshaller().unmarshal(oidStr, RootOid.class);
+            } catch(Exception ex) {
+                return null;
+            }
+        }
+
+        public static String oidStrFrom(BookmarkableModel<?> candidateBookmarkableModel) {
+            final RootOid oid = oidFrom(candidateBookmarkableModel.getPageParameters());
+            return oid != null? IsisContext.getOidMarshaller().marshalNoVersion(oid): null;
+        }
+
+
+
     }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/5e181df7/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNodeComparator.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNodeComparator.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNodeComparator.java
index 6ca0f89..638968e 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNodeComparator.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNodeComparator.java
@@ -43,8 +43,8 @@ final class BookmarkTreeNodeComparator implements Comparator<BookmarkTreeNode> {
             return pageTypeComparison;
         }
         
-        final RootOid oid1 = oidOf(o1.getPageParameters());
-        final RootOid oid2 = oidOf(o2.getPageParameters());
+        final RootOid oid1 = o1.getOidNoVer();
+        final RootOid oid2 = o2.getOidNoVer();
         
         // sort by entity type
         final String className1 = classNameOf(oid1);

http://git-wip-us.apache.org/repos/asf/isis/blob/5e181df7/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkedPagesModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkedPagesModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkedPagesModel.java
index 3c23f24..0b4fa7d 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkedPagesModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkedPagesModel.java
@@ -30,8 +30,6 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 
 
 public class BookmarkedPagesModel extends ModelAbstract<List<? extends BookmarkTreeNode>> {
@@ -49,7 +47,8 @@ public class BookmarkedPagesModel extends ModelAbstract<List<? extends BookmarkT
         cleanUpGarbage(rootNodes);
         
         final PageParameters candidatePP = bookmarkableModel.getPageParameters();
-        if(!holdsOid(candidatePP)) {
+        RootOid oid = BookmarkTreeNode.oidFrom(candidatePP);
+        if(oid == null) {
             // ignore
             return;
         }
@@ -63,7 +62,8 @@ public class BookmarkedPagesModel extends ModelAbstract<List<? extends BookmarkT
         }
 
         if(!foundInGraph && bookmarkableModel.hasAsRootPolicy()) {
-            rootNodes.add(BookmarkTreeNode.newRoot(bookmarkableModel));
+            BookmarkTreeNode rootNode = BookmarkTreeNode.newRoot(bookmarkableModel);
+            rootNodes.add(rootNode);
             Collections.sort(rootNodes, COMPARATOR);
             current = candidatePP;
         }
@@ -87,30 +87,13 @@ public class BookmarkedPagesModel extends ModelAbstract<List<? extends BookmarkT
         final Iterator<BookmarkTreeNode> iter = rootNodes.iterator();
         while(iter.hasNext()) {
             BookmarkTreeNode node = iter.next();
-            PageParameters pp = node.getPageParameters();
-            if(!holdsOid(pp)) {
+            // think this is redundant...
+            if(node.getOidNoVer() == null) {
                 iter.remove();
             }
         }
     }
 
-    private static boolean holdsOid(PageParameters pp) {
-        try {
-            RootOid oidFrom = oidFrom(pp);
-            return oidFrom != null;
-        } catch(Exception ex) {
-            return false;
-        }
-    }
-    
-    public static RootOid oidFrom(final PageParameters pageParameters) {
-        String oidStr = PageParameterNames.OBJECT_OID.getStringFrom(pageParameters);
-        if(oidStr == null) {
-            return null;
-        }
-        return IsisContext.getOidMarshaller().unmarshal(oidStr, RootOid.class);
-    }
-
     public void clear() {
         rootNodes.clear();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/5e181df7/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
index 3dab1cb..36bf531 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java
@@ -119,8 +119,6 @@ public class BookmarkedPagesPanel extends PanelAbstract<BookmarkedPagesModel> {
             protected void populateItem(ListItem<BookmarkTreeNode> item) {
                 final BookmarkTreeNode node = item.getModelObject();
                 try {
-                    final PageParameters pageParameters = node.getPageParameters();
-
                     final PageType pageType = node.getPageType();
                     final Class<? extends Page> pageClass = pageClassRegistry.getPageClass(pageType);
 
@@ -145,10 +143,12 @@ public class BookmarkedPagesPanel extends PanelAbstract<BookmarkedPagesModel> {
                     }
                     item.add(clearBookmarkLink);
                     
+                    PageParameters pageParameters = new PageParameters();
+                    PageParameterNames.OBJECT_OID.addStringTo(pageParameters, node.getOidNoVerStr());
                     final AbstractLink link = Links.newBookmarkablePageLink(ID_BOOKMARKED_PAGE_LINK, pageParameters, pageClass);
 
-                    final RootOid oid = BookmarkedPagesModel.oidFrom(pageParameters);
                     ObjectSpecification objectSpec = null;
+                    RootOid oid = node.getOidNoVer();
                     if(oid != null) {
                         ObjectSpecId objectSpecId = oid.getObjectSpecId();
                         objectSpec = getSpecificationLoader().lookupBySpecId(objectSpecId);

http://git-wip-us.apache.org/repos/asf/isis/blob/5e181df7/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
index e4168cc..54ca1a8 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
@@ -341,6 +341,9 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
                 if(preValidationErrorIfAny != null) {
                     feedbackOrNotifyAnyRecognizedError(preValidationErrorIfAny, form);
                     // skip validation, because would relate to old values
+                    
+                    final EntityPage entityPage = new EntityPage(EntityPropertiesForm.this.getModelObject(), null);
+                    EntityPropertiesForm.this.setResponsePage(entityPage);
                 } else {
                     // run Wicket's validation
                     super.validate();
@@ -457,6 +460,8 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
         editButton.setOutputMarkupPlaceholderTag(true);
         cancelButton.setOutputMarkupPlaceholderTag(true);
         
+        // flush any JGrowl messages (typically concurrency exceptions) if they are added.
+        okButton.add(new JGrowlBehaviour());
         editButton.add(new JGrowlBehaviour());
         cancelButton.add(new JGrowlBehaviour());
     }