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 09:49:33 UTC

git commit: ISIS-403: further improvements on bookmark; also fix to fieldset styling

Updated Branches:
  refs/heads/master 7c6cce876 -> a742f389c


ISIS-403: further improvements on bookmark; also fix to fieldset styling

* working towards hierarchical bookmarks
* fieldsets now distinguished separately


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

Branch: refs/heads/master
Commit: a742f389c7d9b4279665089a9b3f3134f00fd162
Parents: 7c6cce8
Author: Dan Haywood <da...@apache.org>
Authored: Fri May 10 09:48:45 2013 +0200
Committer: Dan Haywood <da...@apache.org>
Committed: Fri May 10 09:48:45 2013 +0200

----------------------------------------------------------------------
 .../viewer/wicket/model/models/ActionModel.java    |  104 +++++++++------
 .../wicket/model/models/BookmarkTreeNode.java      |   38 ++++++
 .../wicket/model/models/BookmarkableModel.java     |    2 +
 .../wicket/model/models/BookmarkedPagesModel.java  |   47 ++++---
 .../viewer/wicket/model/models/EntityModel.java    |   19 ++-
 .../bookmarkedpages/BookmarkedPagesPanel.java      |   39 +++++-
 .../ui/components/bookmarkedpages/slide-panel.js   |   38 +++---
 .../entity/properties/EntityPropertiesPanel.css    |    5 +-
 .../entity/properties/EntityPropertiesPanel.html   |    4 +-
 .../viewer/wicket/ui/pages/entity/EntityPage.java  |   12 +--
 10 files changed, 207 insertions(+), 101 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/a742f389/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 eba7d23..5f5cffc 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
@@ -94,6 +94,11 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         SELECT
     }
 
+    
+    //////////////////////////////////////////////////
+    // Factory methods
+    //////////////////////////////////////////////////
+
     public static ActionModel create(final ObjectAdapterMemento targetAdapter, final ActionMemento action, final Mode mode, final SingleResultsMode singleResultsMode) {
         return new ActionModel(targetAdapter, action, mode, singleResultsMode);
     }
@@ -147,6 +152,53 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         return pageParameters;
     }
 
+
+    public static Entry<Integer, String> parse(final String paramContext) {
+        final Pattern compile = Pattern.compile("([^=]+)=(.+)");
+        final Matcher matcher = compile.matcher(paramContext);
+        if (!matcher.matches()) {
+            return null;
+        }
+
+        final int paramNum;
+        try {
+            paramNum = Integer.parseInt(matcher.group(1));
+        } catch (final Exception e) {
+            // ignore
+            return null;
+        }
+
+        final String oidStr;
+        try {
+            oidStr = matcher.group(2);
+        } catch (final Exception e) {
+            return null;
+        }
+
+        return new Map.Entry<Integer, String>() {
+
+            @Override
+            public Integer getKey() {
+                return paramNum;
+            }
+
+            @Override
+            public String getValue() {
+                return oidStr;
+            }
+
+            @Override
+            public String setValue(final String value) {
+                return null;
+            }
+        };
+    }
+
+    //////////////////////////////////////////////////
+    // BookmarkableModel
+    //////////////////////////////////////////////////
+
+
     public PageParameters asPageParameters() {
         final ObjectAdapter adapter = getTargetAdapter();
         final ObjectAction objectAction = getActionMemento().getAction();
@@ -169,6 +221,17 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
 
         return pageParameters;
     }
+
+
+    @Override
+    public boolean hasRootPolicy() {
+        return true;
+    }
+
+    //////////////////////////////////////////////////
+    // helpers
+    //////////////////////////////////////////////////
+
     
     private static String titleOf(ObjectAdapter argumentAdapter) {
         return argumentAdapter!=null?argumentAdapter.titleString():"";
@@ -356,46 +419,6 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         argumentModel.setObject(argumentAdapter);
     }
 
