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:36 UTC
[2/2] isis git commit: ISIS-1603: working towards action prompts
inline
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,