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) {