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());
}