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/05/10 06:53:18 UTC
git commit: ISIS-403: improved bookmarking in Wicket viewer
Updated Branches:
refs/heads/master 5adf0eb13 -> 7c6cce876
ISIS-403: improved bookmarking in Wicket viewer
@Bookmarkable annotation
Bookmark Panel moved to side.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/7c6cce87
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/7c6cce87
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/7c6cce87
Branch: refs/heads/master
Commit: 7c6cce8761d401fb9a15203bd7dda9c95b09e6fb
Parents: 5adf0eb
Author: Dan Haywood <da...@apache.org>
Authored: Fri May 10 06:52:50 2013 +0200
Committer: Dan Haywood <da...@apache.org>
Committed: Fri May 10 06:52:50 2013 +0200
----------------------------------------------------------------------
.../viewer/wicket/model/models/ActionModel.java | 8 +-
.../wicket/model/models/BookmarkedPagesModel.java | 57 ++++++++++-
.../bookmarkedpages/BookmarkedPagesPanel.css | 69 +++++++++---
.../bookmarkedpages/BookmarkedPagesPanel.html | 32 ++++---
.../bookmarkedpages/BookmarkedPagesPanel.java | 21 +++-
.../ui/components/bookmarkedpages/slide-panel.js | 43 ++++++++
.../CollectionContentsSortableDataProvider.java | 1 +
.../isis/viewer/wicket/ui/pages/PageAbstract.css | 1 +
.../viewer/wicket/ui/pages/entity/EntityPage.java | 17 +++-
.../selector/links/LinksSelectorPanelAbstract.css | 4 +
.../selector/links/LinksSelectorPanelAbstract.html | 14 +---
.../selector/links/LinksSelectorPanelAbstract.java | 3 -
.../isis/applib/annotation/BookmarkPolicy.java | 16 +++
.../isis/applib/annotation/Bookmarkable.java | 41 +++++++
.../object/bookmarkable/BookmarkPolicyFacet.java | 32 ++++++
.../bookmarkable/BookmarkPolicyFacetAbstract.java | 48 +++++++++
.../bookmarkable/BookmarkPolicyFacetFallback.java | 32 ++++++
...okmarkPolicyFacetViaBookmarkableAnnotation.java | 32 ++++++
.../BookmarkableAnnotationFacetFactory.java | 48 +++++++++
.../annotation/TitleFacetViaTitleAnnotation.java | 2 +-
.../dflt/ProgrammingModelFacetsJava5.java | 2 +
.../AggregatedAnnotationFacetFactoryTest.java | 2 +-
.../BookmarkableAnnotationFacetFactoryTest.java | 83 +++++++++++++++
.../src/main/webapp/WEB-INF/isis.properties | 14 +++
24 files changed, 565 insertions(+), 57 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index c36f96b..eba7d23 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -521,6 +521,11 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
}
}
+ public boolean hasSafeActionSemantics() {
+ return getActionMemento().getAction().getSemantics() == ActionSemantics.Of.SAFE;
+ }
+
+
//////////////////////////////////////////////////
// Dependencies (from context)
//////////////////////////////////////////////////
@@ -529,9 +534,6 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
return IsisContext.getOidMarshaller();
}
- public boolean hasSafeActionSemantics() {
- return getActionMemento().getAction().getSemantics() == ActionSemantics.Of.SAFE;
- }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/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 968fdbc..d755c34 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
@@ -19,6 +19,8 @@
package org.apache.isis.viewer.wicket.model.models;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
@@ -27,9 +29,12 @@ import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.util.string.StringValue;
+import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
@@ -83,9 +88,45 @@ public class BookmarkedPagesModel extends ModelAbstract<List<PageParameters>> im
// if get here, then didn't find.
list.add(candidatePP);
+ Collections.sort(list, new Comparator<PageParameters>() {
+
+ @Override
+ public int compare(PageParameters o1, PageParameters o2) {
+ PageType pageType1 = PageParameterNames.PAGE_TYPE.getEnumFrom(o1, PageType.class);
+ PageType pageType2 = PageParameterNames.PAGE_TYPE.getEnumFrom(o2, PageType.class);
+
+ final int pageTypeComparison = pageType1.compareTo(pageType2);
+ if(pageTypeComparison != 0) {
+ return pageTypeComparison;
+ }
+
+ if(pageType1 == PageType.ENTITY) {
+ // sort by entity type
+ final String className1 = classNameOf(o1);
+ final String className2 = classNameOf(o2);
+
+ final int classNameComparison = className1.compareTo(className2);
+ if(classNameComparison != 0) {
+ return classNameComparison;
+ }
+ }
+ String title1 = PageParameterNames.PAGE_TITLE.getStringFrom(o1);
+ String title2 = PageParameterNames.PAGE_TITLE.getStringFrom(o2);
+ return title1.compareTo(title2);
+ }
+
+ private String classNameOf(PageParameters o1) {
+ String oidStr1 = PageParameterNames.OBJECT_OID.getStringFrom(o1);
+ RootOid oid1 = getOidMarshaller().unmarshal(oidStr1, RootOid.class);
+ ObjectSpecId objectSpecId1 = oid1.getObjectSpecId();
+ final String className1 = getSpecificationLoader().lookupBySpecId(objectSpecId1).getIdentifier().getClassName();
+ return className1;
+ }
+ });
current = candidatePP;
}
+
@Override
protected List<PageParameters> load() {
return list;
@@ -120,4 +161,18 @@ public class BookmarkedPagesModel extends ModelAbstract<List<PageParameters>> im
return list.isEmpty();
}
+
+
+ //////////////////////////////////////////////////
+ // Dependencies (from context)
+ //////////////////////////////////////////////////
+
+ protected OidMarshaller getOidMarshaller() {
+ return IsisContext.getOidMarshaller();
+ }
+
+ protected SpecificationLoader getSpecificationLoader() {
+ return IsisContext.getSpecificationLoader();
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.css
index 976e879..f94d1de 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.css
@@ -21,30 +21,30 @@
font-size: 0.7em;
text-transform:uppercase;
font-weight:bold;
- float:left;
width:100%;
margin-bottom:5px;
}
.bookmarkedPagesPanel .bookmarkedPagesList {
- display: inline;
+ margin-top:30px;
+
}
.bookmarkedPagesPanel .bookmarkedPageItem {
- display: inline;
+ margin-top:10px;
+ margin-bottom:10px;
}
.bookmarkedPagesPanel span.bookmarkedPageImageAndTitle {
margin-right: 5px;
margin-bottom:5px;
- float:left;
border-radius:4px;
-moz-border-radius:4px;
-webkit-border-radius:4px;
background-color:#F0EFEA;
- padding:1px 6px 1px 6px;
+ padding:10px 10px 3px 10px;
}
.bookmarkedPagesPanel span.bookmarkedPageImageAndTitle:hover {
@@ -52,21 +52,21 @@
}
.bookmarkedPagesPanel .bookmarkedPagesList a img.bookmarkedPageImage {
- float:left;
+ /*float:left;*/
background-color: transparent;
width: 16px;
height: 16px;
- padding:3px 0px 0px 3px;
+ /*padding:3px 0px 0px 3px;*/
}
.bookmarkedPagesPanel .bookmarkedPagesList span.bookmarkedPageTitle {
- float:left;
- display:block;
font-style:normal !important;
- padding:3px 0px 0px 3px;
+
+ vertical-align: top;
+ padding-left: 5px;
}
-.bookmarkedPagesPanel .bookmarkedPagesList a span.bookmarkedPageTitle {
+.bookmarkedPagesPanel span.bookmarkedPageTitle {
background-color:#F0EFEA;
}
@@ -76,20 +76,55 @@
}
.bookmarkedPagesPanel .clearBookmarks {
- display: inline;
color: rgb(128,0,0);
}
.bookmarkedPagesPanel .clearBookmarks {
- background: url('images/icon_clear.png') no-repeat center center transparent !important;
border-radius: 4px 4px 4px 4px;
color: #46413B;
display: block;
- float: left;
font-style: normal !important;
- margin-bottom: 5px;
+ margin-top: 30px;
+ margin-bottom: 10px;
margin-right: 5px;
- padding:3px 8px 3px 8px;
- text-indent: -999em;
+ margin-left: 10px;
}
+.bookmarkedPagesPanel .currentBookmark span.bookmarkedPageImageAndTitle,
+.bookmarkedPagesPanel .currentBookmark span.bookmarkedPageTitle {
+ background-color:#FFFFFF;
+}
+
+
+.showPanelTab {
+ border-radius: 0px 8px 8px 0px;
+ width:10px;
+ height:720px;
+ position:fixed;
+ left:0px;
+ top:120px;
+ display:block;
+ cursor:pointer;
+ background-color: #40C0CB;
+ z-index: 2;
+
+ text-transform:uppercase;
+ font-weight:bold;
+}
+
+#panel {
+ border-radius: 0px 8px 8px 0px;
+ position:fixed;
+ left:0px;
+ top:80px;
+ background-color:#F0EFEA;
+ height:800px;
+ width:0;/*new line*/
+ z-index: 1;
+}
+#panel .content {
+ width:290px;
+ margin-left:30px;
+
+ display: none;
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.html
index d3205f9..221c4ea 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.html
@@ -24,19 +24,25 @@
lang="en">
<body>
<wicket:panel>
- <div id="bookmarkedPages" class="bookmarkedPagesPanel bookmarkedPagesComponentType">
- <ul wicket:id="bookmarkList" class="bookmarkedPagesList">
- <li wicket:id="bookmarkedPageItem" class="bookmarkedPageItem">
- <a href="#" wicket:id="bookmarkedPageLink">
- <span class="bookmarkedPageImageAndTitle">
- <img wicket:id="bookmarkedPageImage" class="bookmarkedPageImage"/>
- <span wicket:id="bookmarkedPageTitle" class="bookmarkedPageTitle">[link title]</span>
- </span>
- </a>
- </li>
- </ul>
- <a href="#" wicket:id="clearBookmarks" class="clearBookmarks" title="Clear Bookmarks">clear</a>
- </div>
+ <div class="showPanelTab">
+ </div>
+ <div id="panel"> <!--the hidden panel -->
+ <div class="content">
+ <div id="bookmarkedPages" class="bookmarkedPagesPanel bookmarkedPagesComponentType">
+ <a href="#" wicket:id="clearBookmarks" class="clearBookmarks" title="Clear Bookmarks">clear</a>
+ <ul wicket:id="bookmarkList" class="bookmarkedPagesList">
+ <li wicket:id="bookmarkedPageItem" class="bookmarkedPageItem">
+ <a href="#" wicket:id="bookmarkedPageLink">
+ <span class="bookmarkedPageImageAndTitle">
+ <img wicket:id="bookmarkedPageImage" class="bookmarkedPageImage"/>
+ <span wicket:id="bookmarkedPageTitle" class="bookmarkedPageTitle">[link title]</span>
+ </span>
+ </a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
</wicket:panel>
</body>
</html>
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/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 5eb7a69..558c310 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
@@ -24,6 +24,8 @@ import com.google.inject.Inject;
import org.apache.wicket.Page;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
@@ -31,6 +33,7 @@ import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
@@ -44,6 +47,7 @@ import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
import org.apache.isis.viewer.wicket.model.models.PageType;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
import org.apache.isis.viewer.wicket.ui.util.Links;
public class BookmarkedPagesPanel extends PanelAbstract<BookmarkedPagesModel> {
@@ -59,6 +63,8 @@ public class BookmarkedPagesPanel extends PanelAbstract<BookmarkedPagesModel> {
private static final String CLEAR_BOOKMARKS = "clearBookmarks";
+ private static final JavaScriptResourceReference SLIDE_PANEL_JS = new JavaScriptResourceReference(BookmarkedPagesPanel.class, "slide-panel.js");
+
@Inject
private PageClassRegistry pageClassRegistry;
@@ -69,7 +75,13 @@ public class BookmarkedPagesPanel extends PanelAbstract<BookmarkedPagesModel> {
private void buildGui() {
- final WebMarkupContainer container = new WebMarkupContainer(ID_BOOKMARK_LIST);
+ final WebMarkupContainer container = new WebMarkupContainer(ID_BOOKMARK_LIST) {
+ private static final long serialVersionUID = 1L;
+ @Override
+ public void renderHead(IHeaderResponse response) {
+ response.render(JavaScriptReferenceHeaderItem.forReference(SLIDE_PANEL_JS));
+ }
+ };
// allow to be updated by AjaxLink
container.setOutputMarkupId(true);
add(container);
@@ -106,9 +118,12 @@ public class BookmarkedPagesPanel extends PanelAbstract<BookmarkedPagesModel> {
link.addOrReplace(image);
String title = BookmarkedPagesModel.titleFrom(pageParameters);
- link.add(new Label(ID_BOOKMARKED_PAGE_TITLE, title));
-
+ final Label label = new Label(ID_BOOKMARKED_PAGE_TITLE, title);
+ link.add(label);
item.add(link);
+ if(bookmarkedPagesModel.isCurrent(pageParameters)) {
+ item.add(new CssClassAppender("currentBookmark"));
+ }
}
};
container.add(listView);
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/slide-panel.js
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/slide-panel.js b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/slide-panel.js
new file mode 100644
index 0000000..a8e4c9d
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/slide-panel.js
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+$(document).ready(function(){
+
+ $('.showPanelTab').mouseenter(
+ function(){
+ $('#panel').stop().animate(
+ {width:"400px", opacity:0.95}, 250,
+ function() {
+ $('.content').fadeIn('125');
+ }
+ );
+ $('.showPanelTab').animate({opacity: 0.5});
+ }
+ );
+
+ $('#panel').mouseleave(
+ function(){
+ $('.content').fadeOut('125',
+ function() {
+ $('#panel').stop().animate({width:"0", opacity:0.1}, 125);
+ }
+ );
+ $('.showPanelTab').animate({opacity: 1.0});
+ }
+ );
+});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
index aefdae1..843476e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
@@ -66,4 +66,5 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
model.detach();
}
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
index efd8544..5980c52 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
@@ -832,3 +832,4 @@ div#jGrowl div.jGrowl-closer {
.properties .property .isisBlobPanel .additionalLinkList {
padding-top: 0px;
}
+
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index 70aa076..06b6d1b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -23,9 +23,13 @@ import org.apache.wicket.authroles.authorization.strategies.role.annotations.Aut
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.core.metamodel.facets.object.bookmarkable.BookmarkPolicyFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.ui.ComponentType;
import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
@@ -49,7 +53,7 @@ public class EntityPage extends PageAbstract {
this.model = new EntityModel(pageParameters);
addChildComponents(model);
- bookmarkPage(model);
+ bookmarkIfBookmarkable(model);
addBookmarkedPages();
}
@@ -67,10 +71,19 @@ public class EntityPage extends PageAbstract {
model.setException(exIfAny);
addChildComponents(model);
- bookmarkPage(model);
+ bookmarkIfBookmarkable(model);
addBookmarkedPages();
}
+ protected void bookmarkIfBookmarkable(EntityModel model) {
+ final ObjectSpecId specId = model.getObjectAdapterMemento().getObjectSpecId();
+ final ObjectSpecification objectSpec = getSpecificationLoader().lookupBySpecId(specId);
+ final BookmarkPolicyFacet facet = objectSpec.getFacet(BookmarkPolicyFacet.class);
+ if(facet != null && facet.value() == BookmarkPolicy.ROOT) {
+ bookmarkPage(model);
+ }
+ }
+
/**
* A rather crude way of intercepting the redirect-and-post strategy.
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.css
index 16a4a82..84eb141 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.css
@@ -111,4 +111,8 @@ a span.ViewLinkItem.table {
.linksSelectorPanel .link-selector-panel-invisible {
display:none;
+}
+
+.linksSelectorPanel ul.additionalLinkList {
+ margin-bottom:10px;
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.html
index b61bc8d..58817f0 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.html
@@ -32,19 +32,7 @@
</ul>
</span>
<span wicket:id="additionalLinks"/>
- <!--
- <span xwicket:id="additionalLinks" class="additionalLinks">
- <ul xwicket:id="additionalLinkList" class="additionalLinkList">
- <li xwicket:id="additionalLinkItem" class="additionalLinkItem">
- <a href="#" xwicket:id="additionalLink">
- <span xwicket:id="additionalLinkTitle" class="additionalLinkItem">[link title]</span>
- </a>
- </li>
- </ul>
- </span>
- -->
-
- <br class="clear"/>
+ <span class="clear"/>
<div class="views">
<wicket:child/>
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
index c21a016..4c9d8ea 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
@@ -60,10 +60,7 @@ public abstract class LinksSelectorPanelAbstract<T extends IModel<?>> extends Pa
private static final int MAX_NUM_UNDERLYING_VIEWS = 10;
private static final String ID_ADDITIONAL_LINKS = "additionalLinks";
- private static final String ID_ADDITIONAL_LINK_LIST = "additionalLinkList";
public static final String ID_ADDITIONAL_LINK = "additionalLink";
- private static final String ID_ADDITIONAL_LINK_ITEM = "additionalLinkItem";
- private static final String ID_ADDITIONAL_LINK_TITLE = "additionalLinkTitle";
private static final String ID_VIEWS = "views";
private static final String ID_VIEW_LIST = "viewList";
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/applib/src/main/java/org/apache/isis/applib/annotation/BookmarkPolicy.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/BookmarkPolicy.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/BookmarkPolicy.java
new file mode 100644
index 0000000..2edd6cd
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/BookmarkPolicy.java
@@ -0,0 +1,16 @@
+package org.apache.isis.applib.annotation;
+
+public enum BookmarkPolicy {
+ /**
+ * Can be bookmarked, and is a top-level 'root' (or parent) bookmark.
+ */
+ ROOT,
+ /**
+ * Can be bookmarked, but only as a child or some other parent/root bookmark
+ */
+ AS_CHILD,
+ /**
+ * An unimportant entity that should never be bookmarked.
+ */
+ NEVER
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/applib/src/main/java/org/apache/isis/applib/annotation/Bookmarkable.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Bookmarkable.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Bookmarkable.java
new file mode 100644
index 0000000..6b6f6e0
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Bookmarkable.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.applib.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates the policy by which the entity can be bookmarked.
+ *
+ * <p>
+ * Three policies are defined, which control how bookmarked entities are organized.
+ *
+ */
+@Inherited
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Bookmarkable {
+
+ BookmarkPolicy value() default BookmarkPolicy.ROOT;
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacet.java
new file mode 100644
index 0000000..1ef3769
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacet.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.metamodel.facets.object.bookmarkable;
+
+
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.Bookmarkable;
+import org.apache.isis.core.metamodel.facets.SingleValueFacet;
+
+
+/**
+ * Corresponds to annotating the class with the {@link Bookmarkable} annotation.
+ */
+public interface BookmarkPolicyFacet extends SingleValueFacet<BookmarkPolicy> {
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetAbstract.java
new file mode 100644
index 0000000..58f74db
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetAbstract.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.metamodel.facets.object.bookmarkable;
+
+
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+
+public abstract class BookmarkPolicyFacetAbstract extends FacetAbstract implements
+ BookmarkPolicyFacet {
+
+
+ public static Class<? extends Facet> type() {
+ return BookmarkPolicyFacet.class;
+ }
+
+ private final BookmarkPolicy bookmarkPolicy;
+
+ public BookmarkPolicyFacetAbstract(FacetHolder facetHolder, BookmarkPolicy bookmarkPolicy) {
+ super(BookmarkPolicyFacetAbstract.type(), facetHolder, Derivation.NOT_DERIVED);
+ this.bookmarkPolicy = bookmarkPolicy;
+ }
+
+ @Override
+ public BookmarkPolicy value() {
+ return bookmarkPolicy;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetFallback.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetFallback.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetFallback.java
new file mode 100644
index 0000000..3a9dfaa
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetFallback.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.metamodel.facets.object.bookmarkable;
+
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+
+public class BookmarkPolicyFacetFallback extends BookmarkPolicyFacetAbstract {
+
+ public BookmarkPolicyFacetFallback(FacetHolder facetHolder) {
+ super(facetHolder, BookmarkPolicy.NEVER);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotation.java
new file mode 100644
index 0000000..aa65c6b
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotation.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.core.metamodel.facets.object.bookmarkable;
+
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+
+public class BookmarkPolicyFacetViaBookmarkableAnnotation extends BookmarkPolicyFacetAbstract {
+
+ public BookmarkPolicyFacetViaBookmarkableAnnotation(FacetHolder facetHolder, BookmarkPolicy bookmarkPolicy) {
+ super(facetHolder, bookmarkPolicy);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bookmarkable/annotation/BookmarkableAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bookmarkable/annotation/BookmarkableAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bookmarkable/annotation/BookmarkableAnnotationFacetFactory.java
new file mode 100644
index 0000000..71574d6
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/bookmarkable/annotation/BookmarkableAnnotationFacetFactory.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.progmodel.facets.object.bookmarkable.annotation;
+
+import org.apache.isis.applib.annotation.Bookmarkable;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.Annotations;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.object.bookmarkable.BookmarkPolicyFacet;
+import org.apache.isis.core.metamodel.facets.object.bookmarkable.BookmarkPolicyFacetFallback;
+import org.apache.isis.core.metamodel.facets.object.bookmarkable.BookmarkPolicyFacetViaBookmarkableAnnotation;
+
+public class BookmarkableAnnotationFacetFactory extends FacetFactoryAbstract {
+
+ public BookmarkableAnnotationFacetFactory() {
+ super(FeatureType.OBJECTS_ONLY);
+ }
+
+ @Override
+ public void process(final ProcessClassContext processClassContext) {
+ final Bookmarkable annotation = Annotations.getAnnotation(processClassContext.getCls(), Bookmarkable.class);
+ FacetUtil.addFacet(create(annotation, processClassContext.getFacetHolder()));
+ }
+
+ private BookmarkPolicyFacet create(final Bookmarkable annotation, final FacetHolder holder) {
+ return annotation == null ? new BookmarkPolicyFacetFallback(holder) : new BookmarkPolicyFacetViaBookmarkableAnnotation(holder, annotation.value());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
index b8ca514..dd690a6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
@@ -128,7 +128,7 @@ public class TitleFacetViaTitleAnnotation extends TitleFacetAbstract {
final ObjectAdapter titlePartAdapter = adapterManager.adapterFor(titlePart);
if(Objects.equal(contextAdapter, titlePartAdapter)) {
continue;
- }
+ }
String title = titleOf(titlePartAdapter);
if (Strings.isNullOrEmpty(title)) {
// ... use the toString() otherwise
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index cf39798..86507dd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -64,6 +64,7 @@ import org.apache.isis.core.progmodel.facets.members.order.MemberOrderAnnotation
import org.apache.isis.core.progmodel.facets.members.resolve.RenderOrResolveAnnotationFacetFactory;
import org.apache.isis.core.progmodel.facets.object.aggregated.annotation.AggregatedAnnotationFacetFactory;
import org.apache.isis.core.progmodel.facets.object.autocomplete.annotation.AutoCompleteAnnotationFacetFactory;
+import org.apache.isis.core.progmodel.facets.object.bookmarkable.annotation.BookmarkableAnnotationFacetFactory;
import org.apache.isis.core.progmodel.facets.object.bounded.annotation.BoundedAnnotationFacetFactory;
import org.apache.isis.core.progmodel.facets.object.bounded.markerifc.BoundedMarkerInterfaceFacetFactory;
import org.apache.isis.core.progmodel.facets.object.callbacks.create.CreatedCallbackFacetFactory;
@@ -303,6 +304,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
addFactory(MemberGroupsAnnotationElseFallbackFacetFactory.class);
addFactory(AggregatedAnnotationFacetFactory.class);
+ addFactory(BookmarkableAnnotationFacetFactory.class);
addFactory(BoundedAnnotationFacetFactory.class);
addFactory(BoundedMarkerInterfaceFacetFactory.class);
addFactory(DebugAnnotationFacetFactory.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/aggregated/AggregatedAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/aggregated/AggregatedAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/aggregated/AggregatedAnnotationFacetFactoryTest.java
index 2b261d9..d6df8c2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/aggregated/AggregatedAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/aggregated/AggregatedAnnotationFacetFactoryTest.java
@@ -44,7 +44,7 @@ public class AggregatedAnnotationFacetFactoryTest extends AbstractFacetFactoryTe
super.tearDown();
}
- public void testImmutableAnnotationPickedUpOnClassAndDefaultsToAlways() {
+ public void testAggregatedAnnotationPickedUpOnClass() {
@Aggregated
class Customer {
}
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bookmarkable/BookmarkableAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bookmarkable/BookmarkableAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bookmarkable/BookmarkableAnnotationFacetFactoryTest.java
new file mode 100644
index 0000000..ce57411
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/object/bookmarkable/BookmarkableAnnotationFacetFactoryTest.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.progmodel.facets.object.bookmarkable;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.Bookmarkable;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
+import org.apache.isis.core.metamodel.facets.object.bookmarkable.BookmarkPolicyFacet;
+import org.apache.isis.core.metamodel.facets.object.bookmarkable.BookmarkPolicyFacetFallback;
+import org.apache.isis.core.metamodel.facets.object.bookmarkable.BookmarkPolicyFacetViaBookmarkableAnnotation;
+import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.progmodel.facets.object.bookmarkable.annotation.BookmarkableAnnotationFacetFactory;
+
+public class BookmarkableAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
+
+ private BookmarkableAnnotationFacetFactory facetFactory;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ facetFactory = new BookmarkableAnnotationFacetFactory();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ facetFactory = null;
+ super.tearDown();
+ }
+
+ public void testBookmarkableAnnotationPickedUpOnClass() {
+ @Bookmarkable(BookmarkPolicy.AS_CHILD)
+ class Customer {
+ }
+
+ facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(BookmarkPolicyFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof BookmarkPolicyFacetViaBookmarkableAnnotation);
+ BookmarkPolicyFacet bookmarkableFacet = (BookmarkPolicyFacet) facet;
+ assertThat(bookmarkableFacet.value(), is(BookmarkPolicy.AS_CHILD));
+
+ assertNoMethodsRemoved();
+ }
+
+ public void testBookmarkablePolicyInferredPickedUpOnClassAndDefaultsToAlways() {
+ class Customer {
+ }
+
+ facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(BookmarkPolicyFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof BookmarkPolicyFacetFallback);
+ BookmarkPolicyFacet bookmarkableFacet = (BookmarkPolicyFacet) facet;
+ assertThat(bookmarkableFacet.value(), is(BookmarkPolicy.NEVER));
+
+ assertNoMethodsRemoved();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/7c6cce87/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties
index a623430..8d35c45 100644
--- a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties
@@ -137,6 +137,20 @@ isis.user-profile-store=in-memory
#################################################################################
#
+# Value facet defaults
+#
+# (see also viewer-specific config files, eg viewer_wicket.properties)
+#
+#################################################################################
+
+# as used by @Title of a date
+isis.value.format.date=dd-MM-yyyy
+
+
+
+
+#################################################################################
+#
# Application Services and fixtures
#
#################################################################################