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 2011/09/20 09:45:18 UTC
svn commit: r1173015 - in /incubator/isis/trunk/framework:
core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/
viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/
Author: danhaywood
Date: Tue Sep 20 07:45:18 2011
New Revision: 1173015
URL: http://svn.apache.org/viewvc?rev=1173015&view=rev
Log:
ISIS-109: object action parameter invoke args now represented as a map rather than as a list
Added:
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionSemantics.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionSemantics.java
Modified:
incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getName.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceAbstract.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java
Modified: incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getName.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getName.java?rev=1173015&r1=1173014&r2=1173015&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getName.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getName.java Tue Sep 20 07:45:18 2011
@@ -147,6 +147,7 @@ public class ObjectActionParameterAbstra
assertThat(objectActionParameter.getName(), is("someParameterName"));
}
+ @SuppressWarnings("unchecked")
@Test
public void whenNamedFaceNotPresentAndOnlyOneParamOfType() throws Exception {
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java?rev=1173015&r1=1173014&r2=1173015&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java Tue Sep 20 07:45:18 2011
@@ -16,8 +16,6 @@
*/
package org.apache.isis.viewer.json.viewer.resources.domainobjects;
-import java.util.Map;
-
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -61,41 +59,9 @@ public abstract class AbstractObjectMemb
representation.mapPut(memberType.getJsProp(), objectMember.getId());
}
- public R withMutatorsIfEnabled() {
- if(usability().isVetoed()) {
- return cast(this);
- }
- Map<String, MutatorSpec> mutators = memberType.getMutators();
- for(String mutator: mutators.keySet()) {
- MutatorSpec mutatorSpec = mutators.get(mutator);
- if(hasMemberFacet(mutatorSpec.mutatorFacetType)) {
-
- JsonRepresentation arguments = mutatorArgs(mutatorSpec);
- JsonRepresentation detailsLink =
- linkToBuilder.linkToMember(mutator, memberType, objectMember, mutatorSpec.suffix)
- .withHttpMethod(mutatorSpec.httpMethod)
- .withArguments(arguments)
- .build();
- representation.mapPut(mutator, detailsLink);
- }
- }
- return cast(this);
- }
-
- private JsonRepresentation mutatorArgs(MutatorSpec mutatorSpec) {
- return appendMutatorArgs(mutatorSpec);
- }
+ public abstract R withMutatorsIfEnabled();
- protected JsonRepresentation appendMutatorArgs(MutatorSpec mutatorSpec) {
- if(mutatorSpec.arguments.isNone()) {
- return JsonRepresentation.newMap();
- }
- if(mutatorSpec.arguments.isOne()) {
- JsonRepresentation argValues = JsonRepresentation.newArray(1);
- return argValues;
- }
- throw new UnsupportedOperationException("should be overridden if bodyArgs is not 0 or 1");
- }
+ protected abstract JsonRepresentation mutatorArgs(MutatorSpec mutatorSpec);
protected R withValue() {
representation.mapPut("value", valueRep());
Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionSemantics.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionSemantics.java?rev=1173015&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionSemantics.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionSemantics.java Tue Sep 20 07:45:18 2011
@@ -0,0 +1,36 @@
+package org.apache.isis.viewer.json.viewer.resources.domainobjects;
+
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+
+public enum ActionSemantics {
+
+ QUERY_ONLY("invokeQueryOnly"),
+ IDEMPOTENT("invokeQueryOnly"),
+ SIDE_EFFECTS("invoke");
+
+ private final String invokeKey;
+ private ActionSemantics(String invokeKey) {
+ this.invokeKey = invokeKey;
+
+ }
+
+ public String getInvokeKey() {
+ return invokeKey;
+ }
+
+ public boolean isQueryOnly() {
+ return this == QUERY_ONLY;
+ }
+
+ public boolean isIdempotent() {
+ return this == IDEMPOTENT;
+ }
+
+ public static ActionSemantics determine(ResourceContext resourceContext, ObjectAction action) {
+ // TODO
+ return ActionSemantics.SIDE_EFFECTS;
+ }
+
+
+}
Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionSemantics.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionSemantics.java?rev=1173015&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionSemantics.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionSemantics.java Tue Sep 20 07:45:18 2011
@@ -0,0 +1,26 @@
+package org.apache.isis.viewer.json.viewer.resources.domainobjects;
+
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+
+public enum CollectionSemantics {
+
+ SET("addToSet"),
+ LIST("addToList");
+
+ private final String addToKey;
+
+ private CollectionSemantics(String addToKey) {
+ this.addToKey = addToKey;
+
+ }
+
+ public String getAddToKey() {
+ return addToKey;
+ }
+
+ public static CollectionSemantics determine(ResourceContext resourceContext, OneToManyAssociation collection) {
+ return collection.getCollectionSemantics().isSet()?CollectionSemantics.SET:CollectionSemantics.LIST;
+ }
+
+}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceAbstract.java?rev=1173015&r1=1173014&r2=1173015&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceAbstract.java Tue Sep 20 07:45:18 2011
@@ -262,9 +262,11 @@ public abstract class DomainResourceAbst
final ObjectAction action = getObjectActionThatIsVisibleAndUsable(
objectAdapter, actionId, Intent.ACCESS);
- if (!isQueryOnly(action)) {
- throw JsonApplicationException.create(HttpStatusCode.METHOD_NOT_ALLOWED,
- "Method not allowed; action '%s' is not query only", action.getId());
+ final ActionSemantics actionSemantics = ActionSemantics.determine(getResourceContext(), action);
+ if(!actionSemantics.isQueryOnly()) {
+ // TODO: reinstate
+// throw JsonApplicationException.create(HttpStatusCode.METHOD_NOT_ALLOWED,
+// "Method not allowed; action '%s' is not query only", action.getId());
}
List<ObjectAdapter> argumentAdapters;
@@ -291,10 +293,12 @@ public abstract class DomainResourceAbst
final ObjectAction action = getObjectActionThatIsVisibleAndUsable(
objectAdapter, actionId, Intent.MUTATE);
- if (!isIdempotent(action)) {
- throw JsonApplicationException.create(
- HttpStatusCode.METHOD_NOT_ALLOWED,
- "Method not allowed; action '%s' is not idempotent", action.getId());
+ final ActionSemantics actionSemantics = ActionSemantics.determine(getResourceContext(), action);
+ if(actionSemantics.isIdempotent()) {
+ // TODO: reinstate
+// throw JsonApplicationException.create(
+// HttpStatusCode.METHOD_NOT_ALLOWED,
+// "Method not allowed; action '%s' is not idempotent", action.getId());
}
List<ObjectAdapter> argumentAdapters = parseBody(action, arguments);
@@ -311,7 +315,8 @@ public abstract class DomainResourceAbst
argumentAdapters);
}
- protected Response invokeActionUsingAdapters(final ObjectAction action,
+ protected Response invokeActionUsingAdapters(
+ final ObjectAction action,
final ObjectAdapter objectAdapter,
final List<ObjectAdapter> argAdapters) {
@@ -355,16 +360,6 @@ public abstract class DomainResourceAbst
}
- private boolean isQueryOnly(final ObjectAction action) {
- // TODO: determine whether action is query only
- return true;
- }
-
- private boolean isIdempotent(final ObjectAction action) {
- // TODO: determine whether action is idempotent
- return true;
- }
-
private List<ObjectAdapter> argumentAdaptersFor(ObjectAction action,
String arguments) throws JsonParseException, JsonMappingException, IOException {
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java?rev=1173015&r1=1173014&r2=1173015&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java Tue Sep 20 07:45:18 2011
@@ -37,26 +37,38 @@ import com.google.common.collect.Immutab
public enum MemberType {
- OBJECT_PROPERTY("properties/", "propertyId", "propertyDetails", ImmutableMap.of(
- "modify", MutatorSpec.of(PropertyValidateFacet.class, PropertySetterFacet.class, HttpMethod.PUT, BodyArgs.ONE),
- "clear", MutatorSpec.of(PropertyValidateFacet.class, PropertyClearFacet.class, HttpMethod.DELETE, BodyArgs.NONE)
- )) {
+ OBJECT_PROPERTY("properties/", "propertyId", "propertyDetails",
+ ImmutableMap.of(
+ "modify", MutatorSpec.of(PropertyValidateFacet.class, PropertySetterFacet.class, HttpMethod.PUT, BodyArgs.ONE),
+ "clear", MutatorSpec.of(PropertyValidateFacet.class, PropertyClearFacet.class, HttpMethod.DELETE, BodyArgs.NONE)
+ )) {
@Override
public ObjectSpecification specFor(ObjectMember objectMember) {
return objectMember.getSpecification();
}
},
- OBJECT_COLLECTION("collections/", "collectionId", "collectionDetails", ImmutableMap.of(
- "addTo", MutatorSpec.of(CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.PUT, BodyArgs.ONE),
- "removeFrom", MutatorSpec.of(CollectionValidateRemoveFromFacet.class, CollectionRemoveFromFacet.class, HttpMethod.DELETE, BodyArgs.ONE)
- )) {
+ /**
+ * {@link #getMutators()} are keyed by {@link CollectionSemantics#getAddToKey()}
+ */
+ OBJECT_COLLECTION("collections/", "collectionId", "collectionDetails",
+ ImmutableMap.of(
+ "addToSet", MutatorSpec.of(CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.PUT, BodyArgs.ONE),
+ "addToList", MutatorSpec.of(CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.POST, BodyArgs.ONE),
+ "removeFrom", MutatorSpec.of(CollectionValidateRemoveFromFacet.class, CollectionRemoveFromFacet.class, HttpMethod.DELETE, BodyArgs.ONE)
+ )) {
@Override
public ObjectSpecification specFor(ObjectMember objectMember) {
return objectMember.getSpecification();
}
},
- OBJECT_ACTION("actions/", "actionId", "actionDetails", ImmutableMap.of(
- "invoke", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.POST, BodyArgs.MANY, "invoke")
+ /**
+ * {@link #getMutators()} are keyed by {@link ActionSemantics#getInvokeKey()}
+ */
+ OBJECT_ACTION("actions/", "actionId", "actionDetails",
+ ImmutableMap.of(
+ "invokeQueryOnly", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.GET, BodyArgs.MANY, "invoke"),
+ "invokeIdempotent", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.PUT, BodyArgs.MANY, "invoke"),
+ "invoke", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.POST, BodyArgs.MANY, "invoke")
)) {
@Override
public ObjectSpecification specFor(ObjectMember objectMember) {
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java?rev=1173015&r1=1173014&r2=1173015&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java Tue Sep 20 07:45:18 2011
@@ -21,7 +21,6 @@ import org.apache.isis.viewer.json.viewe
public class MutatorSpec {
-
public static MutatorSpec of(Class<? extends Facet> validationFacetType, Class<? extends Facet> mutatorFacetType, HttpMethod httpMethod, BodyArgs argSpec) {
return of(validationFacetType, mutatorFacetType, httpMethod, argSpec, null);
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java?rev=1173015&r1=1173014&r2=1173015&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java Tue Sep 20 07:45:18 2011
@@ -17,6 +17,8 @@
package org.apache.isis.viewer.json.viewer.resources.domainobjects;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -26,8 +28,12 @@ import org.apache.isis.viewer.json.appli
import org.apache.isis.viewer.json.viewer.ResourceContext;
import org.apache.isis.viewer.json.viewer.resources.domaintypes.DomainTypeRepBuilder;
import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypeActionRepBuilder;
+import org.codehaus.jackson.JsonNode;
+import org.codehaus.jackson.node.NullNode;
+import org.jboss.resteasy.util.GetRestful;
import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
public class ObjectActionRepBuilder extends AbstractObjectMemberRepBuilder<ObjectActionRepBuilder, ObjectAction> {
@@ -43,6 +49,7 @@ public class ObjectActionRepBuilder exte
}
+
private void putExtensionsIsisProprietary(JsonRepresentation extensions) {
extensions.mapPut("actionType", objectMember.getType());
withExtensions(extensions );
@@ -64,6 +71,35 @@ public class ObjectActionRepBuilder exte
withLinks(links);
}
+ @Override
+ public ObjectActionRepBuilder withMutatorsIfEnabled() {
+ if(usability().isVetoed()) {
+ return cast(this);
+ }
+ Map<String, MutatorSpec> mutators = memberType.getMutators();
+ final ActionSemantics semantics = ActionSemantics.determine(this.resourceContext, objectMember);
+
+ final String mutator = semantics.getInvokeKey();
+ final MutatorSpec mutatorSpec = mutators.get(mutator);
+ appendMutator(mutator, mutatorSpec);
+
+ return cast(this);
+ }
+
+ protected void appendMutator(String mutator, MutatorSpec mutatorSpec) {
+ if(hasMemberFacet(mutatorSpec.mutatorFacetType)) {
+
+ JsonRepresentation arguments = mutatorArgs(mutatorSpec);
+ JsonRepresentation detailsLink =
+ linkToBuilder.linkToMember(mutator, memberType, objectMember, mutatorSpec.suffix)
+ .withHttpMethod(mutatorSpec.httpMethod)
+ .withArguments(arguments)
+ .build();
+ representation.mapPut(mutator, detailsLink);
+ }
+ }
+
+
public JsonRepresentation build() {
putDisabledReasonIfDisabled();
@@ -140,12 +176,13 @@ public class ObjectActionRepBuilder exte
}
@Override
- protected JsonRepresentation appendMutatorArgs(MutatorSpec mutatorSpec) {
- JsonRepresentation argList = JsonRepresentation.newArray();
+ protected JsonRepresentation mutatorArgs(MutatorSpec mutatorSpec) {
+ JsonRepresentation argMap = JsonRepresentation.newMap();
+ List<ObjectActionParameter> parameters = objectMember.getParameters();
for(int i=0; i<objectMember.getParameterCount(); i++) {
- argList.arrayAdd(argValueFor(i));
+ argMap.mapPut(parameters.get(i).getName(), argValueFor(i));
}
- return argList;
+ return argMap;
}
private Object argValueFor(int i) {
@@ -155,7 +192,7 @@ public class ObjectActionRepBuilder exte
return DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "object", objectAdapter).build();
}
}
- return "{value}";
+ return NullNode.instance;
}
}
\ No newline at end of file
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java?rev=1173015&r1=1173014&r2=1173015&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java Tue Sep 20 07:45:18 2011
@@ -17,6 +17,7 @@
package org.apache.isis.viewer.json.viewer.resources.domainobjects;
import java.util.List;
+import java.util.Map;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
@@ -45,6 +46,43 @@ public class ObjectCollectionRepBuilder
withExtensions();
}
+ @Override
+ public ObjectCollectionRepBuilder withMutatorsIfEnabled() {
+ if(usability().isVetoed()) {
+ return cast(this);
+ }
+ Map<String, MutatorSpec> mutators = memberType.getMutators();
+ for(String mutator: mutators.keySet()) {
+ MutatorSpec mutatorSpec = mutators.get(mutator);
+ if(hasMemberFacet(mutatorSpec.mutatorFacetType)) {
+
+ JsonRepresentation arguments = mutatorArgs(mutatorSpec);
+ JsonRepresentation detailsLink =
+ linkToBuilder.linkToMember(mutator, memberType, objectMember, mutatorSpec.suffix)
+ .withHttpMethod(mutatorSpec.httpMethod)
+ .withArguments(arguments)
+ .build();
+ representation.mapPut(mutator, detailsLink);
+ }
+ }
+ return cast(this);
+ }
+
+
+ protected JsonRepresentation mutatorArgs(MutatorSpec mutatorSpec) {
+ final JsonRepresentation repr = JsonRepresentation.newMap();
+ if(mutatorSpec.arguments.isNone()) {
+ return repr;
+ }
+ if(mutatorSpec.arguments.isOne()) {
+ JsonRepresentation argValues = JsonRepresentation.newArray(1);
+ return argValues;
+ }
+ throw new UnsupportedOperationException("should be overridden if bodyArgs is not 0 or 1");
+ }
+
+
+
public JsonRepresentation build() {
return representation;
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java?rev=1173015&r1=1173014&r2=1173015&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java Tue Sep 20 07:45:18 2011
@@ -17,6 +17,7 @@
package org.apache.isis.viewer.json.viewer.resources.domainobjects;
import java.util.List;
+import java.util.Map;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -43,6 +44,42 @@ public class ObjectPropertyRepBuilder ex
withExtensions();
}
+
+ @Override
+ public ObjectPropertyRepBuilder withMutatorsIfEnabled() {
+ if(usability().isVetoed()) {
+ return cast(this);
+ }
+ Map<String, MutatorSpec> mutators = memberType.getMutators();
+ for(String mutator: mutators.keySet()) {
+ MutatorSpec mutatorSpec = mutators.get(mutator);
+ if(hasMemberFacet(mutatorSpec.mutatorFacetType)) {
+
+ JsonRepresentation arguments = mutatorArgs(mutatorSpec);
+ JsonRepresentation detailsLink =
+ linkToBuilder.linkToMember(mutator, memberType, objectMember, mutatorSpec.suffix)
+ .withHttpMethod(mutatorSpec.httpMethod)
+ .withArguments(arguments)
+ .build();
+ representation.mapPut(mutator, detailsLink);
+ }
+ }
+ return cast(this);
+ }
+
+ protected JsonRepresentation mutatorArgs(MutatorSpec mutatorSpec) {
+ final JsonRepresentation repr = JsonRepresentation.newMap();
+ if(mutatorSpec.arguments.isNone()) {
+ return repr;
+ }
+ if(mutatorSpec.arguments.isOne()) {
+ JsonRepresentation argValues = JsonRepresentation.newArray(1);
+ return argValues;
+ }
+ throw new UnsupportedOperationException("should be overridden if bodyArgs is not 0 or 1");
+ }
+
+
public JsonRepresentation build() {
return representation;
}