ISIS-537: continuing to pull out BulkActionsHelper (move bulk actions to panel header for standalone collection panel)
Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/9bad9179 Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/9bad9179 Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/9bad9179 Branch: refs/heads/ISIS-939 Commit: 9bad91796ccba1ebca747a387b48fee8213c78a1 Parents: 276472f Author: Dan Haywood <[email protected]> Authored: Mon Nov 10 19:56:22 2014 +0000 Committer: Dan Haywood <[email protected]> Committed: Mon Nov 10 19:56:22 2014 +0000 ---------------------------------------------------------------------- .../selector/CollectionSelectorHelper.java | 26 +-- .../selector/CollectionSelectorPanel.java | 4 +- .../ajaxtable/BulkActionsHelper.java | 5 +- .../ajaxtable/BulkActionsLinkFactory.java | 18 +- .../ajaxtable/BulkActionsProvider.java | 6 +- .../CollectionContentsAsAjaxTablePanel.html | 8 +- .../CollectionContentsAsAjaxTablePanel.java | 223 ++++++++----------- .../columns/ObjectAdapterToggleboxColumn.java | 20 +- .../CollectionContentsMultipleViewsPanel.java | 6 +- .../collections/EntityCollectionsPanel.java | 4 +- .../StandaloneCollectionPanel.html | 5 +- .../StandaloneCollectionPanel.java | 143 +++++++++++- 12 files changed, 286 insertions(+), 182 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java index dfcdbf5..eed5607 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorHelper.java @@ -19,6 +19,7 @@ package org.apache.isis.viewer.wicket.ui.components.collection.selector; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; import com.google.common.base.Predicate; @@ -38,30 +39,29 @@ import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable. import org.apache.isis.viewer.wicket.ui.components.collectioncontents.multiple.CollectionContentsMultipleViewsPanelFactory; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.unresolved.CollectionContentsAsUnresolvedPanelFactory; -public class CollectionSelectorHelper { +public class CollectionSelectorHelper implements Serializable { + + private static final long serialVersionUID = 1L; static final String UIHINT_EVENT_VIEW_KEY = "view"; - private final ComponentType componentType; - private final ComponentFactoryRegistry componentFactoryRegistry; + private static final ComponentFactory ignoreFactory = new CollectionContentsMultipleViewsPanelFactory(); + private static final ComponentType componentType = ComponentType.COLLECTION_CONTENTS; // this.ignoreFactory.getComponentType();; + private final EntityCollectionModel model; - private final ComponentFactory ignoreFactory; private final List<ComponentFactory> componentFactories; - public CollectionSelectorHelper( final EntityCollectionModel model, - final ComponentFactoryRegistry componentFactoryRegistry, - final ComponentFactory ignoreFactory) { - this.componentFactoryRegistry = componentFactoryRegistry; + final ComponentFactoryRegistry componentFactoryRegistry) { this.model = model; - this.ignoreFactory = ignoreFactory; - this.componentType = ignoreFactory.getComponentType(); - - componentFactories = findOtherComponentFactories(); + this.componentFactories = findOtherComponentFactories(componentFactoryRegistry); } - public List<ComponentFactory> findOtherComponentFactories() { + public List<ComponentFactory> findOtherComponentFactories(ComponentFactoryRegistry componentFactoryRegistry) { + if(componentFactories != null) { + return componentFactories; + } final List<ComponentFactory> componentFactories = componentFactoryRegistry.findComponentFactories(componentType, model); ArrayList<ComponentFactory> otherFactories = Lists.newArrayList(Collections2.filter(componentFactories, new Predicate<ComponentFactory>() { @Override http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java index cb8d0f2..8cdc710 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.java @@ -74,7 +74,7 @@ public class CollectionSelectorPanel public CollectionSelectorPanel(final String id, final EntityCollectionModel model, final ComponentFactory ignoreFactory) { super(id, model); this.componentType = ignoreFactory.getComponentType(); - selectorHelper = new CollectionSelectorHelper(model, getComponentFactoryRegistry(), ignoreFactory); + selectorHelper = new CollectionSelectorHelper(model, getComponentFactoryRegistry()); } /** @@ -88,7 +88,7 @@ public class CollectionSelectorPanel private void addDropdown() { - final List<ComponentFactory> componentFactories = selectorHelper.findOtherComponentFactories(); + final List<ComponentFactory> componentFactories = selectorHelper.findOtherComponentFactories(getComponentFactoryRegistry()); final int selected = selectorHelper.honourViewHintElseDefault(this); // selector http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsHelper.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsHelper.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsHelper.java index e7b1b66..0c2822f 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsHelper.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsHelper.java @@ -18,6 +18,7 @@ */ package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable; +import java.io.Serializable; import java.util.Collections; import java.util.List; import com.google.common.base.Predicate; @@ -31,10 +32,12 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel; -public class BulkActionsHelper { +public class BulkActionsHelper implements Serializable { private final EntityCollectionModel model; + private static final long serialVersionUID = 1L; + public BulkActionsHelper(final EntityCollectionModel model) { this.model = model; } http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java index 826aebf..efc68c1 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsLinkFactory.java @@ -23,7 +23,6 @@ import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import org.apache.wicket.Session; -import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable; import org.apache.wicket.markup.html.link.AbstractLink; import org.apache.wicket.markup.html.link.Link; import org.apache.isis.applib.RecoverableException; @@ -54,26 +53,21 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFac import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem; import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour; -final class BulkActionsLinkFactory implements ActionLinkFactory { +public final class BulkActionsLinkFactory implements ActionLinkFactory { private static final long serialVersionUID = 1L; private final EntityCollectionModel model; - @SuppressWarnings("unused") - private final DataTable<ObjectAdapter,String> dataTable; - private ObjectAdapterToggleboxColumn toggleboxColumn; + private final ObjectAdapterToggleboxColumn toggleboxColumn; - BulkActionsLinkFactory( - final EntityCollectionModel model, - final DataTable<ObjectAdapter,String> dataTable) { + public BulkActionsLinkFactory( + final EntityCollectionModel model, + final ObjectAdapterToggleboxColumn toggleboxColumn) { this.model = model; - this.dataTable = dataTable; - } - - public void setToggleboxColumn(ObjectAdapterToggleboxColumn toggleboxColumn) { this.toggleboxColumn = toggleboxColumn; } + @Override public LinkAndLabel newLink( final ObjectAdapterMemento serviceAdapterMemento, http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsProvider.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsProvider.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsProvider.java index 697f556..2ab87a3 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsProvider.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/BulkActionsProvider.java @@ -18,11 +18,11 @@ */ package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable; -import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider; -import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactory; +import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterToggleboxColumn; public interface BulkActionsProvider { - public void configureBulkActionsProvider(ActionLinkFactory linkFactory, ActionPromptProvider actionPromptProvider); + void configureBulkActionsProvider(ObjectAdapterToggleboxColumn toggleboxColumn); + ObjectAdapterToggleboxColumn createToggleboxColumn(); } http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.html ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.html index 31c0121..694f262 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.html +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.html @@ -21,12 +21,16 @@ <body> <wicket:panel> <div class="collectionContentsAsAjaxTablePanel collectionContentsComponentType"> - <div class="entityActions" wicket:id="entityActions"></div> + <!-- + <div class="entityActions" xxxwicket:id="entityActions"></div> + --> <div class="clearfix"></div> <div class="table-responsive"> <table class="contents table table-striped table-condensed table-hover table-bordered" cellspacing="0" wicket:id="table">[table]</table> </div> - <div wicket:id="actionPromptModalWindow"></div> + <!-- + <div xxxwicket:id="actionPromptModalWindow"></div> + --> </div> </wicket:panel> </body> http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java index 74ec5d9..b53427b 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java @@ -20,7 +20,6 @@ package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable; import java.util.List; -import com.google.common.base.Predicate; import com.google.common.collect.Lists; import com.google.inject.Inject; import org.apache.wicket.Component; @@ -40,25 +39,17 @@ import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException; import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet; import org.apache.isis.core.metamodel.spec.ObjectSpecification; import org.apache.isis.core.metamodel.spec.feature.Contributed; -import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.viewer.wicket.model.common.SelectionHandler; import org.apache.isis.viewer.wicket.model.hints.UiHintPathSignificant; import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings; -import org.apache.isis.viewer.wicket.model.links.LinkAndLabel; 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.EntityCollectionModel; -import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow; import org.apache.isis.viewer.wicket.ui.components.collection.count.CollectionCountProvider; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ColumnAbstract; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterPropertyColumn; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterTitleColumn; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterToggleboxColumn; -import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactory; -import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuBuilder; -import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel; import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract; import org.apache.isis.viewer.wicket.ui.panels.PanelUtil; @@ -66,19 +57,16 @@ import org.apache.isis.viewer.wicket.ui.panels.PanelUtil; * {@link PanelAbstract Panel} that represents a {@link EntityCollectionModel * collection of entity}s rendered using {@link AjaxFallbackDefaultDataTable}. */ -public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityCollectionModel> implements CollectionCountProvider, ActionPromptProvider, BulkActionsProvider, UiHintPathSignificant { +public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityCollectionModel> implements CollectionCountProvider /*, ActionPromptProvider, BulkActionsProvider */, UiHintPathSignificant { private static final long serialVersionUID = 1L; private static final String ID_TABLE = "table"; private static final String ID_ACTION_PROMPT_MODAL_WINDOW = "actionPromptModalWindow"; - private static final String ID_ENTITY_ACTIONS = "entityActions"; - @SuppressWarnings("deprecation") - private static final Predicate<ObjectAction> BULK = Filters.asPredicate(ObjectAction.Filters.bulk()); - private IsisAjaxFallbackDataTable<ObjectAdapter,String> dataTable; + private final BulkActionsHelper bulkActionsHelper; @@ -94,14 +82,51 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl } private void buildGui() { - final EntityCollectionModel model = getModel(); final List<IColumn<ObjectAdapter,String>> columns = Lists.newArrayList(); - List<ObjectAction> bulkActions = bulkActionsHelper.getBulkActions(); + // bulkactions + final BulkActionsProvider bulkActionsProvider = getBulkActionsProvider(); + + ObjectAdapterToggleboxColumn toggleboxColumn = null; + if(bulkActionsProvider != null) { + +// List<ObjectAction> bulkActions = bulkActionsProvider.getBulkActions(); +// if(!bulkActions.isEmpty()) { + + toggleboxColumn = bulkActionsProvider.createToggleboxColumn(); + if(toggleboxColumn != null) { + columns.add(toggleboxColumn); + } + bulkActionsProvider.configureBulkActionsProvider(toggleboxColumn); + +// } + + } + +// } else { +// if(bulkActions.isEmpty() || getModel().isParented()) { +// //permanentlyHide(ID_ENTITY_ACTIONS); +// getBulkActionsProvider().configureBulkActionsProvider(null, null); +// } else { + +// actionLinkFactoryDelegating = new ActionLinkFactoryDelegating(); +// actionPromptProviderDelegating = new ActionPromptProviderDelegating(); + + //getBulkActionsProvider().configureBulkActionsProvider(linkFactory, this); +// getBulkActionsProvider().configureBulkActionsProvider(linkFactory, null); + +// final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(null, bulkActions, actionLinkFactoryDelegating, actionPromptProviderDelegating, null); +// final CssMenuPanel cssMenuPanel = cssMenuBuilder.buildPanel(ID_ENTITY_ACTIONS, "Actions"); +// +// this.addOrReplace(cssMenuPanel); - final ObjectAdapterToggleboxColumn toggleboxColumn = addToggleboxColumnIfRequired(columns, bulkActions); + // } + //List<ObjectAction> bulkActions = bulkActionsHelper.getBulkActions(); + + + final EntityCollectionModel model = getModel(); addTitleColumn(columns, model.getParentObjectAdapterMemento(), getSettings().getMaxTitleLengthInStandaloneTables(), getSettings().getMaxTitleLengthInStandaloneTables()); addPropertyColumnsIfRequired(columns); @@ -110,71 +135,55 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl addOrReplace(dataTable); dataTable.honourHints(); - addActionPromptModalWindow(); - - // bulkactions - if(bulkActions.isEmpty() || getModel().isParented()) { - permanentlyHide(ID_ENTITY_ACTIONS); - } else { - BulkActionsLinkFactory linkFactory = new BulkActionsLinkFactory(getModel(), dataTable); - linkFactory.setToggleboxColumn(toggleboxColumn); + if(toggleboxColumn != null) { + final SelectionHandler handler = new SelectionHandler() { - actionLinkFactoryDelegating = new ActionLinkFactoryDelegating(); - actionPromptProviderDelegating = new ActionPromptProviderDelegating(); + private static final long serialVersionUID = 1L; - getBulkActionsProvider().configureBulkActionsProvider(linkFactory, this); + @Override + public void onSelected( + final Component context, + final ObjectAdapter selectedAdapter, + final AjaxRequestTarget ajaxRequestTarget) { + model.toggleSelectionOn(selectedAdapter); + } - final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(null, bulkActions, actionLinkFactoryDelegating, actionPromptProviderDelegating, null); - final CssMenuPanel cssMenuPanel = cssMenuBuilder.buildPanel(ID_ENTITY_ACTIONS, "Actions"); + @Override + public void onConcurrencyException( + final Component context, + final ObjectAdapter selectedAdapter, + final ConcurrencyException ex, + final AjaxRequestTarget ajaxRequestTarget) { - this.addOrReplace(cssMenuPanel); + // this causes the row to be repainted + // but it isn't possible (yet) to raise any warning + // because that only gets flushed on page refresh. + // + // perhaps something to tackle in a separate ticket.... + ajaxRequestTarget.add(dataTable); + } + }; + toggleboxColumn.setHandler(handler); } - } - private BulkActionsProvider getBulkActionsProvider() { - return this; - } - - private ObjectAdapterToggleboxColumn addToggleboxColumnIfRequired( - final List<IColumn<ObjectAdapter,String>> columns, - final List<ObjectAction> bulkActions) { - final EntityCollectionModel entityCollectionModel = getModel(); - if(bulkActions.isEmpty() || entityCollectionModel.isParented()) { - return null; - } - - ObjectAdapterToggleboxColumn toggleboxColumn = new ObjectAdapterToggleboxColumn(new SelectionHandler() { - - private static final long serialVersionUID = 1L; + //addActionPromptModalWindow(); - @Override - public void onSelected( - final Component context, final ObjectAdapter selectedAdapter, - AjaxRequestTarget ajaxRequestTarget) { - entityCollectionModel.toggleSelectionOn(selectedAdapter); - } + } - @Override - public void onConcurrencyException( - final Component context, ObjectAdapter selectedAdapter, - ConcurrencyException ex, - AjaxRequestTarget ajaxRequestTarget) { - - // this causes the row to be repainted - // but it isn't possible (yet) to raise any warning - // because that only gets flushed on page refresh. - // - - // perhaps something to tackle in a separate ticket.... - ajaxRequestTarget.add(dataTable); + private BulkActionsProvider getBulkActionsProvider() { + Component component = this; + while(component != null) { + if(component instanceof BulkActionsProvider) { + return (BulkActionsProvider) component; } - }); - columns.add(toggleboxColumn); - return toggleboxColumn; + component = component.getParent(); + } + return null; } + private void addTitleColumn(final List<IColumn<ObjectAdapter,String>> columns, ObjectAdapterMemento parentAdapterMementoIfAny, int maxTitleParented, int maxTitleStandalone) { int maxTitleLength = getModel().isParented()? maxTitleParented: maxTitleStandalone; columns.add(new ObjectAdapterTitleColumn(parentAdapterMementoIfAny, maxTitleLength)); @@ -249,19 +258,19 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl //endregion - //region > ActionPromptModalWindowProvider - - private ActionPromptModalWindow actionPromptModalWindow; - public ActionPromptModalWindow getActionPrompt() { - return ActionPromptModalWindow.getActionPromptModalWindowIfEnabled(actionPromptModalWindow); - } - - private void addActionPromptModalWindow() { - this.actionPromptModalWindow = ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); - addOrReplace(actionPromptModalWindow); - } - - //endregion +// //region > ActionPromptModalWindowProvider +// +// private ActionPromptModalWindow actionPromptModalWindow; +// public ActionPromptModalWindow getActionPrompt() { +// return ActionPromptModalWindow.getActionPromptModalWindowIfEnabled(actionPromptModalWindow); +// } +// +// private void addActionPromptModalWindow() { +// this.actionPromptModalWindow = ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); +// addOrReplace(actionPromptModalWindow); +// } +// +// //endregion // ////////////////////////////////////// @@ -287,56 +296,6 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl // ////////////////////////////////////// - private ActionPromptProviderDelegating actionPromptProviderDelegating; - private ActionLinkFactoryDelegating actionLinkFactoryDelegating; - - @Override - public void configureBulkActionsProvider( - final ActionLinkFactory linkFactory, - final ActionPromptProvider actionPromptProvider) { - actionLinkFactoryDelegating.setDelegate(linkFactory); - actionPromptProviderDelegating.setDelegate(actionPromptProvider); - } - - public static class ActionLinkFactoryDelegating implements ActionLinkFactory { - - private ActionLinkFactory delegate; - - public ActionLinkFactory getDelegate() { - return delegate; - } - - public void setDelegate(ActionLinkFactory delegate) { - this.delegate = delegate; - } - - @Override - public LinkAndLabel newLink( - final ObjectAdapterMemento adapter, - final ObjectAction noAction, - final String linkId, - final ActionPromptProvider actionPromptProvider) { - return delegate.newLink(adapter, noAction, linkId, actionPromptProvider); - } - } - - public static class ActionPromptProviderDelegating implements ActionPromptProvider { - - private ActionPromptProvider delegate; - - public ActionPromptProvider getDelegate() { - return delegate; - } - - public void setDelegate(ActionPromptProvider delegate) { - this.delegate = delegate; - } - - @Override - public ActionPrompt getActionPrompt() { - return delegate.getActionPrompt(); - } - } } http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterToggleboxColumn.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterToggleboxColumn.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterToggleboxColumn.java index 954a25a..31bb8ce 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterToggleboxColumn.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterToggleboxColumn.java @@ -39,13 +39,21 @@ public final class ObjectAdapterToggleboxColumn extends ColumnAbstract<ObjectAda private static final long serialVersionUID = 1L; - private final SelectionHandler handler; + private SelectionHandler handler; + public ObjectAdapterToggleboxColumn() { + this(null); + } + public ObjectAdapterToggleboxColumn(final SelectionHandler handler) { super(""); this.handler = handler; } - + + public void setHandler(SelectionHandler handler) { + this.handler = handler; + } + @Override public Component getHeader(String componentId) { @@ -82,12 +90,16 @@ public final class ObjectAdapterToggleboxColumn extends ColumnAbstract<ObjectAda ObjectAdapter selectedAdapter = null; try { selectedAdapter = entityModel.load(ConcurrencyChecking.CHECK); - handler.onSelected(this, selectedAdapter, target); + if(handler != null) { + handler.onSelected(this, selectedAdapter, target); + } } catch(ConcurrencyException ex) { // should work second time, because the previous attempt will have updated the OAM's OIDs version. selectedAdapter = entityModel.load(ConcurrencyChecking.CHECK); - handler.onConcurrencyException(this, selectedAdapter, ex, target); + if(handler != null) { + handler.onConcurrencyException(this, selectedAdapter, ex, target); + } entityModel.setException(ex); } http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/multiple/CollectionContentsMultipleViewsPanel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/multiple/CollectionContentsMultipleViewsPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/multiple/CollectionContentsMultipleViewsPanel.java index 49db84a..e4a37b3 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/multiple/CollectionContentsMultipleViewsPanel.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/multiple/CollectionContentsMultipleViewsPanel.java @@ -75,7 +75,7 @@ public class CollectionContentsMultipleViewsPanel this.ignoreFactory = ignoreFactory; this.underlyingIdPrefix = ComponentType.COLLECTION_CONTENTS.toString(); this.componentType = ignoreFactory.getComponentType(); - selectorHelper = new CollectionSelectorHelper(model, getComponentFactoryRegistry(), ignoreFactory); + selectorHelper = new CollectionSelectorHelper(model, getComponentFactoryRegistry()); } @@ -92,7 +92,7 @@ public class CollectionContentsMultipleViewsPanel final EntityCollectionModel model = getModel(); final int selected = selectorHelper.honourViewHintElseDefault(getSelectorDropdownPanel()); - final List<ComponentFactory> componentFactories = selectorHelper.findOtherComponentFactories(); + final List<ComponentFactory> componentFactories = selectorHelper.findOtherComponentFactories(getComponentFactoryRegistry()); // create all, hide the one not selected underlyingViews = new Component[MAX_NUM_UNDERLYING_VIEWS]; @@ -140,7 +140,7 @@ public class CollectionContentsMultipleViewsPanel int underlyingViewNum = 0; String viewStr = uiHintContainer.getHint(this.getSelectorDropdownPanel(), UIHINT_VIEW); - List<ComponentFactory> componentFactories = selectorHelper.findOtherComponentFactories(); + List<ComponentFactory> componentFactories = selectorHelper.findOtherComponentFactories(getComponentFactoryRegistry()); if(viewStr != null) { try { http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java index 876177d..beee965 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java @@ -128,9 +128,9 @@ public class EntityCollectionsPanel extends PanelAbstract<EntityModel> { AdditionalLinksPanel additionalLinks = new AdditionalLinksPanel(ID_ADDITIONAL_LINKS, links); fieldset.addOrReplace(additionalLinks); - final CollectionSelectorHelper selectorHelper = new CollectionSelectorHelper(entityCollectionModel, getComponentFactoryRegistry(), new CollectionContentsMultipleViewsPanelFactory()); + final CollectionSelectorHelper selectorHelper = new CollectionSelectorHelper(entityCollectionModel, getComponentFactoryRegistry()); - final List<ComponentFactory> componentFactories = selectorHelper.findOtherComponentFactories(); + final List<ComponentFactory> componentFactories = selectorHelper.findOtherComponentFactories(getComponentFactoryRegistry()); if (componentFactories.size() <= 1) { permanentlyHide(ID_SELECTOR_DROPDOWN); http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.html ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.html index d09c0bd..194d8fa 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.html +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.html @@ -25,17 +25,16 @@ <body> <wicket:panel> + <div wicket:id="actionPromptModalWindow"></div> <div class="standaloneCollectionPanel actionComponentType myBlockContainer panel panel-default"> <div class="iconAndTitle panel-heading actionPanelHeaderNew"> <div wicket:id="actionName" class="actionName panel-title">[action name]</div> <div class="pull-right"> - <!-- <div class="btn-group"> - <div xxxwicket:id="additionalLinks"></div> + <div class="entityActions" wicket:id="entityActions"></div> </div> - --> <div class="btn-group"> <span wicket:id="selectorDropdown"/> </div> http://git-wip-us.apache.org/repos/asf/isis/blob/9bad9179/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java index 7ac4640..a4e76ce 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java @@ -22,33 +22,48 @@ package org.apache.isis.viewer.wicket.ui.components.standalonecollection; import java.util.List; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.Model; - import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.viewer.wicket.model.models.ActionModel; +import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider; import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel; import org.apache.isis.viewer.wicket.ui.ComponentFactory; import org.apache.isis.viewer.wicket.ui.ComponentType; import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry; +import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow; import org.apache.isis.viewer.wicket.ui.components.collection.count.CollectionCountProvider; import org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorHelper; import org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorPanel; import org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorProvider; +import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.BulkActionsHelper; +import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.BulkActionsLinkFactory; +import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.BulkActionsProvider; +import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterToggleboxColumn; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.multiple.CollectionContentsMultipleViewsPanelFactory; +import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactory; +import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuBuilder; +import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel; import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract; public class StandaloneCollectionPanel extends PanelAbstract<EntityCollectionModel> - implements CollectionCountProvider, CollectionSelectorProvider { + implements CollectionCountProvider, CollectionSelectorProvider, BulkActionsProvider, ActionPromptProvider { private static final long serialVersionUID = 1L; private static final String ID_ACTION_NAME = "actionName"; - private static final String ID_ADDITIONAL_LINKS = "additionalLinks"; + + private static final String ID_ACTION_PROMPT_MODAL_WINDOW = "actionPromptModalWindow"; + private static final String ID_ENTITY_ACTIONS = "entityActions"; + private static final String ID_SELECTOR_DROPDOWN = "selectorDropdown"; private CollectionSelectorPanel selectorDropdownPanel; + private final BulkActionsHelper bulkActionsHelper; + public StandaloneCollectionPanel(final String id, final EntityCollectionModel entityCollectionModel) { super(id, entityCollectionModel); buildGui(entityCollectionModel); + + bulkActionsHelper = new BulkActionsHelper(entityCollectionModel); } private void buildGui(final EntityCollectionModel entityCollectionModel) { @@ -57,9 +72,24 @@ public class StandaloneCollectionPanel extends PanelAbstract<EntityCollectionMod ObjectAction action = actionModel.getActionMemento().getAction(); addOrReplace(new Label(StandaloneCollectionPanel.ID_ACTION_NAME, Model.of(action.getName()))); - final CollectionSelectorHelper selectorHelper = new CollectionSelectorHelper(entityCollectionModel, getComponentFactoryRegistry(), new CollectionContentsMultipleViewsPanelFactory()); + final CollectionSelectorHelper selectorHelper = new CollectionSelectorHelper(entityCollectionModel, getComponentFactoryRegistry()); + + final List<ComponentFactory> componentFactories = selectorHelper.findOtherComponentFactories(getComponentFactoryRegistry()); + + + + addActionPromptModalWindow(); + + // bulkactions ... in configureBulkActionsProvider + +// List<ObjectAction> bulkActions = bulkActionsHelper.getBulkActions(); +// +// if(bulkActions.isEmpty() || getModel().isParented()) { +// permanentlyHide(ID_ENTITY_ACTIONS); +// } else { +// +// } - final List<ComponentFactory> componentFactories = selectorHelper.findOtherComponentFactories(); if (componentFactories.size() <= 1) { permanentlyHide(ID_SELECTOR_DROPDOWN); @@ -94,4 +124,107 @@ public class StandaloneCollectionPanel extends PanelAbstract<EntityCollectionMod public CollectionSelectorPanel getSelectorDropdownPanel() { return selectorDropdownPanel; } + + + + //region > ActionPromptModalWindowProvider + + private ActionPromptModalWindow actionPromptModalWindow; + public ActionPromptModalWindow getActionPrompt() { + return ActionPromptModalWindow.getActionPromptModalWindowIfEnabled(actionPromptModalWindow); + } + + private void addActionPromptModalWindow() { + this.actionPromptModalWindow = ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); + addOrReplace(actionPromptModalWindow); + } + + //endregion + + + + + @Override + public void configureBulkActionsProvider(ObjectAdapterToggleboxColumn toggleboxColumn) { + BulkActionsLinkFactory linkFactory = new BulkActionsLinkFactory(getModel(), toggleboxColumn); + configureBulkActionsProvider(linkFactory, this); + } + + private void configureBulkActionsProvider( + final ActionLinkFactory linkFactory, + final ActionPromptProvider actionPromptProvider) { + + if(linkFactory != null) { + final List<ObjectAction> bulkActions = bulkActionsHelper.getBulkActions(); + + final CssMenuBuilder cssMenuBuilder = new CssMenuBuilder(null, bulkActions, linkFactory, actionPromptProvider != null? actionPromptProvider: this, null); + final CssMenuPanel cssMenuPanel = cssMenuBuilder.buildPanel(ID_ENTITY_ACTIONS, "Actions"); + + addOrReplace(cssMenuPanel); + + } else { + permanentlyHide(ID_ENTITY_ACTIONS); + + } + } + + + private List<ObjectAction> getBulkActions() { + return bulkActionsHelper.getBulkActions(); + } + +// public static class ActionLinkFactoryDelegating implements ActionLinkFactory { +// +// private ActionLinkFactory delegate; +// +// public ActionLinkFactory getDelegate() { +// return delegate; +// } +// +// public void setDelegate(ActionLinkFactory delegate) { +// this.delegate = delegate; +// } +// +// @Override +// public LinkAndLabel newLink( +// final ObjectAdapterMemento adapter, +// final ObjectAction noAction, +// final String linkId, +// final ActionPromptProvider actionPromptProvider) { +// return delegate.newLink(adapter, noAction, linkId, actionPromptProvider); +// } +// } +// +// public static class ActionPromptProviderDelegating implements ActionPromptProvider { +// +// private ActionPromptProvider delegate; +// +// public ActionPromptProvider getDelegate() { +// return delegate; +// } +// +// public void setDelegate(ActionPromptProvider delegate) { +// this.delegate = delegate; +// } +// +// @Override +// public ActionPrompt getActionPrompt() { +// return delegate.getActionPrompt(); +// } +// } + + + @Override + public ObjectAdapterToggleboxColumn createToggleboxColumn() { + + final List<ObjectAction> bulkActions = getBulkActions(); + + final EntityCollectionModel entityCollectionModel = getModel(); + if(bulkActions.isEmpty() || entityCollectionModel.isParented()) { + return null; + } + + return new ObjectAdapterToggleboxColumn(); + } + }
