You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2017/04/27 23:18:35 UTC
[1/2] isis git commit: ISIS-1603: working towards action prompts
inline
Repository: isis
Updated Branches:
refs/heads/ISIS-1603 ae298df4b -> 977ab2f22
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
index aa0b8d5..a5a53b6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
@@ -19,36 +19,19 @@
package org.apache.isis.viewer.wicket.ui.components.actions;
-import java.util.List;
-
-import com.google.common.base.Throwables;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.Model;
-import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.Command.Executor;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
-import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
import org.apache.isis.core.commons.authentication.MessageBroker;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
-import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
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.BookmarkableModel;
-import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.model.models.FormExecutor;
import org.apache.isis.viewer.wicket.ui.ComponentType;
import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponse;
-import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseHandlingStrategy;
import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseType;
-import org.apache.isis.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
/**
@@ -62,7 +45,7 @@ import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
* <p>
* TODO: on results panel, have a button to resubmit?
*/
-public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecutor {
+public class ActionPanel extends PanelAbstract<ActionModel> {
private static final long serialVersionUID = 1L;
@@ -70,7 +53,6 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
static final String ID_ACTION_NAME = "actionName";
- private ActionPrompt actionPrompt;
/**
* Gives a chance to hide the header part of this action panel, e.g. when shown in an action prompt
@@ -79,7 +61,7 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
public ActionPanel(final String id, final ActionModel actionModel) {
super(id, actionModel);
- actionModel.setFormExecutor(this);
+ actionModel.setFormExecutor(new ActionParametersFormExecutor(this, actionModel));
buildGui(getActionModel());
}
@@ -87,7 +69,9 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
* Sets the owning action prompt (modal window), if any.
*/
public void setActionPrompt(ActionPrompt actionPrompt) {
- this.actionPrompt = actionPrompt;
+ ActionParametersFormExecutor formExecutor =
+ (ActionParametersFormExecutor) getActionModel().getFormExecutor();
+ formExecutor.setActionPrompt(actionPrompt);
}
@Override
@@ -149,7 +133,6 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
@Override
protected void onConfigure() {
super.onConfigure();
-
setVisible(showHeader);
}
};
@@ -159,7 +142,7 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
private void buildGuiForNoParameters(final ActionModel actionModel) {
- boolean succeeded = executeAndProcessResults(null, null);
+ boolean succeeded = actionModel.getFormExecutor().executeAndProcessResults(null, null);
if(succeeded) {
// nothing to do
} else {
@@ -177,171 +160,10 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements FormExecu
}
- protected void bookmarkPage(BookmarkableModel<?> model) {
- getBookmarkedPagesModel().bookmarkPage(model);
- }
-
- private BookmarkedPagesModel getBookmarkedPagesModel() {
- BookmarkedPagesModelProvider application = (BookmarkedPagesModelProvider) getSession();
- return application.getBookmarkedPagesModel();
- }
-
-
- /**
- * @param feedbackForm - for feedback messages.
- * @return
- */
- @Override
- public boolean executeAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm) {
-
- permanentlyHide(ComponentType.ENTITY_ICON_AND_TITLE);
-
- ObjectAdapter targetAdapter = null;
- try {
- targetAdapter = getModel().getTargetAdapter();
-
- // no concurrency exception, so continue...
- return executeActionOnTargetAndProcessResults(target, feedbackForm);
-
- } catch (ConcurrencyException ex) {
-
- // second attempt should succeed, because the Oid would have
- // been updated in the attempt
- if (targetAdapter == null) {
- targetAdapter = getModel().getTargetAdapter();
- }
-
- // forward onto the target page with the concurrency exception
- ActionResultResponse resultResponse = ActionResultResponseType.OBJECT.interpretResult(this.getActionModel(), targetAdapter, ex);
- resultResponse.getHandlingStrategy().handleResults(this, resultResponse, getIsisSessionFactory());
-
- getMessageBroker().addWarning(ex.getMessage());
- return false;
- }
- }
-
- /**
- * @param target
- * @return whether to clear args or not (they aren't if there was a validation exception)
- */
- private boolean executeActionOnTargetAndProcessResults(
- final AjaxRequestTarget target,
- final Form<?> feedbackForm) {
-
- final ActionModel actionModel = getActionModel();
-
- // validate the action parameters (if any)
- final String invalidReasonIfAny = actionModel.getReasonInvalidIfAny();
-
- if (invalidReasonIfAny != null) {
- raiseWarning(target, feedbackForm, invalidReasonIfAny);
- return false;
- }
-
- final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
- final Command command;
- if (commandContext != null) {
- command = commandContext.getCommand();
- command.setExecutor(Executor.USER);
- } else {
- command = null;
- }
-
-
- // the object store could raise an exception (eg uniqueness constraint)
- // so we handle it here.
- try {
- // could be programmatic flushing, so must include in the try... finally
- final ObjectAdapter resultAdapter = getActionModel().executeHandlingApplicationExceptions();
-
- // flush any queued changes, so concurrency or violation exceptions (if any)
- // will be thrown here
- getTransactionManager().flushTransaction();
-
- ActionResultResponse resultResponse = ActionResultResponseType.determineAndInterpretResult(this.getActionModel(), target, resultAdapter);
- resultResponse.getHandlingStrategy().handleResults(this, resultResponse, getIsisSessionFactory());
-
- if (actionModel.isBookmarkable()) {
- bookmarkPage(actionModel);
- }
-
- if(actionPrompt != null) {
- actionPrompt.closePrompt(target);
- // cos will be reused next time, so mustn't cache em.
- actionModel.clearArguments();
- }
-
- return true;
-
- } catch (RuntimeException ex) {
-
- String message = recognizeException(ex, target, feedbackForm);
-
- if (message != null) {
- // no need to add to message broker, should already have been added...
-
- if(feedbackForm == null) {
- // forward on instead to void page
- // (otherwise, we'll have rendered an action parameters page
- // and so we'll be staying on that page)
- ActionResultResponseHandlingStrategy.REDIRECT_TO_VOID.handleResults(this, null, getIsisSessionFactory());
- }
-
- return false;
- }
-
- // not handled, so capture and propagate
- if(command != null) {
- command.setException(Throwables.getStackTraceAsString(ex));
- }
-
- throw ex;
- }
- }
-
-
- private String recognizeException(RuntimeException ex, AjaxRequestTarget target, Form<?> feedbackForm) {
-
- // REVIEW: this code is similar to stuff in EntityPropertiesForm, perhaps move up to superclass?
- // REVIEW: similar code also in WebRequestCycleForIsis; combine?
-
- // see if the exception is recognized as being a non-serious error
- // (nb: similar code in WebRequestCycleForIsis, as a fallback)
- List<ExceptionRecognizer> exceptionRecognizers = getServicesInjector().lookupServices(ExceptionRecognizer.class);
- String recognizedErrorIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
- if(recognizedErrorIfAny != null) {
-
- // recognized
- raiseWarning(target, feedbackForm, recognizedErrorIfAny);
-
- getTransactionManager().getCurrentTransaction().clearAbortCause();
-
- // there's no need to abort the transaction, it will have already been done
- // (in IsisTransactionManager#executeWithinTransaction(...)).
- }
- return recognizedErrorIfAny;
- }
- public void raiseWarning(AjaxRequestTarget target, Form<?> feedbackForm, String error) {
- if(target != null && feedbackForm != null) {
- target.add(feedbackForm);
- feedbackForm.error(error);
- } else {
- getMessageBroker().addWarning(error);
- }
- }
-
-
- ///////////////////////////////////////////////////////
- // Dependencies (from context)
- ///////////////////////////////////////////////////////
-
- protected IsisTransactionManager getTransactionManager() {
- return getPersistenceSession().getTransactionManager();
- }
-
- protected MessageBroker getMessageBroker() {
+ private MessageBroker getMessageBroker() {
return getAuthenticationSession().getMessageBroker();
}
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
index 5d33fea..30af5e9 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
@@ -46,8 +46,7 @@ public class ActionPanelFactory extends ComponentFactoryAbstract {
@Override
public Component createComponent(final String id, final IModel<?> model) {
final ActionModel actionModel = (ActionModel) model;
- final ActionPanel actionPanel = new ActionPanel(id, actionModel);
- return actionPanel;
+ return new ActionPanel(id, actionModel);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormExecutor.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormExecutor.java
new file mode 100644
index 0000000..d74cb1d
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormExecutor.java
@@ -0,0 +1,247 @@
+package org.apache.isis.viewer.wicket.ui.components.actions;
+
+import java.util.List;
+
+import com.google.common.base.Throwables;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.Session;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.Form;
+
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.command.CommandContext;
+import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
+import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.authentication.MessageBroker;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
+import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
+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.BookmarkableModel;
+import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
+import org.apache.isis.viewer.wicket.model.models.FormExecutor;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponse;
+import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseHandlingStrategy;
+import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseType;
+import org.apache.isis.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
+import org.apache.isis.viewer.wicket.ui.util.Components;
+
+public class ActionParametersFormExecutor implements FormExecutor {
+
+ private final MarkupContainer panel;
+ private final ActionModel actionModel;
+
+ public ActionParametersFormExecutor(final MarkupContainer panel, final ActionModel actionModel) {
+ this.panel = panel;
+ this.actionModel = actionModel;
+ }
+
+ private ActionPrompt actionPrompt;
+
+ /**
+ * @param feedbackForm - for feedback messages.
+ * @return
+ */
+ @Override
+ public boolean executeAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm) {
+
+ Components.permanentlyHide(panel, ComponentType.ENTITY_ICON_AND_TITLE);
+
+ ObjectAdapter targetAdapter = null;
+ try {
+ targetAdapter = actionModel.getTargetAdapter();
+
+ // no concurrency exception, so continue...
+ return executeActionOnTargetAndProcessResults(target, feedbackForm);
+
+ } catch (ConcurrencyException ex) {
+
+ // second attempt should succeed, because the Oid would have
+ // been updated in the attempt
+ if (targetAdapter == null) {
+ targetAdapter = actionModel.getTargetAdapter();
+ }
+
+ // forward onto the target page with the concurrency exception
+ ActionResultResponse resultResponse = ActionResultResponseType.OBJECT
+ .interpretResult(actionModel, targetAdapter, ex);
+ resultResponse.getHandlingStrategy().handleResults(panel, resultResponse, getIsisSessionFactory());
+
+ getMessageBroker().addWarning(ex.getMessage());
+ return false;
+ }
+ }
+
+ /**
+ * @param target
+ * @return whether to clear args or not (they aren't if there was a validation exception)
+ */
+ private boolean executeActionOnTargetAndProcessResults(
+ final AjaxRequestTarget target,
+ final Form<?> feedbackForm) {
+
+ // validate the action parameters (if any)
+ final String invalidReasonIfAny = actionModel.getReasonInvalidIfAny();
+
+ if (invalidReasonIfAny != null) {
+ raiseWarning(target, feedbackForm, invalidReasonIfAny);
+ return false;
+ }
+
+ final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
+ final Command command;
+ if (commandContext != null) {
+ command = commandContext.getCommand();
+ command.setExecutor(Command.Executor.USER);
+ } else {
+ command = null;
+ }
+
+ // the object store could raise an exception (eg uniqueness constraint)
+ // so we handle it here.
+ try {
+ // could be programmatic flushing, so must include in the try... finally
+ final ObjectAdapter resultAdapter = actionModel.executeHandlingApplicationExceptions();
+
+ // flush any queued changes, so concurrency or violation exceptions (if any)
+ // will be thrown here
+ getTransactionManager().flushTransaction();
+
+ ActionResultResponse resultResponse = ActionResultResponseType
+ .determineAndInterpretResult(actionModel, target, resultAdapter);
+ resultResponse.getHandlingStrategy().handleResults(panel, resultResponse, getIsisSessionFactory());
+
+ if (actionModel.isBookmarkable()) {
+ bookmarkPage(actionModel);
+ }
+
+ if (actionPrompt != null) {
+ actionPrompt.closePrompt(target);
+ // cos will be reused next time, so mustn't cache em.
+ actionModel.clearArguments();
+ }
+
+ return true;
+
+ } catch (RuntimeException ex) {
+
+ String message = recognizeException(ex, target, feedbackForm);
+
+ if (message != null) {
+ // no need to add to message broker, should already have been added...
+
+ if (feedbackForm == null) {
+ // forward on instead to void page
+ // (otherwise, we'll have rendered an action parameters page
+ // and so we'll be staying on that page)
+ ActionResultResponseHandlingStrategy.REDIRECT_TO_VOID
+ .handleResults(panel, null, getIsisSessionFactory());
+ }
+
+ return false;
+ }
+
+ // not handled, so capture and propagate
+ if (command != null) {
+ command.setException(Throwables.getStackTraceAsString(ex));
+ }
+
+ throw ex;
+ }
+ }
+
+ private String recognizeException(RuntimeException ex, AjaxRequestTarget target, Form<?> feedbackForm) {
+
+ // REVIEW: this code is similar to stuff in EntityPropertiesForm, perhaps move up to superclass?
+ // REVIEW: similar code also in WebRequestCycleForIsis; combine?
+
+ // see if the exception is recognized as being a non-serious error
+ // (nb: similar code in WebRequestCycleForIsis, as a fallback)
+ List<ExceptionRecognizer> exceptionRecognizers = getServicesInjector()
+ .lookupServices(ExceptionRecognizer.class);
+ String recognizedErrorIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
+ if (recognizedErrorIfAny != null) {
+
+ // recognized
+ raiseWarning(target, feedbackForm, recognizedErrorIfAny);
+
+ getTransactionManager().getCurrentTransaction().clearAbortCause();
+
+ // there's no need to abort the transaction, it will have already been done
+ // (in IsisTransactionManager#executeWithinTransaction(...)).
+ }
+ return recognizedErrorIfAny;
+ }
+
+ public void raiseWarning(AjaxRequestTarget target, Form<?> feedbackForm, String error) {
+ if (target != null && feedbackForm != null) {
+ target.add(feedbackForm);
+ feedbackForm.error(error);
+ } else {
+ getMessageBroker().addWarning(error);
+ }
+ }
+
+ void setActionPrompt(final ActionPrompt actionPrompt) {
+ this.actionPrompt = actionPrompt;
+ }
+
+ ///////////////////////////////////////////////////////
+ // Dependencies (from context)
+ ///////////////////////////////////////////////////////
+
+ protected void bookmarkPage(BookmarkableModel<?> model) {
+ getBookmarkedPagesModel().bookmarkPage(model);
+ }
+
+ // ///////////////////////////////////////////////////////////////////
+ // Dependencies (from IsisContext)
+ // ///////////////////////////////////////////////////////////////////
+
+ protected PersistenceSession getPersistenceSession() {
+ return getIsisSessionFactory().getCurrentSession().getPersistenceSession();
+ }
+
+ protected ServicesInjector getServicesInjector() {
+ return getIsisSessionFactory().getServicesInjector();
+ }
+
+ protected SpecificationLoader getSpecificationLoader() {
+ return getIsisSessionFactory().getSpecificationLoader();
+ }
+
+ private IsisTransactionManager getTransactionManager() {
+ return getPersistenceSession().getTransactionManager();
+ }
+
+ private MessageBroker getMessageBroker() {
+ return getAuthenticationSession().getMessageBroker();
+ }
+
+ protected IsisSessionFactory getIsisSessionFactory() {
+ return IsisContext.getSessionFactory();
+ }
+
+ protected AuthenticationSession getAuthenticationSession() {
+ return getIsisSessionFactory().getCurrentSession().getAuthenticationSession();
+ }
+
+ private BookmarkedPagesModel getBookmarkedPagesModel() {
+ BookmarkedPagesModelProvider application = (BookmarkedPagesModelProvider) getSession();
+ return application.getBookmarkedPagesModel();
+ }
+
+ Session getSession() {
+ return Session.get();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
index 636236d..c613ac9 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
@@ -27,13 +27,15 @@ import org.apache.wicket.Component;
import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
import org.apache.wicket.markup.html.basic.Label;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
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.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
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.scalars.ScalarPanelAbstract;
@@ -64,12 +66,13 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implem
final OneToManyAssociation otma = collectionModel.getCollectionMemento().getCollection(collectionModel.getSpecificationLoader());
final EntityModel entityModel = collectionModel.getEntityModel();
-
+ final ObjectAdapter adapter = entityModel.load(AdapterManager.ConcurrencyChecking.NO_CHECK);
+
final List<ObjectAction> associatedActions =
- EntityActionUtil.getObjectActionsForAssociation(entityModel, otma, getDeploymentCategory());
+ ObjectAction.Util.findForAssociation(adapter, otma, getDeploymentCategory());
entityActionLinks.addAll(
- EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(entityModel, associatedActions));
+ LinkAndLabelUtil.asActionLinksForAdditionalLinksPanel(entityModel, associatedActions, null));
collectionModel.addEntityActions(entityActionLinks);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
index 9dfe29b..c758b8d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
@@ -51,7 +51,7 @@ 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.actionmenu.entityactions.AdditionalLinksPanel;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
import org.apache.isis.viewer.wicket.ui.panels.HasDynamicallyVisibleContent;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
import org.apache.isis.viewer.wicket.ui.util.Components;
@@ -164,20 +164,20 @@ public class PropertyGroup extends PanelAbstract<EntityModel> implements HasDyna
final OneToOneAssociation otoa,
final WebMarkupContainer container,
final List<LinkAndLabel> entityActions) {
- final PropertyMemento pm = new PropertyMemento(otoa, entityModel.getIsisSessionFactory());
+ final PropertyMemento pm = new PropertyMemento(otoa, entityModel.getIsisSessionFactory());
final ScalarModel scalarModel = entityModel.getPropertyModel(pm);
getComponentFactoryRegistry()
.addOrReplaceComponent(container, ID_PROPERTY, ComponentType.SCALAR_NAME_AND_VALUE, scalarModel);
+ final ObjectAdapter adapter = entityModel.load(AdapterManager.ConcurrencyChecking.NO_CHECK);
final List<ObjectAction> associatedActions =
- EntityActionUtil.getObjectActionsForAssociation(entityModel, otoa, getDeploymentCategory());
+ ObjectAction.Util.findForAssociation(adapter, otoa, getDeploymentCategory());
entityActions.addAll(
- EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(entityModel, associatedActions));
+ LinkAndLabelUtil.asActionLinksForAdditionalLinksPanel(entityModel, associatedActions, null));
}
-
private boolean visible = false;
@Override
public boolean isVisible() {
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
index 02408e3..594d353 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
@@ -31,7 +31,7 @@ import org.apache.isis.viewer.wicket.ui.ComponentFactory;
import org.apache.isis.viewer.wicket.ui.ComponentType;
import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionLinkFactory;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
/**
@@ -44,12 +44,10 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> {
private static final String ID_ENTITY_ACTIONS = "entityActions";
- private final EntityActionLinkFactory linkFactory;
public EntityHeaderPanel(final String id, final EntityModel entityModel) {
super(id, entityModel);
- linkFactory = new EntityActionLinkFactory(getEntityModel());
}
/**
@@ -81,9 +79,11 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> {
final EntityModel model = getModel();
final ObjectAdapter adapter = model.getObject();
if (adapter != null) {
- final List<ObjectAction> topLevelActions = EntityActionUtil.getTopLevelActions(adapter, getDeploymentCategory());
+ final List<ObjectAction> topLevelActions = ObjectAction.Util
+ .findTopLevel(adapter, getDeploymentCategory());
- final List<LinkAndLabel> entityActionLinks = EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(model, topLevelActions);
+ final List<LinkAndLabel> entityActionLinks = LinkAndLabelUtil
+ .asActionLinksForAdditionalLinksPanel(model, topLevelActions, null);
AdditionalLinksPanel.addAdditionalLinks(this, ID_ENTITY_ACTIONS, entityActionLinks, AdditionalLinksPanel.Style.INLINE_LIST);
} else {
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
index 282fab7..928aed7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
@@ -18,11 +18,19 @@
*/
package org.apache.isis.viewer.wicket.ui.components.layout.bs3.col;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Lists;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.layout.component.ActionLayoutData;
import org.apache.isis.applib.layout.component.CollectionLayoutData;
@@ -40,7 +48,7 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.ui.ComponentFactory;
import org.apache.isis.viewer.wicket.ui.ComponentType;
import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
import org.apache.isis.viewer.wicket.ui.components.entity.fieldset.PropertyGroup;
import org.apache.isis.viewer.wicket.ui.components.layout.bs3.Util;
import org.apache.isis.viewer.wicket.ui.components.layout.bs3.row.Row;
@@ -49,11 +57,6 @@ import org.apache.isis.viewer.wicket.ui.panels.HasDynamicallyVisibleContent;
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;
-import org.apache.wicket.Component;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-
-import javax.annotation.Nullable;
-import java.util.List;
public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVisibleContent {
@@ -145,9 +148,9 @@ public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVis
})
.toList();
final List<LinkAndLabel> entityActionLinks =
- EntityActionUtil.asLinkAndLabelsForAdditionalLinksPanel(getModel(), visibleActions);
+ LinkAndLabelUtil.asActionLinksForAdditionalLinksPanel(getModel(), visibleActions, null);
- if(!entityActionLinks.isEmpty()) {
+ if (!entityActionLinks.isEmpty()) {
AdditionalLinksPanel.addAdditionalLinks(actionOwner, actionIdToUse, entityActionLinks, AdditionalLinksPanel.Style.INLINE_LIST);
visible = true;
} else {
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
index ac26554..7f96831 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditFormExecutor.java
@@ -33,7 +33,7 @@ import org.apache.isis.viewer.wicket.ui.util.Components;
public class PropertyEditFormExecutor implements FormExecutor {
- private MarkupContainer panel;
+ private final MarkupContainer panel;
private final ScalarModel scalarModel;
public PropertyEditFormExecutor(final MarkupContainer panel, final ScalarModel scalarModel) {
@@ -211,11 +211,11 @@ public class PropertyEditFormExecutor implements FormExecutor {
return getIsisSessionFactory().getSpecificationLoader();
}
- protected IsisTransactionManager getTransactionManager() {
+ private IsisTransactionManager getTransactionManager() {
return getPersistenceSession().getTransactionManager();
}
- protected MessageBroker getMessageBroker() {
+ private MessageBroker getMessageBroker() {
return getAuthenticationSession().getMessageBroker();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 50a6a36..d57dabe 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -51,7 +51,7 @@ 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.actionmenu.entityactions.AdditionalLinksPanel;
-import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
+import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormExecutor;
import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanel;
import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanel;
@@ -87,7 +87,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
/**
* as per {@link #scalarIfRegularInlinePromptForm}.
*/
- protected static final String ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM = "scalarIfRegularInlinePromptForm";
+ public static final String ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM = "scalarIfRegularInlinePromptForm";
private static final String ID_EDIT_PROPERTY = "editProperty";
@@ -232,22 +232,21 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
this.scalarIfRegular = createComponentForRegular();
scalarTypeContainer.addOrReplace(scalarIfCompact, scalarIfRegular);
- final List<LinkAndLabel> entityActions =
- EntityActionUtil.getEntityActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
- addPositioningCssTo(scalarIfRegular, entityActions);
- addEntityActionLinksBelowAndRight(scalarIfRegular, entityActions);
-
- addEditPropertyTo(scalarIfRegular);
- addFeedbackOnlyTo(scalarIfRegular, getScalarValueComponent());
-
final InlinePromptConfig inlinePromptConfig = getInlinePromptConfig();
-
if(inlinePromptConfig.isSupported()) {
this.scalarIfRegularInlinePromptForm = createInlinePromptForm();
scalarTypeContainer.addOrReplace(scalarIfRegularInlinePromptForm);
inlinePromptLink = createInlinePromptLink();
scalarIfRegular.add(inlinePromptLink);
+ // even if this particular scalarModel (property) is not configured for inline edits, it's possible that
+ // one of the associated actions is. Thus we set the prompt context
+ scalarModel.setInlinePromptContext(
+ new ScalarModel.InlinePromptContext(
+ getComponentForRegular(),
+ scalarIfRegularInlinePromptForm, scalarTypeContainer));
+
+ // and we configure the prompt link if _this_ property is configured for inline edits...
final PromptStyle promptStyle = this.scalarModel.getPromptStyle();
if(promptStyle == PromptStyle.INLINE) {
configureInlinePromptLinkCallback(inlinePromptLink);
@@ -266,8 +265,17 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
getScalarValueComponent().add(new AttributeAppender("tabindex", "-1"));
}
+ final List<LinkAndLabel> actionLinks =
+ LinkAndLabelUtil.asActionLinksForAssociation(this.scalarModel, getDeploymentCategory());
+ addPositioningCssTo(scalarIfRegular, actionLinks);
+ addActionLinksBelowAndRight(scalarIfRegular, actionLinks);
+
+ addEditPropertyTo(scalarIfRegular);
+ addFeedbackOnlyTo(scalarIfRegular, getScalarValueComponent());
+
+
getRendering().buildGui(this);
- addCssForMetaModel();
+ addCssFromMetaModel();
notifyOnChange(this);
addFormComponentBehaviourToUpdateSubscribers();
@@ -293,7 +301,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
}
- private void addCssForMetaModel() {
+ private void addCssFromMetaModel() {
final String cssForMetaModel = getModel().getLongName();
if (cssForMetaModel != null) {
add(new AttributeAppender("class", Model.of(cssForMetaModel), " "));
@@ -513,10 +521,6 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
final PropertyEditFormExecutor formExecutor =
new PropertyEditFormExecutor(ScalarPanelAbstract.this, scalarModel);
scalarModel.setFormExecutor(formExecutor);
- scalarModel.setInlinePromptContext(
- new ScalarModel.InlinePromptContext(
- getComponentForRegular(),
- scalarIfRegularInlinePromptForm));
switchFormForInlinePrompt(target);
@@ -600,14 +604,14 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
markupContainer.addOrReplace(new NotificationPanel(ID_FEEDBACK, component, new ComponentFeedbackMessageFilter(component)));
}
- private void addEntityActionLinksBelowAndRight(
+ private void addActionLinksBelowAndRight(
final MarkupContainer labelIfRegular,
- final List<LinkAndLabel> entityActions) {
- final List<LinkAndLabel> entityActionsBelow = LinkAndLabel.positioned(entityActions, ActionLayout.Position.BELOW);
- AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_BELOW, entityActionsBelow, AdditionalLinksPanel.Style.INLINE_LIST);
+ final List<LinkAndLabel> linkAndLabels) {
+ final List<LinkAndLabel> linksBelow = LinkAndLabel.positioned(linkAndLabels, ActionLayout.Position.BELOW);
+ AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_BELOW, linksBelow, AdditionalLinksPanel.Style.INLINE_LIST);
- final List<LinkAndLabel> entityActionsRight = LinkAndLabel.positioned(entityActions, ActionLayout.Position.RIGHT);
- AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_RIGHT, entityActionsRight, AdditionalLinksPanel.Style.DROPDOWN);
+ final List<LinkAndLabel> linksRight = LinkAndLabel.positioned(linkAndLabels, ActionLayout.Position.RIGHT);
+ AdditionalLinksPanel.addAdditionalLinks(labelIfRegular, ID_ASSOCIATED_ACTION_LINKS_RIGHT, linksRight, AdditionalLinksPanel.Style.DROPDOWN);
}
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
index 421ce86..e108ec5 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel;
import java.util.concurrent.Callable;
import org.apache.wicket.Application;
+import org.apache.wicket.MarkupContainer;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
import org.apache.wicket.ajax.markup.html.AjaxLink;
@@ -28,6 +29,7 @@ import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.request.IRequestHandler;
+import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -37,11 +39,14 @@ import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
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.app.registry.ComponentFactoryRegistry;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptHeaderPanel;
import org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel;
+import org.apache.isis.viewer.wicket.ui.components.actions.ActionParametersFormExecutor;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
import org.apache.isis.viewer.wicket.ui.panels.PanelUtil;
@@ -53,6 +58,12 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
private static final long serialVersionUID = 1L;
+ private final ScalarModel scalarModelForAssociationIfAny;
+
+ protected ActionLinkFactoryAbstract(final ScalarModel scalarModelForAssociationIfAny) {
+ this.scalarModelForAssociationIfAny = scalarModelForAssociationIfAny;
+ }
+
protected AbstractLink newLink(
final String linkId,
final ObjectAdapter objectAdapter,
@@ -65,112 +76,47 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
// TODO: see https://issues.apache.org/jira/browse/ISIS-1264 for further detail.
final AjaxDeferredBehaviour ajaxDeferredBehaviour = determineDeferredBehaviour(action, actionModel);
- // TODO: could remove some of the copy-n-paste between IndicatingAjaxLink and AjaxLink
final AbstractLink link = getSettings().isUseIndicatorForNoArgAction()
? new IndicatingAjaxLink<Object>(linkId) {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
-
- if (ajaxDeferredBehaviour != null) {
- ajaxDeferredBehaviour.initiate(target);
- }
- else {
- final ActionPromptProvider promptProvider = ActionPromptProvider.Util.getFrom(getPage());
- final ActionPrompt actionPrompt = promptProvider.getActionPrompt();
- final ActionPromptHeaderPanel titlePanel =
- PersistenceSession.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
- new Callable<ActionPromptHeaderPanel>() {
- @Override
- public ActionPromptHeaderPanel call() throws Exception {
- final String titleId = actionPrompt.getTitleId();
- return new ActionPromptHeaderPanel(titleId, actionModel);
- }
- });
- final ActionPanel actionPanel =
- (ActionPanel) getComponentFactoryRegistry().createComponent(
- ComponentType.ACTION_PROMPT, actionPrompt.getContentId(), actionModel);
-
- actionPanel.setShowHeader(false);
-
- actionPrompt.setTitle(titlePanel, target);
- actionPrompt.setPanel(actionPanel, target);
- actionPanel.setActionPrompt(actionPrompt);
- actionPrompt.showPrompt(target);
- }
+ ActionLinkFactoryAbstract.this.onClick(target, ajaxDeferredBehaviour, actionModel, this);
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
- if(getSettings().isPreventDoubleClickForNoArgAction()) {
- PanelUtil.disableBeforeReenableOnComplete(attributes, this);
- }
-
- // allow the event to bubble so the menu is hidden after click on an item
- attributes.setEventPropagation(AjaxRequestAttributes.EventPropagation.BUBBLE);
+ ActionLinkFactoryAbstract.this.updateAjaxAttributes(attributes, this);
}
@Override
protected void onComponentTag(ComponentTag tag) {
super.onComponentTag(tag);
-
Buttons.fixDisabledState(this, tag);
}
} :
new AjaxLink<Object>(linkId) {
- private static final long serialVersionUID = 1L;
-
- @Override
- public void onClick(AjaxRequestTarget target) {
-
- if (ajaxDeferredBehaviour != null) {
- ajaxDeferredBehaviour.initiate(target);
- }
- else {
- final ActionPromptProvider promptProvider = ActionPromptProvider.Util.getFrom(getPage());
- final ActionPrompt actionPrompt = promptProvider.getActionPrompt();
- final ActionPromptHeaderPanel titlePanel =
- PersistenceSession.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
- new Callable<ActionPromptHeaderPanel>() {
- @Override
- public ActionPromptHeaderPanel call() throws Exception {
- final String titleId = actionPrompt.getTitleId();
- return new ActionPromptHeaderPanel(titleId, actionModel);
- }
- });
- final ActionPanel actionPanel =
- (ActionPanel) getComponentFactoryRegistry().createComponent(
- ComponentType.ACTION_PROMPT, actionPrompt.getContentId(), actionModel);
-
- actionPanel.setShowHeader(false);
-
- actionPrompt.setTitle(titlePanel, target);
- actionPrompt.setPanel(actionPanel, target);
- actionPanel.setActionPrompt(actionPrompt);
- actionPrompt.showPrompt(target);
- }
- }
-
- @Override
- protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
- super.updateAjaxAttributes(attributes);
- if(getSettings().isPreventDoubleClickForNoArgAction()) {
- PanelUtil.disableBeforeReenableOnComplete(attributes, this);
- }
+ private static final long serialVersionUID = 1L;
- // allow the event to bubble so the menu is hidden after click on an item
- attributes.setEventPropagation(AjaxRequestAttributes.EventPropagation.BUBBLE);
- }
+ @Override
+ public void onClick(AjaxRequestTarget target) {
+ ActionLinkFactoryAbstract.this.onClick(target, ajaxDeferredBehaviour, actionModel, this);
+ }
- @Override
- protected void onComponentTag(ComponentTag tag) {
- super.onComponentTag(tag);
+ @Override
+ protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+ super.updateAjaxAttributes(attributes);
+ ActionLinkFactoryAbstract.this.updateAjaxAttributes(attributes, this);
+ }
- Buttons.fixDisabledState(this, tag);
- }
- };
+ @Override
+ protected void onComponentTag(ComponentTag tag) {
+ super.onComponentTag(tag);
+ Buttons.fixDisabledState(this, tag);
+ }
+ };
if (ajaxDeferredBehaviour != null) {
link.add(ajaxDeferredBehaviour);
@@ -238,15 +184,89 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
action.getReturnType().getCorrespondingClass() == org.apache.isis.applib.value.Clob.class);
}
+ private void onClick(
+ final AjaxRequestTarget target,
+ final AjaxDeferredBehaviour ajaxDeferredBehaviourIfAny,
+ final ActionModel actionModel,
+ final AjaxLink<Object> ajaxLink) {
+
+ if (ajaxDeferredBehaviourIfAny != null) {
+ ajaxDeferredBehaviourIfAny.initiate(target);
+ return;
+ }
+
+
+
+ ScalarModel.InlinePromptContext inlinePromptContext = determineInlinePromptContext();
+ PromptStyle promptStyle = actionModel.getPromptStyle();
+
+ if(inlinePromptContext == null || promptStyle != PromptStyle.INLINE) {
+ final ActionPromptProvider promptProvider = ActionPromptProvider.Util.getFrom(ajaxLink.getPage());
+ final ActionPrompt prompt = promptProvider.getActionPrompt();
+
+ final ActionPromptHeaderPanel titlePanel =
+ PersistenceSession.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
+ new Callable<ActionPromptHeaderPanel>() {
+ @Override
+ public ActionPromptHeaderPanel call() throws Exception {
+ final String titleId = prompt.getTitleId();
+ return new ActionPromptHeaderPanel(titleId, actionModel);
+ }
+ });
+ final ActionPanel actionPanel =
+ (ActionPanel) getComponentFactoryRegistry().createComponent(
+ ComponentType.ACTION_PROMPT, prompt.getContentId(), actionModel);
+
+ actionPanel.setShowHeader(false);
+
+ prompt.setTitle(titlePanel, target);
+ prompt.setPanel(actionPanel, target);
+ actionPanel.setActionPrompt(prompt);
+ prompt.showPrompt(target);
+
+ } else {
+
+ MarkupContainer scalarTypeContainer = inlinePromptContext.getScalarTypeContainer();
+ actionModel.setFormExecutor(new ActionParametersFormExecutor(scalarTypeContainer, actionModel));
+ actionModel.setInlinePromptContext(inlinePromptContext);
+ getComponentFactoryRegistry().addOrReplaceComponent(scalarTypeContainer,
+ ScalarPanelAbstract.ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM, ComponentType.PARAMETERS, actionModel);
+
+ // TODO: probably needs to be like the switchXxx, and update the parent of the placeholder editform
+ inlinePromptContext.getScalarIfRegular().setVisible(false);
+ inlinePromptContext.getScalarIfRegularInlinePromptForm().setVisible(true);
+
+ target.add(scalarTypeContainer);
+ }
+
+ }
+
+ private void updateAjaxAttributes(
+ final AjaxRequestAttributes attributes,
+ final AjaxLink<Object> ajaxLink) {
+ if(getSettings().isPreventDoubleClickForNoArgAction()) {
+ PanelUtil.disableBeforeReenableOnComplete(attributes, ajaxLink);
+ }
+
+ // allow the event to bubble so the menu is hidden after click on an item
+ attributes.setEventPropagation(AjaxRequestAttributes.EventPropagation.BUBBLE);
+ }
+
protected LinkAndLabel newLinkAndLabel(
final ObjectAdapter objectAdapter,
final ObjectAction objectAction,
final AbstractLink link,
final String disabledReasonIfAny) {
- final boolean blobOrClob = ObjectAction.Utils.returnsBlobOrClob(objectAction);
+ final boolean whetherReturnsBlobOrClob = ObjectAction.Util.returnsBlobOrClob(objectAction);
+
+ return LinkAndLabel.newLinkAndLabel(objectAdapter, objectAction, link, disabledReasonIfAny, whetherReturnsBlobOrClob);
+ }
- return LinkAndLabel.newLinkAndLabel(objectAdapter, objectAction, link, disabledReasonIfAny, blobOrClob);
+ private ScalarModel.InlinePromptContext determineInlinePromptContext() {
+ return scalarModelForAssociationIfAny != null
+ ? scalarModelForAssociationIfAny.getInlinePromptContext()
+ : null;
}
[2/2] isis git commit: ISIS-1603: working towards action prompts
inline
Posted by da...@apache.org.
ISIS-1603: working towards action prompts inline
seemingly mostly there, but need to do the cancel and then some more thorough testing
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/977ab2f2
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/977ab2f2
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/977ab2f2
Branch: refs/heads/ISIS-1603
Commit: 977ab2f229f80aa246ca516717c27bc67cd35cbb
Parents: ae298df
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Fri Apr 28 00:18:29 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Apr 28 00:18:29 2017 +0100
----------------------------------------------------------------------
.../applib/layout/component/component.xsd | 4 +
.../isis/applib/annotation/ActionLayout.java | 6 +
.../isis/applib/annotation/PromptStyle.java | 5 +
.../isis/applib/annotation/PropertyLayout.java | 10 +-
.../layout/component/ActionLayoutData.java | 12 +
.../layout/component/PropertyLayoutData.java | 25 +-
.../layout/ActionLayoutFacetFactory.java | 14 +-
.../layout/HiddenFacetForActionLayoutXml.java | 52 ----
.../actions/layout/HiddenFacetForActionXml.java | 52 ++++
...omptStyleFacetForActionLayoutAnnotation.java | 90 +++++++
.../layout/PromptStyleFacetForActionXml.java | 49 ++++
...tStyleFacetOnActionFromLayoutProperties.java | 57 +++++
.../PromptStyleFacetForPropertyLayoutXml.java | 49 ----
.../PromptStyleFacetForPropertyXml.java | 49 ++++
...tyleFacetOnPropertyFromLayoutProperties.java | 4 +-
.../layoutmetadata/ActionLayoutFacetRepr.java | 3 +-
.../layoutmetadata/PropertyLayoutFacetRepr.java | 2 +-
.../grid/GridSystemServiceAbstract.java | 12 +-
.../metamodel/spec/feature/ObjectAction.java | 90 ++++++-
.../metamodel/spec/feature/ObjectActions.java | 4 +-
.../viewer/wicket/model/links/LinkAndLabel.java | 27 +-
.../viewer/wicket/model/models/ActionModel.java | 49 +++-
.../wicket/model/models/FormExecutor.java | 3 -
.../wicket/model/models/HasFormExecutor.java | 5 -
.../viewer/wicket/model/models/ScalarModel.java | 29 ++-
.../entityactions/AdditionalLinksPanel.java | 1 -
.../entityactions/EntityActionLinkFactory.java | 4 +-
.../entityactions/EntityActionUtil.java | 189 --------------
.../entityactions/LinkAndLabelUtil.java | 97 ++++++++
.../actionmenu/serviceactions/CssMenuItem.java | 10 +-
.../ServiceActionLinkFactory.java | 7 +-
.../ui/components/actions/ActionPanel.java | 194 +--------------
.../components/actions/ActionPanelFactory.java | 3 +-
.../actions/ActionParametersFormExecutor.java | 247 +++++++++++++++++++
.../components/collection/CollectionPanel.java | 11 +-
.../entity/fieldset/PropertyGroup.java | 10 +-
.../entity/header/EntityHeaderPanel.java | 10 +-
.../ui/components/layout/bs3/col/Col.java | 19 +-
.../property/PropertyEditFormExecutor.java | 6 +-
.../components/scalars/ScalarPanelAbstract.java | 50 ++--
.../linkandlabel/ActionLinkFactoryAbstract.java | 190 +++++++-------
41 files changed, 1060 insertions(+), 690 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd b/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
index 9d9749b..a83d9dd 100644
--- a/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
+++ b/adocs/documentation/src/main/asciidoc/applib/layout/component/component.xsd
@@ -37,6 +37,10 @@
<xs:attribute name="hidden" type="tns:where"/>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="namedEscaped" type="xs:boolean"/>
+
+ <!-- 1.15.0-SNAPSHOT -->
+ <xs:attribute name="promptStyle" type="tns:promptStyle"/>
+
<xs:attribute name="position" type="tns:position"/>
</xs:complexType>
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
index 73982e9..3c91af5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
@@ -124,6 +124,12 @@ public @interface ActionLayout {
PANEL_DROPDOWN
}
+ /**
+ * How this parameters for this action are prompted, either {@link PromptStyle#DIALOG dialog} or {@link PromptStyle#INLINE inline}.
+ */
+ PromptStyle promptStyle() default PromptStyle.AS_CONFIGURED;
+
+
// //////////////////////////////////////
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
index bcfd188..46f4012 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PromptStyle.java
@@ -18,9 +18,14 @@
*/
package org.apache.isis.applib.annotation;
+import javax.xml.bind.annotation.XmlType;
+
/**
* How prompting for new values (property edit) should be performed
*/
+@XmlType(
+ namespace = "http://isis.apache.org/applib/layout/component"
+)
public enum PromptStyle {
/**
* Edit the property according to the default edit style policy configured in <tt>isis.properties</tt>.
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
index 1594a76..dae0a20 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
@@ -43,11 +43,6 @@ public @interface PropertyLayout {
/**
- * How the properties of this domain object are be edited, either {@link PromptStyle#DIALOG dialog} or {@link PromptStyle#INLINE inline}.
- */
- PromptStyle promptStyle() default PromptStyle.AS_CONFIGURED;
-
- /**
* Indicates where in the UI the property should <i>not</i>not be visible.
*/
Where hidden() default Where.NOT_SPECIFIED;
@@ -77,6 +72,11 @@ public @interface PropertyLayout {
boolean namedEscaped() default true;
/**
+ * How the properties of this domain object are be edited, either {@link PromptStyle#DIALOG dialog} or {@link PromptStyle#INLINE inline}.
+ */
+ PromptStyle promptStyle() default PromptStyle.AS_CONFIGURED;
+
+ /**
* For date properties (and parameters) only, instructs the viewer that the date should be rendered as one day
* prior to the actually stored date.
*
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
index a88229a..b1a19cc 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/component/ActionLayoutData.java
@@ -27,6 +27,7 @@ import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.applib.annotation.Where;
/**
@@ -207,6 +208,17 @@ public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwn
}
+ private PromptStyle promptStyle;
+
+ @XmlAttribute(required = false)
+ public PromptStyle getPromptStyle() {
+ return promptStyle;
+ }
+
+ public void setPromptStyle(PromptStyle promptStyle) {
+ this.promptStyle = promptStyle;
+ }
+
private ActionLayoutDataOwner owner;
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
index 0485ffd..9388740 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
@@ -107,18 +107,6 @@ public class PropertyLayoutData
}
- private PromptStyle promptStyle;
-
- @XmlAttribute(required = false)
- public PromptStyle getPromptStyle() {
- return promptStyle;
- }
-
- public void setPromptStyle(PromptStyle promptStyle) {
- this.promptStyle = promptStyle;
- }
-
-
private Where hidden;
@Override
@@ -185,6 +173,19 @@ public class PropertyLayoutData
}
+ private PromptStyle promptStyle;
+
+ @XmlAttribute(required = false)
+ public PromptStyle getPromptStyle() {
+ return promptStyle;
+ }
+
+ public void setPromptStyle(PromptStyle promptStyle) {
+ this.promptStyle = promptStyle;
+ }
+
+
+
private Boolean renderedAsDayBefore;
@XmlAttribute(required = false)
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
index 6b2251e..1f71b77 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
@@ -39,6 +39,7 @@ import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -52,8 +53,8 @@ public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements Co
public void process(final ProcessMethodContext processMethodContext) {
final FacetHolder holder = processMethodContext.getFacetHolder();
-
Properties properties = processMethodContext.metadataProperties("actionLayout");
+
if(properties == null) {
// alternate key
properties = processMethodContext.metadataProperties("layout");
@@ -108,6 +109,16 @@ public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements Co
}
FacetUtil.addFacet(namedFacet);
+ // promptStyle
+ PromptStyleFacet promptStyleFacet = PromptStyleFacetOnActionFromLayoutProperties
+ .create(properties, holder);
+ if(promptStyleFacet == null) {
+ promptStyleFacet = PromptStyleFacetForActionLayoutAnnotation
+ .create(actionLayout, getConfiguration(), holder);
+ }
+
+ FacetUtil.addFacet(promptStyleFacet);
+
// position
ActionPositionFacet actionPositionFacet = ActionPositionFacetOnActionFromLayoutProperties.create(properties, holder);
@@ -121,7 +132,6 @@ public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements Co
// contributing
-
if (isContributingServiceOrMixinObject(processMethodContext)) {
NotContributedFacet notContributedFacet = NotContributedFacetForLayoutProperties.create(properties, holder);
if(notContributedFacet == null) {
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
deleted file mode 100644
index b4114fb..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionLayoutXml.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.actions.layout;
-
-import org.apache.isis.applib.annotation.When;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.layout.component.ActionLayoutData;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
-import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
-
-public class HiddenFacetForActionLayoutXml extends HiddenFacetAbstract {
-
- public static HiddenFacet create(final ActionLayoutData actionLayout, final FacetHolder holder) {
- if (actionLayout == null) {
- return null;
- }
- final Where where = actionLayout.getHidden();
- return where != null && where != Where.NOT_SPECIFIED ? new HiddenFacetForActionLayoutXml(where, holder) : null;
- }
-
- private HiddenFacetForActionLayoutXml(final Where where, final FacetHolder holder) {
- super(When.ALWAYS, where, holder);
- }
-
- @Override
- public String hiddenReason(final ObjectAdapter targetAdapter, final Where whereContext) {
- if(!where().includes(whereContext)) {
- return null;
- }
- return "Hidden on " + where().getFriendlyName();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java
new file mode 100644
index 0000000..433a859
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/HiddenFacetForActionXml.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.actions.layout;
+
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.layout.component.ActionLayoutData;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
+
+public class HiddenFacetForActionXml extends HiddenFacetAbstract {
+
+ public static HiddenFacet create(final ActionLayoutData actionLayout, final FacetHolder holder) {
+ if (actionLayout == null) {
+ return null;
+ }
+ final Where where = actionLayout.getHidden();
+ return where != null && where != Where.NOT_SPECIFIED ? new HiddenFacetForActionXml(where, holder) : null;
+ }
+
+ private HiddenFacetForActionXml(final Where where, final FacetHolder holder) {
+ super(When.ALWAYS, where, holder);
+ }
+
+ @Override
+ public String hiddenReason(final ObjectAdapter targetAdapter, final Where whereContext) {
+ if(!where().includes(whereContext)) {
+ return null;
+ }
+ return "Hidden on " + where().getFriendlyName();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
new file mode 100644
index 0000000..1361aa0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.actions.layout;
+
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleConfiguration;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBack;
+
+public class PromptStyleFacetForActionLayoutAnnotation extends PromptStyleFacetAbstract {
+
+ private final PromptStyle promptStyle;
+
+ public PromptStyleFacetForActionLayoutAnnotation(final PromptStyle promptStyle, final FacetHolder holder) {
+ super( holder );
+ this.promptStyle = promptStyle;
+ }
+
+ public static PromptStyleFacet create(
+ final ActionLayout actionLayout,
+ final IsisConfiguration configuration,
+ final FacetHolder holder) {
+
+ PromptStyle promptStyle = actionLayout != null? actionLayout.promptStyle() : null;
+
+ if(promptStyle == null) {
+ if (holder.containsDoOpFacet(PromptStyleFacet.class)) {
+ // do not replace
+ return null;
+ }
+
+ return new PromptStyleFacetFallBack(holder);
+ } else {
+
+ switch (promptStyle) {
+ case DIALOG:
+ case INLINE:
+ return new PromptStyleFacetForActionLayoutAnnotation(promptStyle, holder);
+
+ case AS_CONFIGURED:
+
+ // do not replace
+ if (holder.containsDoOpFacet(PromptStyleFacet.class)) {
+ return null;
+ }
+
+ promptStyle = PromptStyleConfiguration.parse(configuration);
+ return new PromptStyleFacetAsConfigured(promptStyle, holder);
+
+ default:
+
+ // do not replace
+ if (holder.containsDoOpFacet(PromptStyleFacet.class)) {
+ return null;
+ }
+
+ promptStyle = PromptStyleConfiguration.parse(configuration);
+ return new PromptStyleFacetAsConfigured(promptStyle, holder);
+ }
+ }
+
+ }
+
+ @Override
+ public PromptStyle value() {
+ return promptStyle;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java
new file mode 100644
index 0000000..7fde483
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionXml.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.actions.layout;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.layout.component.ActionLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+
+public class PromptStyleFacetForActionXml extends PromptStyleFacetAbstract {
+
+ public static PromptStyleFacet create(ActionLayoutData actionLayout, FacetHolder holder) {
+ if(actionLayout == null) {
+ return null;
+ }
+ final PromptStyle promptStyle = actionLayout.getPromptStyle();
+ return promptStyle != null ? new PromptStyleFacetForActionXml(promptStyle, holder) : null;
+ }
+
+ private final PromptStyle promptStyle;
+
+ private PromptStyleFacetForActionXml(PromptStyle promptStyle, FacetHolder holder) {
+ super(holder);
+ this.promptStyle = promptStyle;
+ }
+
+ @Override
+ public PromptStyle value() {
+ return promptStyle;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetOnActionFromLayoutProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetOnActionFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetOnActionFromLayoutProperties.java
new file mode 100644
index 0000000..2b5b5ba
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetOnActionFromLayoutProperties.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.actions.layout;
+
+import java.util.Properties;
+
+import com.google.common.base.Strings;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+
+public class PromptStyleFacetOnActionFromLayoutProperties extends PromptStyleFacetAbstract {
+
+ private final PromptStyle promptStyle;
+
+ public static PromptStyleFacet create(Properties properties, FacetHolder holder) {
+ final PromptStyle promptStyle = promptStyle(properties);
+ return promptStyle != null? new PromptStyleFacetOnActionFromLayoutProperties(promptStyle, holder): null;
+ }
+
+ private PromptStyleFacetOnActionFromLayoutProperties(PromptStyle promptStyle, FacetHolder holder) {
+ super(holder);
+ this.promptStyle = promptStyle;
+ }
+
+ private static PromptStyle promptStyle(Properties properties) {
+ if(properties == null) {
+ return null;
+ }
+ String propertyPromptStyle = Strings.emptyToNull(properties.getProperty("promptStyle"));
+ return PromptStyle.valueOf(propertyPromptStyle);
+ }
+
+ @Override
+ public PromptStyle value() {
+ return promptStyle;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
deleted file mode 100644
index 5df1ffd..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutXml.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.properties.propertylayout;
-
-import org.apache.isis.applib.annotation.PromptStyle;
-import org.apache.isis.applib.layout.component.PropertyLayoutData;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
-import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
-
-public class PromptStyleFacetForPropertyLayoutXml extends PromptStyleFacetAbstract {
-
- public static PromptStyleFacet create(PropertyLayoutData propertyLayout, FacetHolder holder) {
- if(propertyLayout == null) {
- return null;
- }
- final PromptStyle promptStyle = propertyLayout.getPromptStyle();
- return promptStyle != null ? new PromptStyleFacetForPropertyLayoutXml(promptStyle, holder) : null;
- }
-
- private final PromptStyle promptStyle;
-
- private PromptStyleFacetForPropertyLayoutXml(PromptStyle promptStyle, FacetHolder holder) {
- super(holder);
- this.promptStyle = promptStyle;
- }
-
- @Override
- public PromptStyle value() {
- return promptStyle;
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java
new file mode 100644
index 0000000..bde7a3d
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyXml.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.properties.propertylayout;
+
+import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.layout.component.PropertyLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAbstract;
+
+public class PromptStyleFacetForPropertyXml extends PromptStyleFacetAbstract {
+
+ public static PromptStyleFacet create(PropertyLayoutData propertyLayout, FacetHolder holder) {
+ if(propertyLayout == null) {
+ return null;
+ }
+ final PromptStyle promptStyle = propertyLayout.getPromptStyle();
+ return promptStyle != null ? new PromptStyleFacetForPropertyXml(promptStyle, holder) : null;
+ }
+
+ private final PromptStyle promptStyle;
+
+ private PromptStyleFacetForPropertyXml(PromptStyle promptStyle, FacetHolder holder) {
+ super(holder);
+ this.promptStyle = promptStyle;
+ }
+
+ @Override
+ public PromptStyle value() {
+ return promptStyle;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
index 0f11ff4..3620f5a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetOnPropertyFromLayoutProperties.java
@@ -46,8 +46,8 @@ public class PromptStyleFacetOnPropertyFromLayoutProperties extends PromptStyleF
if(properties == null) {
return null;
}
- String propertyEditStyle = Strings.emptyToNull(properties.getProperty("promptStyle"));
- return PromptStyle.valueOf(propertyEditStyle);
+ String propertyPromptStyle = Strings.emptyToNull(properties.getProperty("promptStyle"));
+ return PromptStyle.valueOf(propertyPromptStyle);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
index e8612f8..cb6d134 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
@@ -16,10 +16,10 @@
*/
package org.apache.isis.core.metamodel.layoutmetadata;
-
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.BookmarkPolicy;
import org.apache.isis.applib.annotation.Contributed;
+import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.applib.annotation.Where;
public class ActionLayoutFacetRepr {
@@ -31,6 +31,7 @@ public class ActionLayoutFacetRepr {
public Where hidden;
public String named;
public boolean namedEscaped = true;
+ public PromptStyle promptStyle;
public ActionLayout.Position position;
public Contributed contributed;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
index e96f744..479692d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/PropertyLayoutFacetRepr.java
@@ -25,12 +25,12 @@ public class PropertyLayoutFacetRepr {
public String cssClass;
public String describedAs;
- public PromptStyle editStyle;
public Where hidden;
public LabelPosition labelPosition;
public int multiLine;
public String named;
public boolean namedEscaped = true;
+ public PromptStyle promptStyle;
public boolean renderedAsDayBefore;
public int typicalLength;
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
index 2a3db3a..344d1f1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -61,8 +61,9 @@ import org.apache.isis.core.metamodel.facets.actions.layout.BookmarkPolicyFacetF
import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFaFacetForActionXml;
import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFacetForActionXml;
import org.apache.isis.core.metamodel.facets.actions.layout.DescribedAsFacetForActionXml;
-import org.apache.isis.core.metamodel.facets.actions.layout.HiddenFacetForActionLayoutXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.HiddenFacetForActionXml;
import org.apache.isis.core.metamodel.facets.actions.layout.NamedFacetForActionXml;
+import org.apache.isis.core.metamodel.facets.actions.layout.PromptStyleFacetForActionXml;
import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
@@ -99,7 +100,7 @@ import org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFac
import org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyXml;
import org.apache.isis.core.metamodel.facets.properties.propertylayout.MultiLineFacetForPropertyXml;
import org.apache.isis.core.metamodel.facets.properties.propertylayout.NamedFacetForPropertyXml;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.PromptStyleFacetForPropertyLayoutXml;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.PromptStyleFacetForPropertyXml;
import org.apache.isis.core.metamodel.facets.properties.propertylayout.RenderedAdjustedFacetForPropertyXml;
import org.apache.isis.core.metamodel.facets.properties.propertylayout.TypicalLengthFacetForPropertyXml;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -293,8 +294,9 @@ public abstract class GridSystemServiceAbstract<G extends Grid> implements GridS
FacetUtil.addOrReplaceFacet(CssClassFacetForActionXml.create(actionLayoutData, objectAction));
FacetUtil.addOrReplaceFacet(CssClassFaFacetForActionXml.create(actionLayoutData, objectAction));
FacetUtil.addOrReplaceFacet(DescribedAsFacetForActionXml.create(actionLayoutData, objectAction));
- FacetUtil.addOrReplaceFacet(HiddenFacetForActionLayoutXml.create(actionLayoutData, objectAction));
+ FacetUtil.addOrReplaceFacet(HiddenFacetForActionXml.create(actionLayoutData, objectAction));
FacetUtil.addOrReplaceFacet(NamedFacetForActionXml.create(actionLayoutData, objectAction));
+ FacetUtil.addOrReplaceFacet(PromptStyleFacetForActionXml.create(actionLayoutData, objectAction));
}
@Override
@@ -306,13 +308,13 @@ public abstract class GridSystemServiceAbstract<G extends Grid> implements GridS
FacetUtil.addOrReplaceFacet(CssClassFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
FacetUtil.addOrReplaceFacet(DescribedAsFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
- FacetUtil.addOrReplaceFacet(
- PromptStyleFacetForPropertyLayoutXml.create(propertyLayoutData, oneToOneAssociation));
FacetUtil.addOrReplaceFacet(HiddenFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
FacetUtil.addOrReplaceFacet(LabelAtFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
FacetUtil.addOrReplaceFacet(MultiLineFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
FacetUtil.addOrReplaceFacet(NamedFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
FacetUtil.addOrReplaceFacet(
+ PromptStyleFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
+ FacetUtil.addOrReplaceFacet(
RenderedAdjustedFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
FacetUtil.addOrReplaceFacet(TypicalLengthFacetForPropertyXml.create(propertyLayoutData, oneToOneAssociation));
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index d5838b1..13f12ec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -17,6 +17,8 @@
package org.apache.isis.core.metamodel.spec.feature;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import com.google.common.base.Predicate;
@@ -35,6 +37,7 @@ import org.apache.isis.core.commons.lang.StringFunctions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetFilters;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
@@ -47,6 +50,7 @@ import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPositi
import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
import org.apache.isis.core.metamodel.facets.object.wizard.WizardFacet;
import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
+import org.apache.isis.core.metamodel.layout.memberorderfacet.MemberOrderFacetComparator;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -197,10 +201,12 @@ public interface ObjectAction extends ObjectMember {
//endregion
- //region > Utils
- public static final class Utils {
+ //region > Util
+ public static final class Util {
- private Utils() {
+ final static MemberOrderFacetComparator memberOrderFacetComparator = new MemberOrderFacetComparator(false);
+
+ private Util() {
}
public static String nameFor(final ObjectAction objAction) {
@@ -216,15 +222,14 @@ public interface ObjectAction extends ObjectMember {
}
public static boolean returnsBlobOrClob(final ObjectAction objectAction) {
- boolean blobOrClob = false;
final ObjectSpecification returnType = objectAction.getReturnType();
if (returnType != null) {
Class<?> cls = returnType.getCorrespondingClass();
if (Blob.class.isAssignableFrom(cls) || Clob.class.isAssignableFrom(cls)) {
- blobOrClob = true;
+ return true;
}
}
- return blobOrClob;
+ return false;
}
public static String actionIdentifierFor(final ObjectAction action) {
@@ -260,6 +265,79 @@ public interface ObjectAction extends ObjectMember {
return cssClassFacet != null ? cssClassFacet.cssClass(objectAdapter) : null;
}
+
+ public static List<ObjectAction> findTopLevel(
+ final ObjectAdapter adapter,
+ final DeploymentCategory deploymentCategory) {
+ final List<ObjectAction> topLevelActions = Lists.newArrayList();
+
+ addTopLevelActions(adapter, ActionType.USER, topLevelActions);
+ if(deploymentCategory.isPrototyping()) {
+ addTopLevelActions(adapter, ActionType.PROTOTYPE, topLevelActions);
+ }
+ return topLevelActions;
+ }
+
+ static void addTopLevelActions(
+ final ObjectAdapter adapter,
+ final ActionType actionType,
+ final List<ObjectAction> topLevelActions) {
+
+ final ObjectSpecification adapterSpec = adapter.getSpecification();
+
+ @SuppressWarnings({ "unchecked", "deprecation" })
+ Filter<ObjectAction> filter = org.apache.isis.applib.filter.Filters.and(
+ Filters.memberOrderNotAssociationOf(adapterSpec),
+ Filters.dynamicallyVisible(adapter, InteractionInitiatedBy.USER, Where.ANYWHERE),
+ Filters.notBulkOnly(),
+ Filters.excludeWizardActions(adapterSpec));
+
+ final List<ObjectAction> userActions = adapterSpec.getObjectActions(actionType, Contributed.INCLUDED, filter);
+ topLevelActions.addAll(userActions);
+ }
+
+
+ public static List<ObjectAction> findForAssociation(
+ final ObjectAdapter adapter,
+ final ObjectAssociation association, final DeploymentCategory deploymentCategory) {
+ final List<ObjectAction> associatedActions = Lists.newArrayList();
+
+ addActions(adapter, ActionType.USER, association, associatedActions);
+ if(deploymentCategory.isPrototyping()) {
+ addActions(adapter, ActionType.PROTOTYPE, association, associatedActions);
+ }
+
+ Collections.sort(associatedActions, new Comparator<ObjectAction>() {
+
+ @Override
+ public int compare(ObjectAction o1, ObjectAction o2) {
+ final MemberOrderFacet m1 = o1.getFacet(MemberOrderFacet.class);
+ final MemberOrderFacet m2 = o2.getFacet(MemberOrderFacet.class);
+ return memberOrderFacetComparator.compare(m1, m2);
+ }
+ });
+ return associatedActions;
+ }
+
+ static List<ObjectAction> addActions(
+ final ObjectAdapter adapter,
+ final ActionType type,
+ final ObjectAssociation association, final List<ObjectAction> associatedActions) {
+ final ObjectSpecification objectSpecification = adapter.getSpecification();
+
+ @SuppressWarnings({ "unchecked", "deprecation" })
+ Filter<ObjectAction> filter = org.apache.isis.applib.filter.Filters.and(
+ Filters.memberOrderOf(association),
+ Filters.dynamicallyVisible(adapter, InteractionInitiatedBy.USER, Where.ANYWHERE),
+ Filters.notBulkOnly(),
+ Filters.excludeWizardActions(objectSpecification));
+
+ final List<ObjectAction> userActions = objectSpecification.getObjectActions(type, Contributed.INCLUDED, filter);
+ associatedActions.addAll(userActions);
+ return userActions;
+ }
+
+
}
//endregion
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
index c167879..0dcf8a1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActions.java
@@ -31,11 +31,11 @@ public final class ObjectActions {
}
/**
- * @deprecated - use {@link ObjectAction.Utils#nameFor(ObjectAction)}
+ * @deprecated - use {@link ObjectAction.Util#nameFor(ObjectAction)}
*/
@Deprecated
public static String nameFor(final ObjectAction action) {
- return ObjectAction.Utils.nameFor(action);
+ return ObjectAction.Util.nameFor(action);
}
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
index 25f5705..acb49e6 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
@@ -20,10 +20,13 @@ package org.apache.isis.viewer.wicket.model.links;
import java.io.Serializable;
import java.util.List;
+
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+
import org.apache.wicket.markup.html.link.AbstractLink;
+
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.ActionSemantics;
import org.apache.isis.applib.annotation.SemanticsOf;
@@ -48,15 +51,15 @@ public class LinkAndLabel implements Serializable {
final String disabledReasonIfAny,
final boolean blobOrClob) {
- final String name = ObjectAction.Utils.nameFor(objectAction);
+ final String name = ObjectAction.Util.nameFor(objectAction);
final boolean explorationOrPrototype = objectAction.isPrototype();
- final String actionIdentifier = ObjectAction.Utils.actionIdentifierFor(objectAction);
- final String description = ObjectAction.Utils.descriptionOf(objectAction);
- final String cssClass = ObjectAction.Utils.cssClassFor(objectAction, objectAdapter);
- final String cssClassFa = ObjectAction.Utils.cssClassFaFor(objectAction);
- final CssClassFaPosition cssClassFaPosition = ObjectAction.Utils.cssClassFaPositionFor(objectAction);
- final ActionLayout.Position actionLayoutPosition = ObjectAction.Utils.actionLayoutPositionOf(objectAction);
+ final String actionIdentifier = ObjectAction.Util.actionIdentifierFor(objectAction);
+ final String description = ObjectAction.Util.descriptionOf(objectAction);
+ final String cssClass = ObjectAction.Util.cssClassFor(objectAction, objectAdapter);
+ final String cssClassFa = ObjectAction.Util.cssClassFaFor(objectAction);
+ final CssClassFaPosition cssClassFaPosition = ObjectAction.Util.cssClassFaPositionFor(objectAction);
+ final ActionLayout.Position actionLayoutPosition = ObjectAction.Util.actionLayoutPositionOf(objectAction);
final ActionSemantics.Of semantics = objectAction.getSemantics();
return new LinkAndLabel(
@@ -80,9 +83,6 @@ public class LinkAndLabel implements Serializable {
public boolean isNoParameters() {
return this == NO_PARAMETERS;
}
- public boolean isTakesParameters() {
- return this == TAKES_PARAMETERS;
- }
}
private final AbstractLink link;
@@ -190,4 +190,11 @@ public class LinkAndLabel implements Serializable {
};
}
}
+
+ public static class Util {
+ private Util(){}
+
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 245d31a..1c6e18f 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -60,8 +60,11 @@ import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -89,6 +92,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements Has
private static final String NULL_ARG = "$nullArg$";
private static final Pattern KEY_VALUE_PATTERN = Pattern.compile("([^=]+)=(.+)");
+
/**
* Whether we are obtaining arguments (eg in a dialog), or displaying the
* results
@@ -680,17 +684,6 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements Has
private FormExecutor formExecutor;
- @Override
- public PromptStyle getPromptStyle() {
- // for now, at least..
- return PromptStyle.DIALOG;
- }
-
- @Override
- public ScalarModel.InlinePromptContext getInlinePromptContext() {
- throw new IllegalStateException("should not be called when getPromptStyle() returns DIALOG");
- }
-
/**
* A hint passed from one Wicket UI component to another.
*
@@ -706,6 +699,40 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements Has
//////////////////////////////////////////////////
+
+ @Override
+ public PromptStyle getPromptStyle() {
+ final PromptStyleFacet facet = getFacet(PromptStyleFacet.class);
+ if(facet == null) {
+ return null;
+ }
+ return facet.value() == PromptStyle.INLINE
+ ? PromptStyle.INLINE
+ : PromptStyle.DIALOG;
+ }
+
+ public <T extends Facet> T getFacet(final Class<T> facetType) {
+ final FacetHolder facetHolder = getActionMemento().getAction(getSpecificationLoader());
+ return facetHolder.getFacet(facetType);
+ }
+
+
+ //////////////////////////////////////////////////
+
+ private ScalarModel.InlinePromptContext inlinePromptContext;
+
+ /**
+ * Further hint, to support inline prompts...
+ */
+ public ScalarModel.InlinePromptContext getInlinePromptContext() {
+ return inlinePromptContext;
+ }
+
+ public void setInlinePromptContext(ScalarModel.InlinePromptContext inlinePromptContext) {
+ this.inlinePromptContext = inlinePromptContext;
+ }
+
+ //////////////////////////////////////////////////
// Dependencies (from context)
//////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
index a04c1d1..2f33bbc 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
@@ -24,8 +24,6 @@ import java.io.Serializable;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.form.Form;
-import org.apache.isis.applib.annotation.PromptStyle;
-
/**
* Passed through the {@link ActionModel} or {@link ScalarModel}, allowing
* two different Wicket UI components (eg owning <code>ActionPanel</code> and
@@ -40,5 +38,4 @@ import org.apache.isis.applib.annotation.PromptStyle;
public interface FormExecutor extends Serializable {
boolean executeAndProcessResults(AjaxRequestTarget target, Form<?> feedbackForm);
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
index 7c2c933..128d7f8 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/HasFormExecutor.java
@@ -24,10 +24,5 @@ import org.apache.isis.applib.annotation.PromptStyle;
public interface HasFormExecutor {
PromptStyle getPromptStyle();
- /**
- * Only applicable if {@link #getPromptStyle()} is {@link PromptStyle#INLINE}.
- */
- ScalarModel.InlinePromptContext getInlinePromptContext();
-
FormExecutor getFormExecutor();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 6958feb..a847c79 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -30,6 +30,7 @@ import com.google.common.collect.FluentIterable;
import com.google.common.collect.Lists;
import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.isis.applib.annotation.PromptStyle;
@@ -1036,7 +1037,7 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasFormExe
private InlinePromptContext inlinePromptContext;
/**
- * Further hint, to support inline edits...
+ * Further hint, to support inline prompts...
*/
public InlinePromptContext getInlinePromptContext() {
return inlinePromptContext;
@@ -1046,24 +1047,40 @@ public class ScalarModel extends EntityModel implements LinksProvider,HasFormExe
this.inlinePromptContext = inlinePromptContext;
}
+ // //////////////////////////////////////
+
public static class InlinePromptContext implements Serializable {
private static final long serialVersionUID = 1L;
private final Component scalarIfRegular;
- private final WebMarkupContainer scalarIfRegularInlineEditForm;
+ private final WebMarkupContainer scalarIfRegularInlinePromptForm;
+ private final MarkupContainer scalarTypeContainer;
public InlinePromptContext(
final Component scalarIfRegular,
- final WebMarkupContainer scalarIfRegularInlineEditForm) {
+ final WebMarkupContainer scalarIfRegularInlinePromptForm,
+ final MarkupContainer scalarTypeContainer) {
this.scalarIfRegular = scalarIfRegular;
- this.scalarIfRegularInlineEditForm = scalarIfRegularInlineEditForm;
+ this.scalarIfRegularInlinePromptForm = scalarIfRegularInlinePromptForm;
+ this.scalarTypeContainer = scalarTypeContainer;
}
- public void onCancel() {
+ public Component getScalarIfRegular() {
+ return scalarIfRegular;
+ }
+ public WebMarkupContainer getScalarIfRegularInlinePromptForm() {
+ return scalarIfRegularInlinePromptForm;
+ }
+
+ public void onCancel() {
scalarIfRegular.setVisible(true);
- scalarIfRegularInlineEditForm.setVisible(false);
+ scalarIfRegularInlinePromptForm.setVisible(false);
+ }
+
+ public MarkupContainer getScalarTypeContainer() {
+ return scalarTypeContainer;
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
index 27c0722..be3e492 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
@@ -124,7 +124,6 @@ public class AdditionalLinksPanel extends PanelAbstract<ListOfLinksModel> {
addConfirmationDialogIfAreYouSureSemantics(link, semantics);
}
-
final String cssClass = linkAndLabel.getCssClass();
CssClassAppender.appendCssClassTo(link, cssClass);
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
index 1da1815..000d4cf 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
@@ -30,6 +30,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
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.EntityModel;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.ActionLinkFactoryAbstract;
public final class EntityActionLinkFactory extends ActionLinkFactoryAbstract {
@@ -39,7 +40,8 @@ public final class EntityActionLinkFactory extends ActionLinkFactoryAbstract {
@SuppressWarnings("unused")
private final EntityModel entityModel;
- public EntityActionLinkFactory(final EntityModel entityModel) {
+ public EntityActionLinkFactory(final EntityModel entityModel, final ScalarModel scalarModelForAssociationIfAny) {
+ super(scalarModelForAssociationIfAny);
this.entityModel = entityModel;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java
deleted file mode 100644
index 9b4627f..0000000
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionUtil.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicates;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.filter.Filter;
-import org.apache.isis.applib.filter.Filters;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
-import org.apache.isis.core.metamodel.layout.memberorderfacet.MemberOrderFacetComparator;
-import org.apache.isis.core.metamodel.spec.ActionType;
-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.EntityModel;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.ActionLinkFactory;
-
-public final class EntityActionUtil {
-
- private EntityActionUtil(){}
-
- private final static MemberOrderFacetComparator memberOrderFacetComparator = new MemberOrderFacetComparator(false);
-
- public static List<LinkAndLabel> getEntityActionLinksForAssociation(
- final ScalarModel scalarModel,
- final DeploymentCategory deploymentCategory) {
- final List<LinkAndLabel> entityActions = Lists.newArrayList();
-
- if (scalarModel.getKind() != ScalarModel.Kind.PROPERTY) {
- return entityActions;
- } else {
- final ObjectAdapterMemento parentMemento = scalarModel.getParentObjectAdapterMemento();
- final EntityModel parentEntityModel = new EntityModel(parentMemento);
- final OneToOneAssociation oneToOneAssociation = scalarModel.getPropertyMemento().getProperty(
- scalarModel.getSpecificationLoader());
-
- final List<ObjectAction> associatedActions = getObjectActionsForAssociation(parentEntityModel, oneToOneAssociation,
- deploymentCategory);
-
- entityActions.addAll(asLinkAndLabelsForAdditionalLinksPanel(parentEntityModel, associatedActions));
- return entityActions;
- }
- }
-
- public static List<ObjectAction> getObjectActionsForAssociation(
- final EntityModel entityModel,
- final ObjectAssociation association,
- final DeploymentType deploymentType) {
- return getObjectActionsForAssociation(entityModel, association, deploymentType.getDeploymentCategory());
- }
-
- public static List<ObjectAction> getObjectActionsForAssociation(
- final EntityModel entityModel,
- final ObjectAssociation association, final DeploymentCategory deploymentCategory) {
- final List<ObjectAction> associatedActions = Lists.newArrayList();
-
- addActions(ActionType.USER, entityModel, association, associatedActions);
- if(deploymentCategory.isPrototyping()) {
- addActions(ActionType.PROTOTYPE, entityModel, association, associatedActions);
- }
-
- Collections.sort(associatedActions, new Comparator<ObjectAction>() {
-
- @Override
- public int compare(ObjectAction o1, ObjectAction o2) {
- final MemberOrderFacet m1 = o1.getFacet(MemberOrderFacet.class);
- final MemberOrderFacet m2 = o2.getFacet(MemberOrderFacet.class);
- return memberOrderFacetComparator.compare(m1, m2);
- }
- });
- return associatedActions;
- }
-
- /**
- * Converts an {@link org.apache.isis.viewer.wicket.model.models.EntityModel} and a (subset of its) {@link org.apache.isis.core.metamodel.spec.feature.ObjectAction}s into a
- * list of {@link org.apache.isis.viewer.wicket.model.links.LinkAndLabel}s intended to be apassed
- * to the {@link AdditionalLinksPanel}.
- *
- * <p>
- * The length of the list returned may smaller than the inbound actions; any null links
- * (for invisible actions) will be discarded.
- * </p>
- */
- public static List<LinkAndLabel> asLinkAndLabelsForAdditionalLinksPanel(
- final EntityModel entityModel,
- final List<ObjectAction> actions) {
-
- final String linkId = AdditionalLinksPanel.ID_ADDITIONAL_LINK;
- final ActionLinkFactory linkFactory = new EntityActionLinkFactory(entityModel);
-
- final ObjectAdapterMemento adapterMemento = entityModel.getObjectAdapterMemento();
- return FluentIterable.from(actions)
- .transform(new Function<ObjectAction, LinkAndLabel>() {
-
- @Override
- public LinkAndLabel apply(ObjectAction objectAction) {
- return linkFactory.newLink(linkId, adapterMemento, objectAction);
- }
- })
- .filter(Predicates.<LinkAndLabel>notNull())
- .toList();
- }
-
- private static List<ObjectAction> addActions(
- final ActionType type,
- final EntityModel entityModel,
- final ObjectAssociation association,
- final List<ObjectAction> associatedActions) {
- final ObjectSpecification adapterSpec = entityModel.getTypeOfSpecification();
- final ObjectAdapter adapter = entityModel.load(ConcurrencyChecking.NO_CHECK);
-
- final ObjectSpecification objectSpecification = entityModel.getTypeOfSpecification();
- @SuppressWarnings({ "unchecked", "deprecation" })
- Filter<ObjectAction> filter = Filters.and(
- ObjectAction.Filters.memberOrderOf(association),
- ObjectAction.Filters.dynamicallyVisible(adapter, InteractionInitiatedBy.USER, Where.ANYWHERE),
- ObjectAction.Filters.notBulkOnly(),
- ObjectAction.Filters.excludeWizardActions(objectSpecification));
-
- final List<ObjectAction> userActions = adapterSpec.getObjectActions(type, Contributed.INCLUDED, filter);
- associatedActions.addAll(userActions);
- return userActions;
- }
-
-
- public static void addTopLevelActions(
- final ObjectAdapter adapter,
- final ActionType actionType,
- final List<ObjectAction> topLevelActions) {
-
- final ObjectSpecification adapterSpec = adapter.getSpecification();
-
- @SuppressWarnings({ "unchecked", "deprecation" })
- Filter<ObjectAction> filter = Filters.and(
- ObjectAction.Filters.memberOrderNotAssociationOf(adapterSpec),
- ObjectAction.Filters.dynamicallyVisible(adapter, InteractionInitiatedBy.USER, Where.ANYWHERE),
- ObjectAction.Filters.notBulkOnly(),
- ObjectAction.Filters.excludeWizardActions(adapterSpec));
-
- final List<ObjectAction> userActions = adapterSpec.getObjectActions(actionType, Contributed.INCLUDED, filter);
- topLevelActions.addAll(userActions);
- }
-
- public static List<ObjectAction> getTopLevelActions(
- final ObjectAdapter adapter,
- final DeploymentCategory deploymentCategory) {
- final List<ObjectAction> topLevelActions = Lists.newArrayList();
-
- addTopLevelActions(adapter, ActionType.USER, topLevelActions);
- if(deploymentCategory.isPrototyping()) {
- addTopLevelActions(adapter, ActionType.PROTOTYPE, topLevelActions);
- }
- return topLevelActions;
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java
new file mode 100644
index 0000000..e983335
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelUtil.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.FluentIterable;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+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.EntityModel;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.ActionLinkFactory;
+
+public final class LinkAndLabelUtil {
+
+ private LinkAndLabelUtil(){}
+
+ public static List<LinkAndLabel> asActionLinksForAssociation(
+ final ScalarModel scalarModelForAssociation,
+ final DeploymentCategory deploymentCategory) {
+
+ if (scalarModelForAssociation.getKind() != ScalarModel.Kind.PROPERTY) {
+ return Collections.emptyList();
+ }
+
+ final ObjectAdapterMemento parentMemento = scalarModelForAssociation.getParentObjectAdapterMemento();
+ final EntityModel parentEntityModel = new EntityModel(parentMemento);
+
+ final ObjectAdapter parentAdapter = parentEntityModel.load(AdapterManager.ConcurrencyChecking.NO_CHECK);
+
+ final OneToOneAssociation oneToOneAssociation =
+ scalarModelForAssociation.getPropertyMemento().getProperty(scalarModelForAssociation.getSpecificationLoader());
+
+ final List<ObjectAction> associatedActions =
+ ObjectAction.Util.findForAssociation(parentAdapter, oneToOneAssociation, deploymentCategory);
+
+ return asActionLinksForAdditionalLinksPanel(parentEntityModel, associatedActions,
+ scalarModelForAssociation);
+ }
+
+ /**
+ * Converts an {@link org.apache.isis.viewer.wicket.model.models.EntityModel} and a (subset of its) {@link org.apache.isis.core.metamodel.spec.feature.ObjectAction}s into a
+ * list of {@link org.apache.isis.viewer.wicket.model.links.LinkAndLabel}s intended to be passed
+ * to the {@link AdditionalLinksPanel}.
+ *
+ * <p>
+ * The length of the list returned may smaller than the inbound actions; any null links
+ * (for invisible actions) will be discarded.
+ * </p>
+ */
+ public static List<LinkAndLabel> asActionLinksForAdditionalLinksPanel(
+ final EntityModel parentEntityModel,
+ final List<ObjectAction> actions,
+ final ScalarModel scalarModelForAssociationIfAny) {
+
+ final ActionLinkFactory linkFactory = new EntityActionLinkFactory(parentEntityModel, scalarModelForAssociationIfAny);
+ final String linkId = AdditionalLinksPanel.ID_ADDITIONAL_LINK;
+
+ final ObjectAdapterMemento adapterMemento = parentEntityModel.getObjectAdapterMemento();
+ return FluentIterable.from(actions)
+ .transform(new Function<ObjectAction, LinkAndLabel>() {
+
+ @Override
+ public LinkAndLabel apply(ObjectAction objectAction) {
+ return linkFactory.newLink(linkId, adapterMemento, objectAction);
+ }
+ })
+ .filter(Predicates.<LinkAndLabel>notNull())
+ .toList();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
index 3b7e44e..998c366 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
@@ -345,13 +345,13 @@ class CssMenuItem implements Serializable {
.link(link)
.describedAs(descriptionIfAny)
.enabled(reasonDisabledIfAny)
- .returnsBlobOrClob(ObjectAction.Utils.returnsBlobOrClob(objectAction))
+ .returnsBlobOrClob(ObjectAction.Util.returnsBlobOrClob(objectAction))
.prototyping(objectAction.isPrototype())
.requiresSeparator(separator)
- .withActionIdentifier(ObjectAction.Utils.actionIdentifierFor(objectAction))
- .withCssClass(ObjectAction.Utils.cssClassFor(objectAction, adapter))
- .withCssClassFa(ObjectAction.Utils.cssClassFaFor(objectAction))
- .withCssClassFaPosition(ObjectAction.Utils.cssClassFaPositionFor(objectAction));
+ .withActionIdentifier(ObjectAction.Util.actionIdentifierFor(objectAction))
+ .withCssClass(ObjectAction.Util.cssClassFor(objectAction, adapter))
+ .withCssClassFa(ObjectAction.Util.cssClassFaFor(objectAction))
+ .withCssClassFaPosition(ObjectAction.Util.cssClassFaPositionFor(objectAction));
return builder;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/977ab2f2/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
index 8385137..89657be 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
@@ -36,9 +36,14 @@ class ServiceActionLinkFactory extends ActionLinkFactoryAbstract {
private static final long serialVersionUID = 1L;
+ ServiceActionLinkFactory() {
+ super(null);
+ }
+
@Override
public LinkAndLabel newLink(
- final String linkId, final ObjectAdapterMemento adapterMemento,
+ final String linkId,
+ final ObjectAdapterMemento adapterMemento,
final ObjectAction action) {
ObjectAdapter objectAdapter = adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK,