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 2018/02/28 12:38:36 UTC
[isis] 05/06: ISIS-1882: extends DomainObjectList to contain
details of the action invocation.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch maint-1.16.2
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 804f103b0a1852a5a4cf20953e8142b3a0de9254
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Feb 28 12:34:22 2018 +0000
ISIS-1882: extends DomainObjectList to contain details of the action invocation.
---
.../isis/applib/domain/DomainObjectList.java | 59 +++++++++++++++++++++-
.../domainobjects/ObjectAndActionInvocation.java | 9 ++++
...entNegotiationServiceForRestfulObjectsV1_0.java | 49 ++++++++++++++++--
.../server/resources/DomainResourceHelper.java | 2 +-
4 files changed, 114 insertions(+), 5 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java b/core/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
index 9b7a41c..34e485b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
@@ -32,6 +32,7 @@ import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.DomainObjectLayout;
import org.apache.isis.applib.annotation.Editing;
import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Optionality;
import org.apache.isis.applib.annotation.Property;
import org.apache.isis.schema.utils.jaxbadapters.PersistentEntitiesAdapter;
@@ -39,6 +40,9 @@ import org.apache.isis.schema.utils.jaxbadapters.PersistentEntitiesAdapter;
@XmlType(
propOrder = {
"title",
+ "actionOwningType",
+ "actionId",
+ "actionArguments",
"elementObjectType",
"objects"
}
@@ -71,9 +75,17 @@ public class DomainObjectList {
//region > constructors
public DomainObjectList() {
}
- public DomainObjectList(final String title, final String elementObjectType) {
+ public DomainObjectList(
+ final String title,
+ final String elementObjectType,
+ final String actionOwningType,
+ final String actionId,
+ final String actionArguments) {
this.title = title;
this.elementObjectType = elementObjectType;
+ this.actionOwningType = actionOwningType;
+ this.actionId = actionId;
+ this.actionArguments = actionArguments;
}
//endregion
@@ -97,6 +109,51 @@ public class DomainObjectList {
}
//endregion
+ //region > property: actionOwningType
+ public static class ActionOwningTypeDomainEvent extends PropertyDomainEvent<String> { }
+
+ private String actionOwningType;
+
+ @Property(
+ domainEvent = ActionOwningTypeDomainEvent.class,
+ optionality = Optionality.OPTIONAL,
+ editing = Editing.DISABLED
+ )
+ public String getActionOwningType() {
+ return actionOwningType;
+ }
+ //endregion
+
+ //region > property: actionId
+ public static class ActionIdDomainEvent extends PropertyDomainEvent<String> { }
+
+ private String actionId;
+
+ @Property(
+ domainEvent = ActionIdDomainEvent.class,
+ optionality = Optionality.OPTIONAL,
+ editing = Editing.DISABLED
+ )
+ public String getActionId() {
+ return actionId;
+ }
+ //endregion
+
+ //region > property: actionArguments
+ public static class ActionArgumentsDomainEvent extends PropertyDomainEvent<String> { }
+
+ private String actionArguments;
+
+ @Property(
+ domainEvent = ActionArgumentsDomainEvent.class,
+ optionality = Optionality.OPTIONAL,
+ editing = Editing.DISABLED
+ )
+ public String getActionArguments() {
+ return actionArguments;
+ }
+ //endregion
+
//region > collection: objects
public static class ObjectsDomainEvent extends CollectionDomainEvent<Object> { }
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
index f009d3f..70b695e 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
@@ -18,6 +18,8 @@
*/
package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
+import java.util.List;
+
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
@@ -31,6 +33,7 @@ public class ObjectAndActionInvocation {
private final ObjectAdapter objectAdapter;
private final ObjectAction action;
private final JsonRepresentation arguments;
+ private final List<ObjectAdapter> argAdapters;
private final ObjectAdapter returnedAdapter;
private final ActionResultReprRenderer.SelfLink selfLink;
@@ -38,11 +41,13 @@ public class ObjectAndActionInvocation {
final ObjectAdapter objectAdapter,
final ObjectAction action,
final JsonRepresentation arguments,
+ final List<ObjectAdapter> argAdapters,
final ObjectAdapter returnedAdapter,
final ActionResultReprRenderer.SelfLink selfLink) {
this.objectAdapter = objectAdapter;
this.action = action;
this.arguments = arguments;
+ this.argAdapters = argAdapters;
this.returnedAdapter = returnedAdapter;
this.selfLink = selfLink;
}
@@ -59,6 +64,10 @@ public class ObjectAndActionInvocation {
return arguments;
}
+ public List<ObjectAdapter> getArgAdapters() {
+ return argAdapters;
+ }
+
public ObjectAdapter getReturnedAdapter() {
return returnedAdapter;
}
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
index 6a81810..90f35c8 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
@@ -36,6 +36,7 @@ import org.apache.isis.core.metamodel.adapter.version.Version;
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
@@ -214,7 +215,10 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
if(collectionAdapters != null) {
final ObjectSpecification elementSpec = elementSpecFrom(objectAndActionInvocation);
- final DomainObjectList list = domainObjectListFrom(collectionAdapters, elementSpec);
+ final String actionOwningType = actionOwningTypeFrom(objectAndActionInvocation);
+ final String actionId = actionIdFrom(objectAndActionInvocation);
+ final String actionArguments = actionArgumentsFrom(objectAndActionInvocation);
+ final DomainObjectList list = domainObjectListFrom(collectionAdapters, elementSpec, actionOwningType, actionId, actionArguments);
adapter = rendererContext.getPersistenceSession().adapterFor(list);
@@ -232,13 +236,52 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
return responseBuilder(responseBuilder);
}
+ private static String actionOwningTypeFrom(final ObjectAndActionInvocation objectAndActionInvocation) {
+ return objectAndActionInvocation.getAction().getOnType().getSpecId().asString();
+ }
+
+ private static String actionIdFrom(final ObjectAndActionInvocation objectAndActionInvocation) {
+ return objectAndActionInvocation.getAction().getId();
+ }
+
+ private static String actionArgumentsFrom(final ObjectAndActionInvocation objectAndActionInvocation) {
+ final StringBuilder buf = new StringBuilder();
+ final List<ObjectActionParameter> parameters = objectAndActionInvocation.getAction().getParameters();
+ final List<ObjectAdapter> argAdapters = objectAndActionInvocation.getArgAdapters();
+ if(parameters.size() == argAdapters.size()) {
+ for (int i = 0; i < parameters.size(); i++) {
+ final ObjectActionParameter param = parameters.get(i);
+ final ObjectAdapter argAdapter = argAdapters.get(i);
+
+ if(buf.length() > 0) {
+ buf.append(",");
+ }
+ buf.append(param.getName()).append("=");
+ buf.append(abbreviated(titleOf(argAdapter), 8));
+ }
+ }
+
+ return buf.toString();
+ }
+
+ private static String titleOf(final ObjectAdapter argumentAdapter) {
+ return argumentAdapter!=null?argumentAdapter.titleString(null):"";
+ }
+
+ private static String abbreviated(final String str, final int maxLength) {
+ return str.length() < maxLength ? str : str.substring(0, maxLength - 3) + "...";
+ }
+
private static DomainObjectList domainObjectListFrom(
final Collection<ObjectAdapter> collectionAdapters,
- final ObjectSpecification elementSpec) {
+ final ObjectSpecification elementSpec,
+ final String actionOwningType,
+ final String actionId,
+ final String actionArguments) {
final String title = titleFrom(collectionAdapters, elementSpec);
- final DomainObjectList list = new DomainObjectList(title, elementSpec.getSpecId().asString());
+ final DomainObjectList list = new DomainObjectList(title, elementSpec.getSpecId().asString(), actionOwningType, actionId, actionArguments);
for (final ObjectAdapter adapter : collectionAdapters) {
list.getObjects().add(adapter.getObject());
}
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
index da57bcd..40385c4 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
@@ -372,7 +372,7 @@ public class DomainResourceHelper {
InteractionInitiatedBy.USER);
final ObjectAndActionInvocation objectAndActionInvocation =
- new ObjectAndActionInvocation(objectAdapter, action, arguments, returnedAdapter, selfLink);
+ new ObjectAndActionInvocation(objectAdapter, action, arguments, argAdapters, returnedAdapter, selfLink);
// response
transactionService.flushTransaction();
--
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.