ISIS-537: working towards additional links on panel title for (property) member groups
* factored out the code that builds the list of links * changed way that ActionPromptProvider is derived (CollectionPanel need no longer implement directly, can lazily determine from Page when required) * NB: some code clean up of redundant/commented out code still required. Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/9de5ba8e Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/9de5ba8e Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/9de5ba8e Branch: refs/heads/master Commit: 9de5ba8e958c0e4ad3be2fe2e64c12a054959135 Parents: b4bd7a4 Author: Dan Haywood <[email protected]> Authored: Tue Nov 25 07:25:00 2014 +0000 Committer: Dan Haywood <[email protected]> Committed: Tue Nov 25 07:25:00 2014 +0000 ---------------------------------------------------------------------- .../viewer/wicket/model/models/ActionModel.java | 25 +++++----- .../model/models/ActionPromptProvider.java | 11 ++++- .../actions/ActionParametersFormPanel.java | 10 ++-- .../additionallinks/AdditionalLinksPanel.java | 17 ++++++- .../additionallinks/EntityActionUtil.java | 48 ++++++++++++++------ .../components/collection/CollectionPanel.html | 2 +- .../components/collection/CollectionPanel.java | 47 +++++++++++++------ .../CollectionContentsAsAjaxTablePanel.css | 1 + .../entity/properties/EntityPropertiesForm.java | 40 ++++++++++++++-- .../properties/EntityPropertiesPanel.html | 8 +++- .../components/scalars/ScalarPanelAbstract.java | 34 ++++---------- .../cssmenu/ActionLinkFactoryAbstract.java | 9 ++-- .../wicket/ui/pages/bootstrap-overrides.css | 11 +---- 13 files changed, 172 insertions(+), 91 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java index ce3202c..13401c2 100644 --- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java +++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java @@ -79,6 +79,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> { private static final long serialVersionUID = 1L; private static final String NULL_ARG = "$nullArg$"; + private static Pattern KEY_VALUE_PATTERN = Pattern.compile("([^=]+)=(.+)"); /** * Whether we are obtaining arguments (eg in a dialog), or displaying the @@ -142,9 +143,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> { public static Entry<Integer, String> parse(final String paramContext) { - // TODO mgrigorov Extract the Pattern as a constant. No need to re-compile it again and again - final Pattern compile = Pattern.compile("([^=]+)=(.+)"); - final Matcher matcher = compile.matcher(paramContext); + final Matcher matcher = KEY_VALUE_PATTERN.matcher(paramContext); if (!matcher.matches()) { return null; } @@ -316,7 +315,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> { this.targetAdapterMemento = actionModel.targetAdapterMemento; this.actionMemento = actionModel.actionMemento; this.actionMode = actionModel.actionMode; - this.actionPrompt = actionModel.actionPrompt; + //this.actionPrompt = actionModel.actionPrompt; primeArgumentModels(); final Map<Integer, ScalarModel> argumentModelByIdx = actionModel.arguments; @@ -525,15 +524,15 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> { // ////////////////////////////////////// - private ActionPrompt actionPrompt; - - public void setActionPrompt(ActionPrompt actionPrompt) { - this.actionPrompt = actionPrompt; - } - - public ActionPrompt getActionPrompt() { - return actionPrompt; - } +// private ActionPrompt actionPrompt; +// +// public void setActionPrompt(ActionPrompt actionPrompt) { +// this.actionPrompt = actionPrompt; +// } +// +// public ActionPrompt getActionPrompt() { +// return actionPrompt; +// } // ////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java index 5ed5151..492e3e0 100644 --- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java +++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionPromptProvider.java @@ -31,7 +31,16 @@ public interface ActionPromptProvider { } // else return null; - }} + } + public static ActionPromptProvider getFrom(Page page) { + if(page instanceof ActionPromptProvider) { + final ActionPromptProvider provider = (ActionPromptProvider) page; + return provider; + } + // else + return null; + } + } public ActionPrompt getActionPrompt(); } http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java index 9fc07ab..93957cf 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java @@ -39,6 +39,7 @@ import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento; import org.apache.isis.viewer.wicket.model.models.ActionExecutor; import org.apache.isis.viewer.wicket.model.models.ActionModel; 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.ScalarModel; import org.apache.isis.viewer.wicket.ui.ComponentType; import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow; @@ -66,7 +67,7 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> { private static final String ID_ACTION_PARAMETERS = "parameters"; private final ActionExecutor actionExecutor; - private final ActionPrompt actionPromptIfAny; + //private final ActionPrompt actionPromptIfAny; public ActionParametersFormPanel(final String id, final ActionModel model) { super(id, model); @@ -74,7 +75,7 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> { Ensure.ensureThatArg(model.getExecutor(), is(not(nullValue()))); this.actionExecutor = model.getExecutor(); - this.actionPromptIfAny = model.getActionPrompt(); + //this.actionPromptIfAny = model.getActionPrompt(); buildGui(); } @@ -152,7 +153,7 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> { target.add(form); } else { - if (actionPromptIfAny != null) { + //if (actionPromptIfAny != null) { final StringBuilder builder = new StringBuilder(); @@ -165,7 +166,7 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> { String buf = builder.toString(); target.appendJavaScript(buf); target.add(form); - } + //} } }; @@ -186,6 +187,7 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> { @Override public void onSubmit(final AjaxRequestTarget target, Form<?> form) { + final ActionPrompt actionPromptIfAny = ActionPromptProvider.Util.getFrom(ActionParametersFormPanel.this).getActionPrompt(); if(actionPromptIfAny != null) { actionPromptIfAny.closePrompt(target); } http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java index e1618eb..dd32ddb 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/AdditionalLinksPanel.java @@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.additionallinks; import java.util.List; import com.google.common.base.Strings; +import org.apache.wicket.MarkupContainer; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.html.WebMarkupContainer; @@ -48,7 +49,21 @@ public class AdditionalLinksPanel extends PanelAbstract<ListOfLinksModel> { private static final String ID_ADDITIONAL_LINK_ITEM = "additionalLinkItem"; private static final String ID_ADDITIONAL_LINK_FONT_AWESOME = "additionalLinkFontAwesome"; private static final String ID_ADDITIONAL_LINK_TITLE = "additionalLinkTitle"; - + + public static void addAdditionalLinks( + final MarkupContainer markupContainer, + final String id, + final List<LinkAndLabel> links) { + if(links.isEmpty()) { + Components.permanentlyHide(markupContainer, id); + return; + } + + final WebMarkupContainer additionalLinksPanel = new AdditionalLinksPanel(id, links); + markupContainer.addOrReplace(additionalLinksPanel); + } + + private List<LinkAndLabel> linkAndLabels; public AdditionalLinksPanel(final String id, final List<LinkAndLabel> links) { http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java index 5382a4f..993e699 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/additionallinks/EntityActionUtil.java @@ -23,6 +23,7 @@ import java.util.Comparator; import java.util.List; import com.google.common.base.Function; import com.google.common.collect.Lists; +import org.apache.wicket.Component; import org.apache.wicket.Session; import org.apache.isis.applib.annotation.Where; import org.apache.isis.applib.filter.Filter; @@ -38,38 +39,55 @@ 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.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.isis.core.runtime.system.DeploymentType; 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.ActionPromptProvider; import org.apache.isis.viewer.wicket.model.models.EntityModel; +import org.apache.isis.viewer.wicket.model.models.ScalarModel; import org.apache.isis.viewer.wicket.ui.components.entity.EntityActionLinkFactory; import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactory; public final class EntityActionUtil { - public static final String ID_ADDITIONAL_LINK = "additionalLink"; - private EntityActionUtil(){} private final static MemberOrderFacetComparator memberOrderFacetComparator = new MemberOrderFacetComparator(false); - - public static List<LinkAndLabel> entityActionsForAssociation( - final EntityModel entityModel, - final ObjectAssociation association, - final ActionPromptProvider actionPromptProvider, - final DeploymentType deploymentType) { - return entityActionsForAssociation( - entityModel, association, actionPromptProvider, deploymentType, ID_ADDITIONAL_LINK); + public static void appendAdditionalLinksForAssociation( + final ScalarModel scalarModel, + final Component owningComponent, + final DeploymentType deploymentType, + final String id, + final List<LinkAndLabel> entityActionLinks) { + + if (scalarModel.getKind() != ScalarModel.Kind.PROPERTY) { + return; + } + + final ObjectAdapterMemento parentMemento = scalarModel.getParentObjectAdapterMemento(); + final EntityModel parentEntityModel = new EntityModel(parentMemento); + //final ActionPromptProvider actionPromptProvider = ActionPromptProvider.Util.getFrom(owningComponent); + final ActionPromptProvider actionPromptProvider = null; + final OneToOneAssociation oneToOneAssociation = scalarModel.getPropertyMemento().getProperty(); + + appendAdditionalLinksForAssociation( + parentEntityModel, + oneToOneAssociation, + actionPromptProvider, + deploymentType, + id, + entityActionLinks); } - public static List<LinkAndLabel> entityActionsForAssociation( + public static void appendAdditionalLinksForAssociation( final EntityModel entityModel, final ObjectAssociation association, final ActionPromptProvider actionPromptProvider, final DeploymentType deploymentType, - final String linkId) { + final String linkId, + final List<LinkAndLabel> entityActionLinks) { final List<ObjectAction> associatedActions = Lists.newArrayList(); addActions(ActionType.USER, entityModel, association, associatedActions); @@ -91,12 +109,14 @@ public final class EntityActionUtil { final ActionLinkFactory linkFactory = new EntityActionLinkFactory(entityModel); final ObjectAdapterMemento adapterMemento = entityModel.getObjectAdapterMemento(); - return Lists.transform(associatedActions, new Function<ObjectAction, LinkAndLabel>(){ + final List<LinkAndLabel> linkAndLabels = Lists.transform(associatedActions, new Function<ObjectAction, LinkAndLabel>() { @Override public LinkAndLabel apply(ObjectAction objectAction) { return linkFactory.newLink(adapterMemento, objectAction, linkId, actionPromptProvider); - }}); + } + }); + entityActionLinks.addAll(linkAndLabels); } private static List<ObjectAction> addActions( http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html index 8ffda40..4921aeb 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.html @@ -27,7 +27,7 @@ <div class="collectionPanel collectionNameAndContentsComponentType"> <div class="collectionContents" wicket:id="collectionContents"></div> <span wicket:id="feedback"></span> - <div wicket:id="actionPromptModalWindow"></div> + <div xxwicket:id="actionPromptModalWindow"></div> </div> </wicket:panel> </body> http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java index 02e9ced..b6eb312 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java @@ -22,6 +22,7 @@ package org.apache.isis.viewer.wicket.ui.components.collection; import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel; import java.util.List; +import com.google.common.collect.Lists; import org.apache.wicket.Component; import org.apache.wicket.feedback.ComponentFeedbackMessageFilter; import org.apache.wicket.markup.html.basic.Label; @@ -29,11 +30,11 @@ import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation; import org.apache.isis.core.runtime.system.DeploymentType; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.viewer.wicket.model.links.LinkAndLabel; +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.model.models.EntityModel; import org.apache.isis.viewer.wicket.ui.ComponentType; -import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow; import org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil; import org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorPanel; import org.apache.isis.viewer.wicket.ui.components.collection.selector.CollectionSelectorProvider; @@ -65,17 +66,28 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implem return collectionModel; } - CollectionPanel(String id, EntityCollectionModel collectionModel) { + CollectionPanel( + final String id, + final EntityCollectionModel collectionModel) { this(id, collectionModel, new EntityModel(collectionModel.getParentObjectAdapterMemento()), collectionModel.getCollectionMemento().getCollection()); } - CollectionPanel(final String id, final EntityCollectionModel collectionModel, final EntityModel entityModel, final OneToManyAssociation otma) { + CollectionPanel( + final String id, + final EntityCollectionModel collectionModel, + final EntityModel entityModel, + final OneToManyAssociation otma) { super(id, collectionModel); - addActionPromptModalWindow(); - - List<LinkAndLabel> entityActions = EntityActionUtil.entityActionsForAssociation(entityModel, otma, this, getDeploymentType(), "additionalLink"); - collectionModel.addEntityActions(entityActions); + //addActionPromptModalWindow(); + + final List<LinkAndLabel> entityActionLinks = Lists.newArrayList(); + + //EntityActionUtil.appendAdditionalLinksForAssociation(entityModel, otma, this, getDeploymentType(), "additionalLink", entityActionLinks); +// EntityActionUtil.appendAdditionalLinksForAssociation(entityModel, otma, ActionPromptProvider.Util.getFrom(this), getDeploymentType(), "additionalLink", entityActionLinks); + EntityActionUtil.appendAdditionalLinksForAssociation(entityModel, otma, null, getDeploymentType(), "additionalLink", entityActionLinks); + + collectionModel.addEntityActions(entityActionLinks); } @Override @@ -112,15 +124,22 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implem //region > ActionPromptModalWindowProvider - private ActionPromptModalWindow actionPromptModalWindow; - public ActionPromptModalWindow getActionPrompt() { - return ActionPromptModalWindow.getActionPromptModalWindowIfEnabled(actionPromptModalWindow); + @Override + public ActionPrompt getActionPrompt() { + return ActionPromptProvider.Util.getFrom(this).getActionPrompt(); } - private void addActionPromptModalWindow() { - this.actionPromptModalWindow = ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); - addOrReplace(actionPromptModalWindow); - } +// private ActionPromptModalWindow actionPromptModalWindow; +// @Override +// public ActionPromptModalWindow getActionPrompt() { +// return ActionPromptModalWindow.getActionPromptModalWindowIfEnabled(actionPromptModalWindow); +// } +// +// private void addActionPromptModalWindow() { +// this.actionPromptModalWindow = ActionPromptModalWindow.newModalWindow(ID_ACTION_PROMPT_MODAL_WINDOW); +// addOrReplace(actionPromptModalWindow); +// } + //endregion http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css index 964a270..acff569 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css @@ -138,6 +138,7 @@ .collectionContentsAsAjaxTablePanel .table-responsive { overflow-x: auto; + padding-bottom: 10px; } .collectionContentsAsAjaxTablePanel table tbody tr:last-child td { http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java index 7fa2f99..ae5e862 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java @@ -23,6 +23,7 @@ import de.agilecoders.wicket.core.util.Attributes; import java.util.List; import java.util.Map; +import com.google.common.collect.Lists; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.Session; @@ -62,12 +63,17 @@ import org.apache.isis.core.metamodel.spec.feature.Contributed; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.isis.core.runtime.memento.Memento; +import org.apache.isis.core.runtime.system.DeploymentType; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager; +import org.apache.isis.viewer.wicket.model.links.LinkAndLabel; import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento; +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.ScalarModel; import org.apache.isis.viewer.wicket.ui.ComponentType; +import org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil; import org.apache.isis.viewer.wicket.ui.components.widgets.containers.UiHintPathSignificantWebMarkupContainer; import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.CancelHintRequired; import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour; @@ -77,7 +83,7 @@ import org.apache.isis.viewer.wicket.ui.panels.IFormSubmitterWithPreValidateHook import org.apache.isis.viewer.wicket.ui.util.Components; import org.apache.isis.viewer.wicket.ui.util.CssClassAppender; -public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> { +public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements ActionPromptProvider { private static final long serialVersionUID = 1L; @@ -237,21 +243,41 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> { return !groupNames.isEmpty(); } - private void addPropertyToForm(final EntityModel entityModel, + public static final String ID_ADDITIONAL_LINK = "additionalLink"; + + + private void addPropertyToForm( + final EntityModel entityModel, final ObjectAssociation association, final WebMarkupContainer container) { + + final List<LinkAndLabel> entityActions = Lists.newArrayList(); + final OneToOneAssociation otoa = (OneToOneAssociation) association; final PropertyMemento pm = new PropertyMemento(otoa); final ScalarModel scalarModel = entityModel.getPropertyModel(pm); final Component component = getComponentFactoryRegistry().addOrReplaceComponent(container, ID_PROPERTY, ComponentType.SCALAR_NAME_AND_VALUE, scalarModel); - + + EntityActionUtil.appendAdditionalLinksForAssociation( + entityModel, otoa, + this, + getDeploymentType(), + ID_ADDITIONAL_LINK, + entityActions); + if(!renderedFirstField) { component.add(new CssClassAppender("first-field")); renderedFirstField = true; } } +// protected void addAdditionalLinksTo(final MarkupContainer labelIfRegular) { +// // ... and add them to the panel +// AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ADDITIONAL_LINKS, entityActions); +// } + + private List<ObjectAssociation> visibleProperties(final ObjectAdapter adapter, final ObjectSpecification objSpec, Where where) { return objSpec.getAssociations(Contributed.INCLUDED, visiblePropertyFilter(adapter, where)); } @@ -268,6 +294,11 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> { Attributes.addClass(tag, "form-horizontal"); } + @Override + public ActionPrompt getActionPrompt() { + return ActionPromptProvider.Util.getFrom(this).getActionPrompt(); + } + abstract class AjaxButtonWithOnError extends AjaxButton { public AjaxButtonWithOnError(String id, IModel<String> model) { @@ -710,5 +741,8 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> { return getAuthenticationSession().getMessageBroker(); } + protected DeploymentType getDeploymentType() { + return IsisContext.getDeploymentType(); + } } http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html index ff9128a..b909597 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html @@ -28,7 +28,13 @@ <fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer"> <div class="panel panel-default"> <div class="panel-heading"> - <div class="panel-title" wicket:id="memberGroupName" >[group name]</div> + <span wicket:id="memberGroupName" class="panel-title">[group name]</span> + + <div class="additionalLinks pull-right"> + <div class="btn-group"> + <div xxwicket:id="additionalLinks"></div> + </div> + </div> </div> <div class="properties panel-body"> <div wicket:id="properties"> http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java index 6f6e6fe..b8acec6 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java @@ -30,7 +30,6 @@ import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.behavior.Behavior; import org.apache.wicket.feedback.ComponentFeedbackMessageFilter; -import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.LabeledWebMarkupContainer; import org.apache.wicket.markup.html.panel.Fragment; @@ -42,16 +41,12 @@ import org.apache.isis.core.metamodel.facets.propparam.labelat.LabelAtFacet; import org.apache.isis.core.runtime.system.DeploymentType; import org.apache.isis.core.runtime.system.context.IsisContext; 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.ActionPromptProvider; -import org.apache.isis.viewer.wicket.model.models.EntityModel; import org.apache.isis.viewer.wicket.model.models.EntityModel.RenderingHint; import org.apache.isis.viewer.wicket.model.models.ScalarModel; import org.apache.isis.viewer.wicket.ui.components.additionallinks.AdditionalLinksPanel; import org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil; import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.ScalarModelProvider; import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract; -import org.apache.isis.viewer.wicket.ui.util.Components; import org.apache.isis.viewer.wicket.ui.util.CssClassAppender; /** @@ -73,6 +68,8 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp protected static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact"; private static final String ID_ADDITIONAL_LINKS = "additionalLinks"; + public static final String ID_ADDITIONAL_LINK = "additionalLink"; + private static final String ID_FEEDBACK = "feedback"; public enum CompactType { @@ -294,30 +291,15 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp } protected void addAdditionalLinksTo(final MarkupContainer labelIfRegular) { - final List<LinkAndLabel> entityActions; - if(scalarModel.getKind() == ScalarModel.Kind.PROPERTY) { - final ObjectAdapterMemento parentMemento = scalarModel.getParentObjectAdapterMemento(); - final EntityModel parentEntityModel = new EntityModel(parentMemento); - final ActionPromptProvider actionPromptProvider = ActionPromptProvider.Util.getFrom(this); - entityActions = EntityActionUtil.entityActionsForAssociation( - parentEntityModel, scalarModel.getPropertyMemento().getProperty(), actionPromptProvider, getDeploymentType()); - } else { - entityActions = null; - } - addAdditionalLinks(labelIfRegular, entityActions); - } + // find the links... + final List<LinkAndLabel> entityActions = Lists.newArrayList(); - private void addAdditionalLinks(MarkupContainer markupContainer, List<LinkAndLabel> links) { - if(links == null || links.isEmpty()) { - Components.permanentlyHide(markupContainer, ID_ADDITIONAL_LINKS); - return; - } - links = Lists.newArrayList(links); // copy, to serialize any lazy evaluation - - final WebMarkupContainer views = new AdditionalLinksPanel(ID_ADDITIONAL_LINKS, links); - markupContainer.addOrReplace(views); + EntityActionUtil.appendAdditionalLinksForAssociation(this.scalarModel, this, getDeploymentType(), ID_ADDITIONAL_LINK, entityActions); + // ... and add them to the panel + AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ADDITIONAL_LINKS, entityActions); } + /** * Optional hook. */ http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java index dc41c4a..50c3478 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ActionLinkFactoryAbstract.java @@ -90,10 +90,12 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory { final ObjectAction action, final ActionPromptProvider actionPromptProvider) { - final ActionPrompt actionPrompt = actionPromptProvider.getActionPrompt(); - if(actionPrompt != null) { + //final ActionPrompt actionPrompt = actionPromptProvider.getActionPrompt(); + //if(actionPrompt != null) { + + if(true) { final ActionModel actionModel = ActionModel.create(objectAdapter, action); - actionModel.setActionPrompt(actionPrompt); + //actionModel.setActionPrompt(actionPrompt); final AjaxDeferredBehaviour ajaxDeferredBehaviour = determineDeferredBehaviour(action, actionModel); @@ -103,6 +105,7 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory { @Override public void onClick(AjaxRequestTarget target) { + final ActionPrompt actionPrompt = ActionPromptProvider.Util.getFrom(getPage()).getActionPrompt(); if(ajaxDeferredBehaviour != null) { ajaxDeferredBehaviour.initiate(target); } else { http://git-wip-us.apache.org/repos/asf/isis/blob/9de5ba8e/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css index c7143f3..612dbfa 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css @@ -67,7 +67,7 @@ padding-bottom: 5px; } .entityPropertiesPanel .collection.panel-body { - padding-bottom: 10px; + padding-bottom: 0px; } @@ -77,11 +77,6 @@ .collection.panel-body { padding-top: 0px; - /* - padding-left: 5px; - padding-right: 5px; - padding-bottom: 5px; - */ } .collectionPanel .well { @@ -117,7 +112,6 @@ div.label-left label.control-label { width: 30%; float: left; padding-top: 2px; - /*padding-left: 10px;*/ text-align: start; } @@ -212,9 +206,6 @@ div.label-left .choicesPlaceholder { padding-bottom: 10px; } - - - #body { padding-top: 20px; }
