ISIS-1603: uses hints to reset focus after OK or Cancel (requiring extension to HintStore to accommodate); also fixes the model used to render edit link for dates and numbers etc (use same as textfield).
Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/41f626b3 Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/41f626b3 Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/41f626b3 Branch: refs/heads/master Commit: 41f626b3b7793178a0b027141df81e46a924732b Parents: 4966f59 Author: Dan Haywood <[email protected]> Authored: Tue May 2 07:25:33 2017 +0200 Committer: Dan Haywood <[email protected]> Committed: Tue May 2 07:25:33 2017 +0200 ---------------------------------------------------------------------- .../isis/applib/services/bookmark/Bookmark.java | 6 +- .../isis/applib/services/hint/HintStore.java | 26 ++++++++ .../services/HintStoreUsingWicketSession.java | 6 +- .../model/mementos/ObjectAdapterMemento.java | 17 +++++ .../viewer/wicket/model/models/EntityModel.java | 10 +-- .../selector/CollectionSelectorHelper.java | 18 +++--- .../selector/CollectionSelectorPanel.java | 2 +- .../layout/bs3/tabs/TabGroupPanel.java | 9 ++- .../property/PropertyEditFormPanel.java | 5 +- .../scalars/ScalarPanelAbstract2.java | 20 +++--- .../scalars/ScalarPanelTextFieldAbstract.java | 8 ++- .../ScalarPanelTextFieldDatePickerAbstract.java | 25 +++++-- .../scalars/ScalarPanelTextFieldNumeric.java | 20 +++++- .../datepicker/TextFieldWithDateTimePicker.java | 3 + .../jdkmath/JavaMathBigDecimalPanel.java | 8 ++- .../scalars/reference/ReferencePanel.java | 2 +- .../valuechoices/ValueChoicesSelect2Panel.java | 6 +- .../viewer/wicket/ui/pages/PageAbstract.java | 25 ++++++- .../wicket/ui/pages/entity/EntityPage.java | 20 ++++-- .../ui/pages/jquery.isis.wicket.viewer.js | 12 ++-- .../ui/panels/PromptFormPanelAbstract.java | 68 ++++++++++++++++++-- 21 files changed, 249 insertions(+), 67 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java ---------------------------------------------------------------------- diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java index a152824..7d976a0 100644 --- a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java +++ b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java @@ -38,7 +38,7 @@ public class Bookmark implements Serializable { private static final long serialVersionUID = 1L; - private static final char SEPARATOR = ':'; + protected static final char SEPARATOR = ':'; public OidDto toOidDto() { final OidDto oidDto = new OidDto(); @@ -124,9 +124,9 @@ public class Bookmark implements Serializable { } } - private final String objectType; + protected final String objectType; private final String identifier; - private final ObjectState state; + protected final ObjectState state; /** http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/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 index ebfca9b..5c274a4 100644 --- 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 @@ -25,6 +25,32 @@ import org.apache.isis.applib.services.bookmark.Bookmark; public interface HintStore { + public static class BookmarkWithHintId extends Bookmark { + + private final String hintId; + + public BookmarkWithHintId(final Bookmark bookmark, final String hintId) { + super(bookmark.toString()); + this.hintId = hintId; + } + + public String getHintId() { + return hintId; + } + + /** + * Similar to {@link #toString()}, but using {@link #hintId} rather than {@link #identifier}. + */ + public String toStringUsingHintId() { + return state.getCode() + objectType + SEPARATOR + hintId; + } + } + + interface HintIdProvider { + @Programmatic + String hintId(); + } + @Programmatic String get(final Bookmark bookmark, String hintKey); http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/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 index dd3a27d..f7f4b53 100644 --- 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 @@ -99,7 +99,11 @@ public class HintStoreUsingWicketSession implements HintStore { } protected String sessionAttributeFor(final Bookmark bookmark) { - return "hint-" + bookmark.toString(); + return "hint-" + ( + bookmark instanceof BookmarkWithHintId + ? ((BookmarkWithHintId) bookmark).toStringUsingHintId() + : bookmark.toString() + ); } } http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/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 8a68331..3f2bc86 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 @@ -31,6 +31,7 @@ import com.google.common.collect.FluentIterable; import com.google.common.collect.Lists; 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; import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking; @@ -380,6 +381,11 @@ public class ObjectAdapterMemento implements Serializable { private Bookmark bookmark; /** + * Only populated for {@link ObjectAdapter#getObject() domain object}s that implement {@link HintStore.HintIdProvider}. + */ + private String hintId; + + /** * The current value, if {@link Type#TRANSIENT}, will be <tt>null</tt> otherwise. * * <p> @@ -441,6 +447,10 @@ public class ObjectAdapterMemento implements Serializable { persistentOidStr = oid.enString(); bookmark = oid.asBookmark(); + if(adapter.getObject() instanceof HintStore.HintIdProvider) { + HintStore.HintIdProvider provider = (HintStore.HintIdProvider) adapter.getObject(); + this.hintId = provider.hintId(); + } type = Type.PERSISTENT; } @@ -467,6 +477,13 @@ public class ObjectAdapterMemento implements Serializable { return bookmark; } + public Bookmark asHintingBookmark() { + Bookmark bookmark = asBookmark(); + return hintId != null && bookmark != null + ? new HintStore.BookmarkWithHintId(bookmark, hintId) + : bookmark; + } + /** * Lazily looks up {@link ObjectAdapter} if required. * http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/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 a51bed6..8b2bca3 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 @@ -211,7 +211,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements UiH public void hintStoreToPageParameters( final PageParameters pageParameters) { final HintStore hintStore = getHintStore(); - final Bookmark bookmark= entityModel.getObjectAdapterMemento().asBookmark(); + final Bookmark bookmark= entityModel.getObjectAdapterMemento().asHintingBookmark(); Set<String> hintKeys = hintStore.findHintKeys(bookmark); for (String hintKey : hintKeys) { ComponentHintKey.create(hintKey).hintTo(bookmark, pageParameters, PREFIX); @@ -222,7 +222,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements UiH final PageParameters pageParameters) { Set<String> namedKeys = pageParameters.getNamedKeys(); if(namedKeys.contains("no-hints")) { - getHintStore().removeAll(entityModel.getObjectAdapterMemento().asBookmark()); + getHintStore().removeAll(entityModel.getObjectAdapterMemento().asHintingBookmark()); return; } List<ComponentHintKey> newComponentHintKeys = Lists.newArrayList(); @@ -232,7 +232,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements UiH String key = namedKey.substring(5); final ComponentHintKey componentHintKey = ComponentHintKey.create(key); newComponentHintKeys.add(componentHintKey); - final Bookmark bookmark = entityModel.getObjectAdapterMemento().asBookmark(); + final Bookmark bookmark = entityModel.getObjectAdapterMemento().asHintingBookmark(); componentHintKey.set(bookmark, value); } } @@ -251,7 +251,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements UiH public String getHint(final Component component, final String keyName) { final ComponentHintKey componentHintKey = ComponentHintKey.create(component, keyName); if(componentHintKey != null) { - return componentHintKey.get(getObjectAdapterMemento().asBookmark()); + return componentHintKey.get(getObjectAdapterMemento().asHintingBookmark()); } return null; } @@ -259,7 +259,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements UiH @Override public void setHint(Component component, String keyName, String hintValue) { ComponentHintKey componentHintKey = ComponentHintKey.create(component, keyName); - componentHintKey.set(this.getObjectAdapterMemento().asBookmark(), hintValue); + componentHintKey.set(this.getObjectAdapterMemento().asHintingBookmark(), hintValue); } @Override http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/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 e09817b..80de447 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 @@ -19,9 +19,16 @@ package org.apache.isis.viewer.wicket.ui.components.collection.selector; +import java.io.Serializable; +import java.util.List; + import com.google.common.base.Predicate; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; + +import org.apache.wicket.Component; +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; @@ -38,11 +45,6 @@ import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.CollectionContentsAsAjaxTablePanelFactory; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.multiple.CollectionContentsMultipleViewsPanelFactory; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.unresolved.CollectionContentsHiddenPanelFactory; -import org.apache.wicket.Component; -import org.apache.wicket.model.IModel; - -import java.io.Serializable; -import java.util.List; public class CollectionSelectorHelper implements Serializable { @@ -114,7 +116,7 @@ public class CollectionSelectorHelper implements Serializable { private String determineInitialFactory() { // try to load from session, if can - final Bookmark bookmark = domainObjectBookmarkIfAny(); + final Bookmark bookmark = bookmarkHintIfAny(); final String sessionAttribute = componentHintKey.get(bookmark); if(sessionAttribute != null) { return sessionAttribute; @@ -148,10 +150,10 @@ public class CollectionSelectorHelper implements Serializable { } - private Bookmark domainObjectBookmarkIfAny() { + private Bookmark bookmarkHintIfAny() { final EntityModel entityModel = this.model.getEntityModel(); return entityModel != null - ? entityModel.getObjectAdapterMemento().asBookmark() + ? entityModel.getObjectAdapterMemento().asHintingBookmark() : null; } http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/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 b0d65ba..5fc1bc7 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 @@ -150,7 +150,7 @@ public class CollectionSelectorPanel extends PanelAbstract<EntityCollectionModel final EntityCollectionModel entityCollectionModel = CollectionSelectorPanel.this.getModel(); final EntityModel entityModel = entityCollectionModel.getEntityModel(); return entityModel != null - ? entityModel.getObjectAdapterMemento().asBookmark() + ? entityModel.getObjectAdapterMemento().asHintingBookmark() : null; } http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/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 d74b8c5..f23de75 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 @@ -24,9 +24,6 @@ import com.google.common.base.Predicate; import com.google.common.collect.FluentIterable; import com.google.common.collect.Lists; -import org.apache.isis.applib.services.i18n.TranslationService; -import org.apache.isis.core.runtime.system.context.IsisContext; -import org.apache.isis.core.runtime.system.session.IsisSessionFactory; import org.apache.wicket.extensions.markup.html.tabs.AbstractTab; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.extensions.markup.html.tabs.TabbedPanel; @@ -35,6 +32,8 @@ import org.apache.wicket.model.Model; import org.apache.isis.applib.layout.grid.bootstrap3.BS3Tab; import org.apache.isis.applib.layout.grid.bootstrap3.BS3TabGroup; +import org.apache.isis.applib.services.i18n.TranslationService; +import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.wicket.model.models.EntityModel; import org.apache.isis.viewer.wicket.model.util.ComponentHintKey; import org.apache.isis.viewer.wicket.ui.components.layout.bs3.col.RepeatingViewWithDynamicallyVisibleContent; @@ -100,13 +99,13 @@ public class TabGroupPanel extends AjaxBootstrapTabbedPanel { @Override public TabbedPanel setSelectedTab(final int index) { - selectedTabHintKey.set(entityModel.getObjectAdapterMemento().asBookmark(), ""+index); + selectedTabHintKey.set(entityModel.getObjectAdapterMemento().asHintingBookmark(), ""+index); return super.setSelectedTab(index); } private void setSelectedTabFromSessionIfAny( final AjaxBootstrapTabbedPanel ajaxBootstrapTabbedPanel) { - final String selectedTabStr = selectedTabHintKey.get(entityModel.getObjectAdapterMemento().asBookmark()); + final String selectedTabStr = selectedTabHintKey.get(entityModel.getObjectAdapterMemento().asHintingBookmark()); final Integer tabIndex = parse(selectedTabStr); if (tabIndex != null) { final int numTabs = ajaxBootstrapTabbedPanel.getTabs().size(); http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java index 64c4b16..f9441a8 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormPanel.java @@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.property; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.OnDomReadyHeaderItem; import org.apache.wicket.markup.html.WebMarkupContainer; @@ -117,7 +118,7 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel> // which is called in the superclass. @Override public void onCancel( - final AjaxRequestTarget target) { + final AjaxRequestTarget target, final AjaxButton cancelButton) { final PromptStyle promptStyle = getScalarModel().getPromptStyle(); @@ -127,7 +128,7 @@ public class PropertyEditFormPanel extends PromptFormPanelAbstract<ScalarModel> getScalarModel().clearPending(); } - super.onCancel(target); + super.onCancel(target, cancelButton); } http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java index 28e13f3..ea816e8 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java @@ -79,6 +79,7 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im protected static final String ID_SCALAR_VALUE = "scalarValue"; + /** * as per {@link #inlinePromptLink} */ @@ -237,6 +238,7 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im final InlinePromptConfig inlinePromptConfig = getInlinePromptConfig(); if(inlinePromptConfig.isSupported()) { + this.scalarIfRegularInlinePromptForm = createInlinePromptForm(); scalarTypeContainer.addOrReplace(scalarIfRegularInlinePromptForm); inlinePromptLink = createInlinePromptLink(); @@ -264,7 +266,9 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im } } } - if(scalarModel.getKind() == ScalarModel.Kind.PROPERTY && scalarModel.getPromptStyle() != PromptStyle.INLINE) { + if(scalarModel.getKind() == ScalarModel.Kind.PROPERTY && + scalarModel.getMode() == EntityModel.Mode.VIEW && + scalarModel.getPromptStyle() != PromptStyle.INLINE) { getScalarValueComponent().add(new AttributeAppender("tabindex", "-1")); } @@ -276,7 +280,6 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im addEditPropertyTo(scalarIfRegular); addFeedbackOnlyTo(scalarIfRegular, getScalarValueComponent()); - getRendering().buildGui(this); addCssFromMetaModel(); @@ -374,8 +377,10 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im public void onUpdate( final AjaxRequestTarget target, final ScalarPanelAbstract2 scalarPanel) { - target.appendJavaScript( - String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PARAMETER, '%s')", getMarkupId())); + if(getModel().getKind() == ScalarModel.Kind.PARAMETER) { + target.appendJavaScript( + String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PARAMETER, '%s')", getMarkupId())); + } } @@ -479,8 +484,8 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im // (placeholder initially, create dynamically when needed - otherwise infinite loop because form references regular) - WebMarkupContainer scalarIfRegularInlinePromptForm = new WebMarkupContainer( - ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM); + WebMarkupContainer scalarIfRegularInlinePromptForm = + new WebMarkupContainer( ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM); scalarIfRegularInlinePromptForm.setOutputMarkupId(true); scalarIfRegularInlinePromptForm.setVisible(false); @@ -507,7 +512,7 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im /** * Components returning true for {@link #getInlinePromptConfig()} are required to override and return a non-null value. */ - protected IModel<?> obtainPromptInlineLinkModel() { + protected IModel<String> obtainPromptInlineLinkModel() { return null; } @@ -661,7 +666,6 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im return false; } - // /////////////////////////////////////////////////////////////////// /** http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java index 4f8b049..144a975 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java @@ -91,7 +91,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten // /////////////////////////////////////////////////////////////////// - AbstractTextComponent<T> getTextField() { + protected AbstractTextComponent<T> getTextField() { return textField; } @@ -284,8 +284,10 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten } @Override - protected IModel<T> obtainPromptInlineLinkModel() { - return textField.getModel(); + protected IModel<String> obtainPromptInlineLinkModel() { + IModel<T> model = textField.getModel(); + final T modelObject = model.getObject(); + return Model.of(modelObject != null ? modelObject.toString() : null); } http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java index 404f872..619b843 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java @@ -24,17 +24,16 @@ import java.io.Serializable; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.form.AbstractTextComponent; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.Fragment; +import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.util.convert.IConverter; -import org.apache.wicket.validation.IValidatable; -import org.apache.wicket.validation.IValidator; -import org.apache.wicket.validation.ValidationError; +import org.apache.isis.applib.services.i18n.LocaleProvider; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet; +import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings; import org.apache.isis.viewer.wicket.model.models.ScalarModel; import org.apache.isis.viewer.wicket.ui.components.scalars.datepicker.TextFieldWithDateTimePicker; @@ -98,7 +97,17 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializa return label; } - + + protected IModel<String> obtainPromptInlineLinkModel() { + ObjectAdapter object = scalarModel.getObject(); + final T value = object != null ? (T) object.getObject() : null; + final String str = + value != null + ? converter.convertToString(value, getLocaleProvider().getLocale()) + : null; + return Model.of(str); + } + /** * Optional override for subclasses to explicitly indicate desired amount to adjust compact form of textField */ @@ -109,10 +118,14 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializa @com.google.inject.Inject - private WicketViewerSettings settings; + WicketViewerSettings settings; protected WicketViewerSettings getSettings() { return settings; } + private LocaleProvider getLocaleProvider() { + return IsisContext.getSessionFactory().getServicesInjector().lookupService(LocaleProvider.class); + } + } http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java index d9c35b6..318fced 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java @@ -24,8 +24,13 @@ import java.io.Serializable; import org.apache.wicket.Component; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Fragment; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; import org.apache.wicket.util.convert.IConverter; +import org.apache.isis.applib.services.i18n.LocaleProvider; +import org.apache.isis.core.metamodel.adapter.ObjectAdapter; +import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.wicket.model.models.ScalarModel; /** @@ -63,7 +68,18 @@ public abstract class ScalarPanelTextFieldNumeric<T extends Serializable> extend return label; } - public IConverter<T> getConverter() { - return converter; + protected IModel<String> obtainPromptInlineLinkModel() { + ObjectAdapter object = scalarModel.getObject(); + final T value = object != null ? (T) object.getObject() : null; + final String str = + value != null + ? converter.convertToString(value, getLocaleProvider().getLocale()) + : null; + return Model.of(str); } + + private LocaleProvider getLocaleProvider() { + return IsisContext.getSessionFactory().getServicesInjector().lookupService(LocaleProvider.class); + } + } http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java index a432553..2d270bb 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/TextFieldWithDateTimePicker.java @@ -89,6 +89,9 @@ public class TextFieldWithDateTimePicker<T> extends TextField<T> implements ICon config.calendarWeeks(true); config.useCurrent(false); + // seems not to do anything... + //config.allowKeyboardNavigation(true); + final String datePickerMinDate = getConfiguration().getString(KEY_DATE_PICKER_MIN_DATE, KEY_DATE_PICKER_MIN_DATE_DEFAULT); final String datePickerMaxDate = getConfiguration().getString(KEY_DATE_PICKER_MAX_DATE, KEY_DATE_PICKER_MAX_DATE_DEFAULT); http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java index af21ffa..03fa38a 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java @@ -23,6 +23,8 @@ import java.math.BigDecimal; import org.apache.wicket.markup.html.form.AbstractTextComponent; +import org.apache.isis.applib.services.i18n.LocaleProvider; +import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.wicket.model.models.ScalarModel; import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric; import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel; @@ -36,7 +38,10 @@ public class JavaMathBigDecimalPanel extends ScalarPanelTextFieldNumeric<BigDeci private final BigDecimalConverterWithScale converter; - public JavaMathBigDecimalPanel(final String id, final ScalarModel scalarModel, final BigDecimalConverterWithScale converter) { + public JavaMathBigDecimalPanel( + final String id, + final ScalarModel scalarModel, + final BigDecimalConverterWithScale converter) { super(id, scalarModel, BigDecimal.class, converter.forViewMode()); this.converter = converter; } @@ -47,6 +52,7 @@ public class JavaMathBigDecimalPanel extends ScalarPanelTextFieldNumeric<BigDeci return new BigDecimalTextField(id, textFieldValueModel, cls, model, converter); } + @Override protected String getScalarPanelType() { return "javaMathBigDecimalPanel"; http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java index e083670..1faf411 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java @@ -203,7 +203,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract implements PanelW } @Override - protected IModel<?> obtainPromptInlineLinkModel() { + protected IModel<String> obtainPromptInlineLinkModel() { final IModel<ObjectAdapterMemento> model = select2.getModel(); return new IModel<String>() { @Override http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java index 6c46b4d..db0f47f 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java @@ -103,8 +103,10 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract impleme } @Override - protected IModel<?> obtainPromptInlineLinkModel() { - return select2.getModel(); + protected IModel<String> obtainPromptInlineLinkModel() { + ObjectAdapterMemento modelObject = select2.getModelObject(); + String str = modelObject != null ? modelObject.asString(): null; + return Model.of(str); } http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java index 779d5db..23ea2b3 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java @@ -120,6 +120,8 @@ public abstract class PageAbstract extends WebPage implements ActionPromptProvid public static final String ID_MENU_LINK = "menuLink"; + public static final String UIHINT_FOCUS = "focus"; + /** * This is a bit hacky, but best way I've found to pass an exception over to the WicketSignInPage * if there is a problem rendering this page. @@ -281,9 +283,28 @@ public abstract class PageAbstract extends WebPage implements ActionPromptProvid addBootLint(response); } - response.render(OnDomReadyHeaderItem.forScript( - "Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PROPERTY)")); + String markupId = null; + EntityModel entityModel = getUiHintContainerIfAny(); + if(entityModel != null) { + String path = entityModel.getHint(getPage(), PageAbstract.UIHINT_FOCUS); + if(path != null) { + Component childComponent = get(path); + if(childComponent != null) { + markupId = childComponent.getMarkupId(); + } + + } + } + String javaScript = markupId != null + ? String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PROPERTY, '%s')", markupId) + : "Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PROPERTY)"; + + response.render(OnDomReadyHeaderItem.forScript(javaScript)); + + } + protected EntityModel getUiHintContainerIfAny() { + return null; } private void addBootLint(final IHeaderResponse response) { http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java index f4d9bb0..f19c7c7 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java @@ -19,6 +19,14 @@ package org.apache.isis.viewer.wicket.ui.pages.entity; +import org.apache.wicket.Application; +import org.apache.wicket.RestartResponseException; +import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.util.string.Strings; + import org.apache.isis.applib.layout.component.Grid; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking; @@ -36,13 +44,6 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.Breadcrum import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModelProvider; import org.apache.isis.viewer.wicket.ui.pages.PageAbstract; import org.apache.isis.viewer.wicket.ui.util.CssClassAppender; -import org.apache.wicket.Application; -import org.apache.wicket.RestartResponseException; -import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.link.BookmarkablePageLink; -import org.apache.wicket.request.mapper.parameter.PageParameters; -import org.apache.wicket.util.string.Strings; /** * Web page representing an entity. @@ -126,6 +127,11 @@ public class EntityPage extends PageAbstract { breadcrumbModel.remove(entityModel); } + @Override + public EntityModel getUiHintContainerIfAny() { + return model; + } + /** * A rather crude way of intercepting the redirect-and-post strategy. * http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js index 01401d3..92d9e53 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js @@ -99,15 +99,19 @@ $(function() { }, 0); }); - Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_PARAMETER, function(jqEvent, modalWindowId) { + Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_PARAMETER, function(jqEvent, elementId) { setTimeout(function() { - $('#'+modalWindowId).find('.inputFormTable.parameters').find('input,textarea,select,div.cbx').filter(':visible:first').focus(); + $('#'+elementId).find('.inputFormTable.parameters').find('input,textarea,select,div.cbx').filter(':visible:first').focus(); }, 0); }); - Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_PROPERTY, function(jqEvent) { + Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_PROPERTY, function(jqEvent, elementId) { setTimeout(function() { - $(document).find('a.scalarValueInlinePromptLink').filter(':visible:first').focus(); + if(elementId) { + $("#" + elementId).find('a.scalarValueInlinePromptLink').filter(':visible:first').focus(); + } else { + $(document).find('a.scalarValueInlinePromptLink').filter(':visible:first').focus(); + } }, 0); }); http://git-wip-us.apache.org/repos/asf/isis/blob/41f626b3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java index 2ed2bdb..c7373d5 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormPanelAbstract.java @@ -25,6 +25,7 @@ import com.google.common.collect.Lists; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; +import org.apache.wicket.Page; import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; @@ -45,14 +46,18 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.core.runtime.system.session.IsisSessionFactory; import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings; +import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento; import org.apache.isis.viewer.wicket.model.models.ActionPrompt; import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider; +import org.apache.isis.viewer.wicket.model.models.EntityModel; import org.apache.isis.viewer.wicket.model.models.FormExecutorContext; import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber2; import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract2; import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormFeedbackPanel; import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour; import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil; +import org.apache.isis.viewer.wicket.ui.pages.PageAbstract; +import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage; /** * {@link PanelAbstract Panel} to capture the arguments for an action @@ -160,7 +165,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & FormExecutor protected AjaxButton addCancelButton() { - AjaxButton cancelButton = new AjaxButton(ID_CANCEL_BUTTON, new ResourceModel("cancelLabel")) { + final AjaxButton cancelButton = new AjaxButton(ID_CANCEL_BUTTON, new ResourceModel("cancelLabel")) { private static final long serialVersionUID = 1L; @Override @@ -170,7 +175,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & FormExecutor actionPromptIfAny.closePrompt(target); } - onCancel(target); + onCancel(target, this); } }; @@ -208,17 +213,28 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & FormExecutor @Override protected void respond(final AjaxRequestTarget target) { - onCancel(target); + onCancel(target, cancelButton); } }); } } + private EntityModel getPageUiHintContainerIfAny() { + Page page = getPage(); + if(page instanceof EntityPage) { + EntityPage entityPage = (EntityPage) page; + return entityPage.getUiHintContainerIfAny(); + } + return null; + } + private void onSubmitOf( final AjaxRequestTarget target, final Form<?> form, - final AjaxButton ajaxButton) { + final AjaxButton okButton) { + + setLastFocusHint(target, okButton); boolean succeeded = formExecutorContext.getFormExecutor().executeAndProcessResults(target, form); if(succeeded) { @@ -227,7 +243,7 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & FormExecutor // new page is rendered. target.appendJavaScript("isisShowVeil();\n"); - ajaxButton.send(getPage(), Broadcast.EXACT, newCompletedEvent(target, form)); + okButton.send(getPage(), Broadcast.EXACT, newCompletedEvent(target, form)); target.add(form); } else { @@ -246,6 +262,27 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & FormExecutor } } + private void setLastFocusHint(final AjaxRequestTarget target, final AjaxButton ajaxButton) { + + String lastFocusedElementId = target.getLastFocusedElementId(); + System.out.println("onSubmitOf, lastFocusedElementId = " + lastFocusedElementId); + System.out.println("onSubmitOf, ajaxButton.getPath() = " + ajaxButton.getPath()); + + final EntityModel entityModel = getPageUiHintContainerIfAny(); + if (entityModel == null) { + return; + } + ObjectAdapterMemento oam = entityModel.getObjectAdapterMemento(); + if(oam == null) { + return; + } + Component parentPanel = this.parentPanel; + MarkupContainer parent = parentPanel.getParent(); + if(parent != null) { + entityModel.setHint(getPage(), PageAbstract.UIHINT_FOCUS, parent.getPageRelativePath()); + } + } + private AuthenticationSession getAuthenticationSession() { return getIsisSessionFactory().getCurrentSession().getAuthenticationSession(); } @@ -268,7 +305,12 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & FormExecutor } public void onCancel( - final AjaxRequestTarget target) { + final AjaxRequestTarget target, final AjaxButton cancelButton) { + + String lastFocusedElementId = target.getLastFocusedElementId(); + System.out.println("onCancel, lastFocusedElementId = " + lastFocusedElementId); + + setLastFocusHint(target, cancelButton); final PromptStyle promptStyle = formExecutorContext.getPromptStyle(); @@ -290,7 +332,21 @@ public abstract class PromptFormPanelAbstract<T extends IModel<?> & FormExecutor formExecutorContext.getInlinePromptContext().onCancel(); // redraw + MarkupContainer scalarTypeContainer = formExecutorContext.getInlinePromptContext() + .getScalarTypeContainer(); + + if(scalarTypeContainer != null) { + String markupId = scalarTypeContainer.getMarkupId(); + target.appendJavaScript( + String.format("Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PROPERTY, '%s')", + markupId)); + } +// target.appendJavaScript( +// String.format("var $parent = $('%s').parent().parent().parent().parent().parent().parent(); Wicket.Event.publish(Isis.Topic.FOCUS_FIRST_PARAMETER, $parent[0].id)", +// parentPanel.getMarkupId())); + target.add(parent); + } }