-    public static Entry<Integer, String> parse(final String paramContext) {
-        final Pattern compile = Pattern.compile("([^=]+)=(.+)");
-        final Matcher matcher = compile.matcher(paramContext);
-        if (!matcher.matches()) {
-            return null;
-        }
-
-        final int paramNum;
-        try {
-            paramNum = Integer.parseInt(matcher.group(1));
-        } catch (final Exception e) {
-            // ignore
-            return null;
-        }
-
-        final String oidStr;
-        try {
-            oidStr = matcher.group(2);
-        } catch (final Exception e) {
-            return null;
-        }
-
-        return new Map.Entry<Integer, String>() {
-
-            @Override
-            public Integer getKey() {
-                return paramNum;
-            }
-
-            @Override
-            public String getValue() {
-                return oidStr;
-            }
-
-            @Override
-            public String setValue(final String value) {
-                return null;
-            }
-        };
-    }
 
     public ScalarModel getArgumentModel(final ActionParameterMemento apm) {
         ScalarModel scalarModel = arguments.get(apm.getNumber());
@@ -524,6 +547,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
     public boolean hasSafeActionSemantics() {
         return getActionMemento().getAction().getSemantics() == ActionSemantics.Of.SAFE;
     }
+
     
     
     //////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/a742f389/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
new file mode 100644
index 0000000..16982cd
--- /dev/null
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
@@ -0,0 +1,38 @@
+package org.apache.isis.viewer.wicket.model.models;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+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.pageParameters;
+            }
+        };
+        final PageParameters pageParameters;
+        private final List<PageParameters> children = Lists.newArrayList();
+        
+        public BookmarkTreeNode(BookmarkableModel<?> node) {
+            this.pageParameters = node.asPageParameters();
+        }
+        public PageParameters getPageParameters() {
+            return pageParameters;
+        }
+        public List<PageParameters> getChildren() {
+            return children;
+        }
+        public BookmarkTreeNode addChild(BookmarkableModel<?> childModel) {
+            return null;
+        }
+//        public TreeNode exists(BookmarkableModel<?> candidateModel) {
+//            
+//        }
+    }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a742f389/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
index cb8a9be..72c5913 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
@@ -37,5 +37,7 @@ public abstract class BookmarkableModel<T> extends ModelAbstract<T>  {
      * So can be bookmarked / added to <tt>BookmarkedPagesModel</tt>.
      */
     public abstract PageParameters asPageParameters();
+
+    public abstract boolean hasRootPolicy();
     
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a742f389/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 d755c34..be2b64f 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,10 @@ import com.google.common.collect.Lists;
 
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
+import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+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.core.metamodel.spec.SpecificationLoader;
@@ -39,14 +41,20 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 
 
-public class BookmarkedPagesModel extends ModelAbstract<List<PageParameters>> implements Iterable<PageParameters>{
+public class BookmarkedPagesModel extends ModelAbstract<List<? extends BookmarkTreeNode>> implements Iterable<PageParameters>{
 
     private static final long serialVersionUID = 1L;
     
-    private List<PageParameters> list = Lists.newArrayList();
+    private List<BookmarkTreeNode> rootNodes = Lists.newArrayList();
     private transient PageParameters current;
     
     public void bookmarkPage(final BookmarkableModel<?> bookmarkableModel) {
+        if(bookmarkableModel.hasRootPolicy()) {
+            bookmarkRoot(bookmarkableModel);
+        }
+    }
+
+    protected void bookmarkRoot(final BookmarkableModel<?> bookmarkableModel) {
         final PageParameters candidatePP = bookmarkableModel.asPageParameters();
         
         // ignore if doesn't provide a page type for subsequent disambiguation
@@ -61,15 +69,16 @@ public class BookmarkedPagesModel extends ModelAbstract<List<PageParameters>> im
             return;
         }
         
-        // look to see if exists already; if found then then update title if need be.
-        // the convoluted logic here is because we remove the temporarily remove the title
+        // look to see if exists already; if found then update title if need be.
+        // the convoluted logic here is because we temporarily remove the title
         // in order to do the check.
         final String pageTitleKey = PageParameterNames.PAGE_TITLE.toString();
         try {
             // temporarily remove to do comparison
             candidatePP.remove(pageTitleKey);
             
-            for (PageParameters eachPP : list) {
+            for (BookmarkTreeNode eachNode : rootNodes) {
+                PageParameters eachPP = eachNode.pageParameters;
                 String pageTitle = PageParameterNames.PAGE_TITLE.getStringFrom(eachPP);
                 try {
                     eachPP.remove(pageTitleKey);
@@ -87,13 +96,13 @@ public class BookmarkedPagesModel extends ModelAbstract<List<PageParameters>> im
         }
         
         // if get here, then didn't find.
-        list.add(candidatePP);
-        Collections.sort(list, new Comparator<PageParameters>() {
+        rootNodes.add(new BookmarkTreeNode(bookmarkableModel));
+        Collections.sort(rootNodes, new Comparator<BookmarkTreeNode>() {
 
             @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);
+            public int compare(BookmarkTreeNode o1, BookmarkTreeNode o2) {
+                PageType pageType1 = PageParameterNames.PAGE_TYPE.getEnumFrom(o1.pageParameters, PageType.class);
+                PageType pageType2 = PageParameterNames.PAGE_TYPE.getEnumFrom(o2.pageParameters, PageType.class);
                 
                 final int pageTypeComparison = pageType1.compareTo(pageType2);
                 if(pageTypeComparison != 0) {
@@ -102,16 +111,16 @@ public class BookmarkedPagesModel extends ModelAbstract<List<PageParameters>> im
                 
                 if(pageType1 == PageType.ENTITY) {
                     // sort by entity type
-                    final String className1 = classNameOf(o1);
-                    final String className2 = classNameOf(o2);
+                    final String className1 = classNameOf(o1.pageParameters);
+                    final String className2 = classNameOf(o2.pageParameters);
                     
                     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);
+                String title1 = PageParameterNames.PAGE_TITLE.getStringFrom(o1.pageParameters);
+                String title2 = PageParameterNames.PAGE_TITLE.getStringFrom(o2.pageParameters);
                 return title1.compareTo(title2);
             }
 
@@ -128,13 +137,13 @@ public class BookmarkedPagesModel extends ModelAbstract<List<PageParameters>> im
 
     
     @Override
-    protected List<PageParameters> load() {
-        return list;
+    protected List<BookmarkTreeNode> load() {
+        return rootNodes;
     }
 
     @Override
     public Iterator<PageParameters> iterator() {
-        return Iterators.unmodifiableIterator(list.iterator());
+        return Iterators.unmodifiableIterator(Iterators.transform(rootNodes.iterator(), BookmarkTreeNode.AS_PAGE_PARAMETERS));
     }
     
     public boolean isCurrent(PageParameters pageParameters) {
@@ -154,11 +163,11 @@ public class BookmarkedPagesModel extends ModelAbstract<List<PageParameters>> im
     }
 
     public void clear() {
-        list.clear();
+        rootNodes.clear();
     }
 
     public boolean isEmpty() {
-        return list.isEmpty();
+        return rootNodes.isEmpty();
     }
 
     

http://git-wip-us.apache.org/repos/asf/isis/blob/a742f389/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index e79a6dd..d417b58 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -27,12 +27,14 @@ import com.google.common.collect.Maps;
 import org.apache.wicket.model.Model;
 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.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.consent.Consent;
+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.core.metamodel.spec.SpecificationLoaderSpi;
@@ -168,18 +170,27 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
     private static RootOid rootOidFrom(final PageParameters pageParameters) {
         return getOidMarshaller().unmarshal(oidStr(pageParameters), RootOid.class);
     }
-    
 
 
-    // //////////////////////////////////////////////////////////
-    // asPageParameters
-    // //////////////////////////////////////////////////////////
+    //////////////////////////////////////////////////
+    // BookmarkableModel
+    //////////////////////////////////////////////////
 
     @Override
     public PageParameters asPageParameters() {
         return createPageParameters(getObject());
     }
 
+
+    public boolean hasRootPolicy() {
+        final ObjectSpecId specId = getObjectAdapterMemento().getObjectSpecId();
+        final ObjectSpecification objectSpec = getSpecificationLoader().lookupBySpecId(specId);
+        final BookmarkPolicyFacet facet = objectSpec.getFacet(BookmarkPolicyFacet.class);
+        return facet != null && facet.value() == BookmarkPolicy.ROOT;
+    }
+
+
+
     // //////////////////////////////////////////////////////////
     // ObjectAdapterMemento, typeOfSpecification
     // //////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/a742f389/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 558c310..c998bba 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
@@ -19,7 +19,11 @@
 
 package org.apache.isis.viewer.wicket.ui.components.bookmarkedpages;
 
+import java.util.List;
+
 import com.google.inject.Inject;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.interaction.resizable.ResizableBehavior;
 
 import org.apache.wicket.Page;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -32,6 +36,7 @@ import org.apache.wicket.markup.html.image.Image;
 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.model.IModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
@@ -45,6 +50,7 @@ import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
 import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
 import org.apache.isis.viewer.wicket.model.models.PageType;
+import org.apache.isis.viewer.wicket.model.models.BookmarkTreeNode;
 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;
@@ -71,6 +77,32 @@ public class BookmarkedPagesPanel extends PanelAbstract<BookmarkedPagesModel> {
     public BookmarkedPagesPanel(final String id, final BookmarkedPagesModel bookmarkedPagesModel) {
         super(id, bookmarkedPagesModel);
         buildGui();
+        
+//        Options options = new Options();
+//        
+//        add(new ResizableBehavior("#panel") {
+//            private static final long serialVersionUID = 1L;
+//
+//            @Override
+//            public void onResizeStop(AjaxRequestTarget target, int top, int left, int width, int height) {
+//                return;
+//            }
+//            
+//            @Override
+//            public void onResizeStart(AjaxRequestTarget target, int top, int left, int width, int height) {
+//                return;
+//            }
+//            
+//            @Override
+//            public boolean isResizeStopEventEnabled() {
+//                return false;
+//            }
+//            
+//            @Override
+//            public boolean isResizeStartEventEnabled() {
+//                return false;
+//            }
+//        });
     }
 
     private void buildGui() {
@@ -88,13 +120,14 @@ public class BookmarkedPagesPanel extends PanelAbstract<BookmarkedPagesModel> {
 
         final BookmarkedPagesModel bookmarkedPagesModel = getModel();
 
-        final ListView<PageParameters> listView = new ListView<PageParameters>(ID_BOOKMARKED_PAGE_ITEM, bookmarkedPagesModel) {
+        final ListView<BookmarkTreeNode> listView = new ListView<BookmarkTreeNode>(ID_BOOKMARKED_PAGE_ITEM, bookmarkedPagesModel) {
 
             private static final long serialVersionUID = 1L;
 
             @Override
-            protected void populateItem(ListItem<PageParameters> item) {
-                final PageParameters pageParameters = item.getModelObject();
+            protected void populateItem(ListItem<BookmarkTreeNode> item) {
+                final BookmarkTreeNode rootNode = item.getModelObject();
+                final PageParameters pageParameters = rootNode.getPageParameters();
                 
                 final PageType pageType = PageParameterNames.PAGE_TYPE.getEnumFrom(pageParameters, PageType.class);
                 final Class<? extends Page> pageClass = pageClassRegistry.getPageClass(pageType);

http://git-wip-us.apache.org/repos/asf/isis/blob/a742f389/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
index a8e4c9d..4d8d601 100644
--- 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
@@ -18,26 +18,22 @@
  */
 $(document).ready(function(){
  
-   $('.showPanelTab').mouseenter(
-           function(){
-              $('#panel').stop().animate(
-                      {width:"400px", opacity:0.95}, 250, 
-                      function() {
-                          $('.content').fadeIn('125');
-                      }
-                  );
-              $('.showPanelTab').animate({opacity: 0.5});
-           }
-       );
+    var showBookmarks = function(){
+        $('#panel').stop().animate(
+            {width:"400px", opacity:0.95}, 250, 
+            function() {
+                $('.content').fadeIn('125');
+            });
+        $('.showPanelTab').animate({opacity: 0.5});
+    };
+    var hideBookmarks = function(){
+        $('.content').fadeOut('125', 
+            function() { 
+                $('#panel').stop().animate({width:"0", opacity:0.1}, 125);
+            });
+         $('.showPanelTab').animate({opacity: 1.0});
+     };
 
-   $('#panel').mouseleave(
-            function(){
-                $('.content').fadeOut('125', 
-                        function() { 
-                            $('#panel').stop().animate({width:"0", opacity:0.1}, 125);
-                        }
-                    );
-                $('.showPanelTab').animate({opacity: 1.0});
-            }
-        );
+    $('.showPanelTab').mouseenter(showBookmarks);
+    $('#panel').mouseleave(hideBookmarks);
 });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a742f389/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.css
index 9c99d3c..4fa4ed8 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.css
@@ -17,8 +17,9 @@
  *  under the License.
  */
 .entityPropertiesPanel fieldset {
-	margin:0px;
-	padding:0px;
+	margin: 0px 0px 10px 0px;
+	padding:20px;
+	border-radius: 4px;
 }
 
 .entityPropertiesPanel fieldset legend {

http://git-wip-us.apache.org/repos/asf/isis/blob/a742f389/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
index 00494eb..0c4d8ee 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
@@ -20,10 +20,10 @@
 <html>
 	<body>
 		<wicket:panel>
-			<div class="entityPropertiesPanel entityPropertiesComponentType myBlockContainer">
+			<div class="entityPropertiesPanel entityPropertiesComponentType">
 			    <form wicket:id="entityProperties" class="inputForm">
 			    	<div class="inputFormTable properties">
-		    	    	<fieldset wicket:id="memberGroup" class="memberGroup">
+		    	    	<fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer">
 		    	    		<legend wicket:id="memberGroupName">[group name]</legend>
 					    	<div wicket:id="properties">
 				              <div wicket:id="property" class="property">[property]</div>

http://git-wip-us.apache.org/repos/asf/isis/blob/a742f389/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 06b6d1b..c9b5bed 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
@@ -53,7 +53,7 @@ public class EntityPage extends PageAbstract {
         this.model = new EntityModel(pageParameters);
         addChildComponents(model);
         
-        bookmarkIfBookmarkable(model);
+        bookmarkPage(model);
         addBookmarkedPages();
     }
 
@@ -71,18 +71,10 @@ public class EntityPage extends PageAbstract {
         model.setException(exIfAny);
         addChildComponents(model);
         
-        bookmarkIfBookmarkable(model);
+        bookmarkPage(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);
-        }
-    }
 
 
     /**