ISIS-1332: now factored out HintStore

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

Branch: refs/heads/master
Commit: 069e563a6858738978e39c3ff2adb5d33ffa9110
Parents: 52128cf
Author: Dan Haywood <d...@haywood-associates.co.uk>
Authored: Sat Mar 19 11:54:13 2016 +0000
Committer: Dan Haywood <d...@haywood-associates.co.uk>
Committed: Sat Mar 19 11:54:13 2016 +0000

----------------------------------------------------------------------
 .../isis/applib/services/hint/HintStore.java    | 32 ++++++++
 .../services/HintStoreUsingWicketSession.java   | 79 ++++++++++++++++++++
 .../model/mementos/ObjectAdapterMemento.java    | 15 +++-
 .../viewer/wicket/model/models/EntityModel.java | 48 ++++++------
 .../wicket/model/util/ComponentHintKey.java     | 59 +++++++++------
 .../isis/viewer/wicket/model/util/Store.java    | 30 --------
 .../wicket/model/util/StoreUsingSession.java    | 69 -----------------
 .../selector/CollectionSelectorHelper.java      | 21 ++++--
 .../selector/CollectionSelectorPanel.java       | 19 +++--
 .../layout/bs3/tabs/TabGroupPanel.java          |  6 +-
 10 files changed, 220 insertions(+), 158 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/069e563a/core/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
----------------------------------------------------------------------
diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java 
b/core/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
new file mode 100644
index 0000000..ad2a784
--- /dev/null
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.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.applib.services.hint;
+
+import java.io.Serializable;
+
+import org.apache.isis.applib.services.bookmark.Bookmark;
+
+public interface HintStore extends Serializable {
+
+    Serializable get(final Bookmark bookmark, String name);
+
+    void remove(final Bookmark bookmark, String name);
+
+    void set(final Bookmark bookmark, String name, Serializable value);
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/069e563a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/HintStoreUsingWicketSession.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/HintStoreUsingWicketSession.java
 
b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/HintStoreUsingWicketSession.java
new file mode 100644
index 0000000..5c1c969
--- /dev/null
+++ 
b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/services/HintStoreUsingWicketSession.java
@@ -0,0 +1,79 @@
+/*
+ *  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.viewer.wicket.viewer.services;
+
+import java.io.Serializable;
+
+import org.apache.wicket.Session;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.hint.HintStore;
+
+@DomainService(nature = NatureOfService.DOMAIN)
+public class HintStoreUsingWicketSession implements HintStore {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final Logger LOG = 
LoggerFactory.getLogger(HintStoreUsingWicketSession.class);
+
+    @Override
+    public Serializable get(final Bookmark bookmark, final String key) {
+        final String hintKey = getOidAndKey(bookmark, key);
+        final Serializable value = Session.get().getAttribute(hintKey);
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug(String.format("GET %s returns %s", hintKey, value));
+        }
+
+        return value;
+    }
+
+    @Override
+    public void set(final Bookmark bookmark, final String key, final 
Serializable value) {
+        final String hintKey = getOidAndKey(bookmark, key);
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug(String.format("SET %s to %s", hintKey, value));
+        }
+
+        Session.get().setAttribute(hintKey, value);
+
+    }
+
+    @Override
+    public void remove(final Bookmark bookmark, final String key) {
+        final String hintKey = getOidAndKey(bookmark, key);
+
+        if(LOG.isDebugEnabled()) {
+            LOG.debug(String.format("REMOVE %s", hintKey));
+        }
+
+        Session.get().removeAttribute(hintKey);
+    }
+
+    private String getOidAndKey(final Bookmark bookmark, final String key) {
+
+        return bookmark.toString() + ":" + key;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/069e563a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
 
b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
index 46562fb..ab8d0a3 100644
--- 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
+++ 
b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
@@ -24,6 +24,7 @@ import java.util.List;
 
 import com.google.common.base.Function;
 
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.commons.ensure.Ensure;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
@@ -64,7 +65,9 @@ public class ObjectAdapterMemento implements Serializable {
         return new ObjectAdapterMemento(rootOid);
     }
 
-
+    public Bookmark asBookmark() {
+        return bookmark;
+    }
 
     enum Type {
         /**
@@ -215,6 +218,14 @@ public class ObjectAdapterMemento implements Serializable {
     private String persistentOidStr;
 
     /**
+     * The current value, if {@link Type#PERSISTENT}.
+     *
+     * <p>
+     * Will be <tt>null</tt> otherwise.
+     */
+    private Bookmark bookmark;
+
+    /**
      * The current value, if {@link Type#TRANSIENT}.
      * 
      * <p>
@@ -225,6 +236,7 @@ public class ObjectAdapterMemento implements Serializable {
     private ObjectAdapterMemento(final RootOid rootOid) {
         Ensure.ensureThatArg(rootOid, Oid.Matchers.isPersistent());
         this.persistentOidStr = rootOid.enString(getOidMarshaller());
+        this.bookmark = rootOid.asBookmark();
         this.objectSpecId = rootOid.getObjectSpecId();
         this.type = Type.PERSISTENT;
     }
@@ -258,6 +270,7 @@ public class ObjectAdapterMemento implements Serializable {
         } 
         
         persistentOidStr = oid.enString(getOidMarshaller());
+        bookmark = oid.asBookmark();
         type = Type.PERSISTENT;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/069e563a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
 
b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 1e429c9..6b7b993 100644
--- 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ 
b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -32,6 +32,8 @@ 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.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.hint.HintStore;
 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;
@@ -49,8 +51,6 @@ import 
org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
 import org.apache.isis.viewer.wicket.model.util.ComponentHintKey;
-import org.apache.isis.viewer.wicket.model.util.Store;
-import org.apache.isis.viewer.wicket.model.util.StoreUsingSession;
 
 /**
  * Backing model to represent a {@link ObjectAdapter}.
@@ -173,7 +173,7 @@ public class EntityModel extends 
BookmarkableModel<ObjectAdapter> implements UiH
         this.adapterMemento = adapterMemento;
         this.pendingModel = new PendingModel(this);
         this.propertyScalarModels = propertyScalarModels;
-        this.hintPageParameterSerializer = new 
HintPageParameterSerializerDirect(this);
+        this.hintPageParameterSerializer = new 
HintPageParameterSerializer(this);
     }
 
     public static String oidStr(final PageParameters pageParameters) {
@@ -201,49 +201,47 @@ public class EntityModel extends 
BookmarkableModel<ObjectAdapter> implements UiH
         return createPageParameters(getObject());
     }
 
-    static interface HintPageParameterSerializer {
-        public void hintsToPageParameters(PageParameters pageParameters, final 
List<ComponentHintKey> componentHintKeys);
-        public List<ComponentHintKey> pageParametersToHints(final 
PageParameters pageParameters);
-    }
-    
-    static class HintPageParameterSerializerDirect implements 
HintPageParameterSerializer, Serializable {
+    static class HintPageParameterSerializer implements Serializable {
 
         private static final long serialVersionUID = 1L;
         private static final String PREFIX = "hint-";
 
         private final EntityModel entityModel;
 
-        public HintPageParameterSerializerDirect(final EntityModel 
entityModel) {
+        public HintPageParameterSerializer(final EntityModel entityModel) {
             this.entityModel = entityModel;
         }
 
         public void hintsToPageParameters(
                 final PageParameters pageParameters, final 
List<ComponentHintKey> componentHintKeys) {
             for (ComponentHintKey componentHintKey : componentHintKeys) {
-                componentHintKey.hintTo(pageParameters, PREFIX);
+                final Bookmark bookmark= 
entityModel.getObjectAdapterMemento().asBookmark();
+                componentHintKey.hintTo(bookmark, pageParameters, PREFIX);
             }
         }
 
-        @Override
-        public List<ComponentHintKey> pageParametersToHints(
-                final PageParameters pageParameters) {
+        public List<ComponentHintKey> pageParametersToHints(final 
PageParameters pageParameters) {
+            final HintStore hintStore = getHintStore();
             Set<String> namedKeys = pageParameters.getNamedKeys();
             List<ComponentHintKey> newComponentHintKeys = Lists.newArrayList();
             for (String namedKey : namedKeys) {
                 if(namedKey.startsWith(PREFIX)) {
                     String value = pageParameters.get(namedKey).toString(null);
                     String key = namedKey.substring(5);
-                    final ComponentHintKey<Serializable> componentHintKey = 
ComponentHintKey.create(key, entityModel.getHintStore());
+                    final ComponentHintKey<Serializable> componentHintKey = 
ComponentHintKey.create(key,
+                            hintStore);
                     newComponentHintKeys.add(componentHintKey);
-                    componentHintKey.set(value);
+                    final Bookmark bookmark = 
entityModel.getObjectAdapterMemento().asBookmark();
+                    componentHintKey.set(bookmark, value);
                 }
             }
             return newComponentHintKeys;
         }
-    }
 
-    private Store getHintStore() {
-        return new StoreUsingSession(this);
+        protected HintStore getHintStore() {
+            return 
IsisContext.getPersistenceSession().getServicesInjector().lookupService(HintStore.class);
+        }
+
     }
 
     // //////////////////////////////////////////////////////////
@@ -275,9 +273,9 @@ public class EntityModel extends 
BookmarkableModel<ObjectAdapter> implements UiH
 
     @Override
     public String getHint(final Component component, final String keyName) {
-        final ComponentHintKey<String> sessionAttribute = 
componentKeyFor(component, keyName);
-        if(sessionAttribute != null) {
-            return sessionAttribute.get();
+        final ComponentHintKey<String> componentHintKey = 
componentKeyFor(component, keyName);
+        if(componentHintKey != null) {
+            return 
componentHintKey.get(getObjectAdapterMemento().asBookmark());
         }
         return null;
     }
@@ -285,7 +283,7 @@ public class EntityModel extends 
BookmarkableModel<ObjectAdapter> implements UiH
     @Override
     public void setHint(Component component, String keyName, String hintValue) 
{
         ComponentHintKey componentHintKey = componentKeyFor(component, 
keyName);
-        componentHintKey.set(hintValue);
+        componentHintKey.set(this.getObjectAdapterMemento().asBookmark(), 
hintValue);
     }
 
     @Override
@@ -654,7 +652,9 @@ public class EntityModel extends 
BookmarkableModel<ObjectAdapter> implements UiH
         return IsisContext.getSpecificationLoader();
     }
 
-
+    protected HintStore getHintStore() {
+        return 
IsisContext.getPersistenceSession().getServicesInjector().lookupService(HintStore.class);
+    }
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/069e563a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/ComponentHintKey.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/ComponentHintKey.java
 
b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/ComponentHintKey.java
index 2c4c970..7db5f09 100644
--- 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/ComponentHintKey.java
+++ 
b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/ComponentHintKey.java
@@ -23,6 +23,8 @@ import java.io.Serializable;
 import org.apache.wicket.Component;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.hint.HintStore;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 
 /**
@@ -35,30 +37,30 @@ public class ComponentHintKey<T extends Serializable> 
implements Serializable {
     public static <T extends Serializable> ComponentHintKey<T> create(
             final Component path,
             final String key,
-            final Store store) {
-        return new ComponentHintKey<T>(path, key, null, store);
+            final HintStore hintStore) {
+        return new ComponentHintKey<T>(path, key, null, hintStore);
     }
 
     public static <T extends Serializable> ComponentHintKey<T> create(
             final String fullKey,
-            final Store store) {
-        return new ComponentHintKey<T>(null, null, fullKey, store);
+            final HintStore hintStore) {
+        return new ComponentHintKey<T>(null, null, fullKey, hintStore);
     }
 
     private final Component component;
     private final String keyName;
     private final String fullKey;
-    private final Store store;
+    private final HintStore hintStore;
 
     private ComponentHintKey(
             final Component component,
             final String keyName,
             final String fullKey,
-            final Store store) {
+            final HintStore hintStore) {
         this.component = component;
         this.keyName = keyName;
         this.fullKey = fullKey;
-        this.store = store;
+        this.hintStore = hintStore;
     }
 
     public String getKey() {
@@ -81,29 +83,41 @@ public class ComponentHintKey<T extends Serializable> 
implements Serializable {
         return keyOfProvided.equals(key);
     }
 
-    public void set(T t) {
+    public void set(final Bookmark bookmark, T t) {
+        if(bookmark == null) {
+            return;
+        }
         if(t != null) {
-            getStore().set(getKey(), t);
+            getHintStore().set(bookmark, getKey(), t);
         } else {
-            remove();
+            remove(bookmark);
         }
     }
 
-    public T get() {
-        return (T) getStore().get(getKey());
+    public T get(final Bookmark bookmark) {
+        if(bookmark == null) {
+            return null;
+        }
+        return (T) getHintStore().get(bookmark, getKey());
     }
 
-    protected Store getStore() {
-        return store;
+    protected HintStore getHintStore() {
+        return hintStore;
     }
 
-    public void remove() {
+    public void remove(final Bookmark bookmark) {
+        if(bookmark == null) {
+            return;
+        }
         final String key = getKey();
-        getStore().remove(key);
+        getHintStore().remove(bookmark, key);
     }
 
-    public void hintTo(final PageParameters pageParameters, final String 
prefix) {
-        String value = (String) get();
+    public void hintTo(
+            final Bookmark bookmark,
+            final PageParameters pageParameters,
+            final String prefix) {
+        String value = (String) get(bookmark);
         final String prefixedKey = prefix + getKey();
         if(value == null) {
             return;
@@ -120,18 +134,21 @@ public class ComponentHintKey<T extends Serializable> 
implements Serializable {
             }
 
             @Override
-            public void set(final T serializable) {
+            public void set(final Bookmark bookmark, final T serializable) {
             }
 
             @Override
-            public T get() {
+            public T get(final Bookmark bookmark) {
                 return null;
             }
 
             @Override
-            public void remove() {
+            public void remove(final Bookmark bookmark) {
             }
         };
     }
 
+
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/069e563a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/Store.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/Store.java
 
b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/Store.java
deleted file mode 100644
index 3cf5668..0000000
--- 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/Store.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  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.viewer.wicket.model.util;
-
-import java.io.Serializable;
-
-public interface Store extends Serializable {
-
-    Serializable get(String name);
-
-    void remove(String name);
-
-    void set(String name, Serializable value);
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/069e563a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/StoreUsingSession.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/StoreUsingSession.java
 
b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/StoreUsingSession.java
deleted file mode 100644
index 734c081..0000000
--- 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/util/StoreUsingSession.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *  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.viewer.wicket.model.util;
-
-import java.io.Serializable;
-
-import org.apache.wicket.Session;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
-
-public class StoreUsingSession implements Store {
-
-    private static final long serialVersionUID = 1L;
-
-    private final String oidStr;
-
-    public StoreUsingSession(final EntityModel entityModel) {
-        final ObjectAdapterMemento objectAdapterMemento = 
entityModel.getObjectAdapterMemento();
-        oidStr = asStr(objectAdapterMemento);
-    }
-
-    private static String asStr(final ObjectAdapterMemento 
objectAdapterMemento) {
-        final ObjectAdapter objectAdapter =
-                
objectAdapterMemento.getObjectAdapter(AdapterManager.ConcurrencyChecking.NO_CHECK);
-        final RootOid oid = (RootOid) objectAdapter.getOid();
-        return IsisContext.getOidMarshaller().marshalNoVersion(oid);
-    }
-
-    @Override
-    public Serializable get(final String key) {
-        return Session.get().getAttribute(getOidAndKey(key));
-    }
-
-    @Override
-    public void set(final String key, final Serializable value) {
-        Session.get().setAttribute(getOidAndKey(key), value);
-    }
-
-    @Override
-    public void remove(final String key) {
-        Session.get().removeAttribute(getOidAndKey(key));
-    }
-
-    protected String getOidAndKey(final String key) {
-        return oidStr + ":" + key;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/069e563a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java
index 4b69d0d..955f4b6 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java
@@ -31,6 +31,7 @@ import org.apache.wicket.model.IModel;
 
 import org.apache.isis.applib.annotation.Render;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import 
org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
 import org.apache.isis.core.metamodel.facets.members.render.RenderFacet;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -54,7 +55,7 @@ public class CollectionSelectorHelper implements Serializable 
{
     private final EntityCollectionModel model;
 
     private final List<ComponentFactory> componentFactories;
-    private final ComponentHintKey<String> selectedItemSessionAttribute;
+    private final ComponentHintKey<String> componentHintKey;
 
     public CollectionSelectorHelper(
             final EntityCollectionModel model,
@@ -65,14 +66,14 @@ public class CollectionSelectorHelper implements 
Serializable {
     public CollectionSelectorHelper(
             final EntityCollectionModel model,
             final ComponentFactoryRegistry componentFactoryRegistry,
-            final ComponentHintKey<String> selectedItemSessionAttribute) {
+            final ComponentHintKey<String> componentHintKey) {
         this.model = model;
         this.componentFactories = 
locateComponentFactories(componentFactoryRegistry);
-        this.selectedItemSessionAttribute =
-                selectedItemSessionAttribute != null ? 
selectedItemSessionAttribute : ComponentHintKey.<String>noop();
+        this.componentHintKey =
+                componentHintKey != null ? componentHintKey : 
ComponentHintKey.<String>noop();
         final EntityModel entityModel = model.getEntityModel();
         if(entityModel != null) {
-            entityModel.putSessionAttribute(this.selectedItemSessionAttribute);
+            entityModel.putSessionAttribute(this.componentHintKey);
         }
     }
 
@@ -120,7 +121,8 @@ public class CollectionSelectorHelper implements 
Serializable {
     private String determineInitialFactory() {
 
         // try to load from session, if can
-        final String sessionAttribute = selectedItemSessionAttribute.get();
+        final Bookmark bookmark = domainObjectBookmarkIfAny();
+        final String sessionAttribute = componentHintKey.get(bookmark);
         if(sessionAttribute != null) {
             return sessionAttribute;
         }
@@ -153,6 +155,13 @@ public class CollectionSelectorHelper implements 
Serializable {
 
     }
 
+    private Bookmark domainObjectBookmarkIfAny() {
+        final EntityModel entityModel = this.model.getEntityModel();
+        return entityModel != null
+                ? entityModel.getObjectAdapterMemento().asBookmark()
+                : null;
+    }
+
     private static List<ComponentFactory> ordered(List<ComponentFactory> 
componentFactories) {
         return orderAjaxTableToEnd(componentFactories);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/069e563a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java
index 85e4b8a..0ae06ea 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java
@@ -34,6 +34,7 @@ import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.commons.lang.StringExtensions;
 import org.apache.isis.viewer.wicket.model.hints.IsisUiHintEvent;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
@@ -67,7 +68,7 @@ public class CollectionSelectorPanel extends 
PanelAbstract<EntityCollectionModel
     private static final String ID_VIEW_BUTTON_ICON = "viewButtonIcon";
 
     private final CollectionSelectorHelper selectorHelper;
-    private final ComponentHintKey<String> selectedItemSessionAttribute;
+    private final ComponentHintKey<String> componentHintKey;
 
     private ComponentFactory selectedComponentFactory;
 
@@ -80,12 +81,12 @@ public class CollectionSelectorPanel extends 
PanelAbstract<EntityCollectionModel
     public CollectionSelectorPanel(
             final String id,
             final EntityCollectionModel model,
-            final ComponentHintKey<String> selectedItemSessionAttribute) {
+            final ComponentHintKey<String> componentHintKey) {
         super(id, model);
-        this.selectedItemSessionAttribute = selectedItemSessionAttribute;
+        this.componentHintKey = componentHintKey;
 
         selectorHelper = new CollectionSelectorHelper(
-                model, getComponentFactoryRegistry(), 
selectedItemSessionAttribute);
+                model, getComponentFactoryRegistry(), componentHintKey);
     }
 
     /**
@@ -142,10 +143,18 @@ public class CollectionSelectorPanel extends 
PanelAbstract<EntityCollectionModel
                             
linksSelectorPanel.setViewHintAndBroadcast(componentFactory.getName(), target);
 
                             linksSelectorPanel.selectedComponentFactory = 
componentFactory;
-                            
selectedItemSessionAttribute.set(componentFactory.getName());
+                            componentHintKey.set(domainObjectBookmarkIfAny(), 
componentFactory.getName());
                             target.add(linksSelectorPanel, views);
                         }
 
+                        Bookmark domainObjectBookmarkIfAny() {
+                            final EntityCollectionModel entityCollectionModel 
= CollectionSelectorPanel.this.getModel();
+                            final EntityModel entityModel = 
entityCollectionModel.getEntityModel();
+                            return entityModel != null
+                                    ? 
entityModel.getObjectAdapterMemento().asBookmark()
+                                    : null;
+                        }
+
                         @Override
                         protected void onComponentTag(ComponentTag tag) {
                             super.onComponentTag(tag);

http://git-wip-us.apache.org/repos/asf/isis/blob/069e563a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
index 55574ee..48cd418 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabGroupPanel.java
@@ -45,6 +45,7 @@ public class TabGroupPanel extends AjaxBootstrapTabbedPanel  {
 
     // the view metadata
     private final ComponentHintKey<Integer> selectedTabInSession;
+    private final EntityModel entityModel;
 
     private static List<ITab> tabsFor(final EntityModel entityModel) {
         final List<ITab> tabs = Lists.newArrayList();
@@ -76,6 +77,7 @@ public class TabGroupPanel extends AjaxBootstrapTabbedPanel  {
 
     public TabGroupPanel(String id, final EntityModel entityModel) {
         super(id, tabsFor(entityModel));
+        this.entityModel = entityModel;
 
         this.selectedTabInSession =  entityModel.createComponentKey(this, 
SESSION_ATTR_SELECTED_TAB);
     }
@@ -88,13 +90,13 @@ public class TabGroupPanel extends AjaxBootstrapTabbedPanel 
 {
 
     @Override
     public TabbedPanel setSelectedTab(final int index) {
-        selectedTabInSession.set(index);
+        
selectedTabInSession.set(entityModel.getObjectAdapterMemento().asBookmark(), 
index);
         return super.setSelectedTab(index);
     }
 
     private void setSelectedTabFromSessionIfAny(
             final AjaxBootstrapTabbedPanel ajaxBootstrapTabbedPanel) {
-        final Integer tabIndex = selectedTabInSession.get();
+        final Integer tabIndex = 
selectedTabInSession.get(entityModel.getObjectAdapterMemento().asBookmark());
         if (tabIndex != null) {
             final int numTabs = ajaxBootstrapTabbedPanel.getTabs().size();
             if (tabIndex < numTabs) {

Reply via email to