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/10/27 15:01:26 UTC

svn commit: r1189731 - in /incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources: domainobjects/ domaintypes/

Author: danhaywood
Date: Thu Oct 27 13:01:25 2011
New Revision: 1189731

URL: http://svn.apache.org/viewvc?rev=1189731&view=rev
Log:
ISIS-109: minor fixes for type action param representation

Added:
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprRenderer.java
      - copied, changed from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberReprRenderer.java
      - copied, changed from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndAction.java
      - copied, changed from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndAction.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndActionParam.java
      - copied, changed from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndActionParam.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndCollection.java
      - copied, changed from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndCollection.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndFeature.java
      - copied, changed from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndFeature.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndProperty.java
      - copied, changed from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndProperty.java
Removed:
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndAction.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndActionParam.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndCollection.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndFeature.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndProperty.java
Modified:
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionParamReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.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/AbstractObjectMemberReprRenderer.java?rev=1189731&r1=1189730&r2=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java Thu Oct 27 13:01:25 2011
@@ -24,7 +24,6 @@ import org.apache.isis.core.metamodel.sp
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
-import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
@@ -102,23 +101,22 @@ public abstract class AbstractObjectMemb
     /**
      * For subclasses to call from their {@link #render()} method.
      */
-    protected void addMemberContentSpecificToMode() {
+    protected void renderMemberContent() {
         if(mode.isInline()) {
-            addDetailsLink();
-            return;
+            addDetailsLinkIfPersistent();
         } 
         
         if (mode.isStandalone()){
             addLinkToSelf();
             addLinkToUp();
         }
+        
         if (mode.isFollowed() || mode.isStandalone()){
             addMutatorsIfEnabled();
             
             putExtensionsIsisProprietary();
             addLinksToFormalDomainModel();
             addLinksIsisProprietary();
-            return;
         }
     }
     
@@ -174,7 +172,10 @@ public abstract class AbstractObjectMemb
         throw new UnsupportedOperationException("override mutatorArgs() to populate for many arguments");
     }
     
-    private R addDetailsLink() {
+    private void addDetailsLinkIfPersistent() {
+        if(!objectAdapter.isPersistent()) {
+            return;
+        }
         final JsonRepresentation link = 
                 linkTo.memberBuilder(Rel.DETAILS, memberType, objectMember).build();
         getLinks().arrayAdd(link);
@@ -184,7 +185,7 @@ public abstract class AbstractObjectMemb
         if(membersLinkFollower.matches(representation) && detailsLinkFollower.matches(link)) {
             followDetailsLink(link);
         }
-        return cast(this);
+        return;
     }
 
     protected abstract void followDetailsLink(JsonRepresentation detailsLink);

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.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/ObjectActionReprRenderer.java?rev=1189731&r1=1189730&r2=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java Thu Oct 27 13:01:25 2011
@@ -60,11 +60,11 @@ public class ObjectActionReprRenderer ex
     }
 
     public JsonRepresentation render() {
-        // id and memberType are put eagerly
+        // id and memberType are rendered eagerly
         
+        renderMemberContent();
         putDisabledReasonIfDisabled();
         
-        addMemberContentSpecificToMode();
         if(mode.isStandalone()) {
             addParameterDetails();
         }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.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/ObjectCollectionReprRenderer.java?rev=1189731&r1=1189730&r2=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java Thu Oct 27 13:01:25 2011
@@ -57,14 +57,13 @@ public class ObjectCollectionReprRendere
     }
     
     public JsonRepresentation render() {
-        // id and memberType are put eagerly
+        // id and memberType are rendered eagerly
 
-        putDisabledReasonIfDisabled();
-
-        addMemberContentSpecificToMode();
-        if(mode.isStandalone()) {
+        renderMemberContent();
+        if(mode.isStandalone() || !objectAdapter.isPersistent()) {
             addValue();
         }
+        putDisabledReasonIfDisabled();
 
         return representation;
     }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.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/ObjectPropertyReprRenderer.java?rev=1189731&r1=1189730&r2=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java Thu Oct 27 13:01:25 2011
@@ -58,13 +58,14 @@ public class ObjectPropertyReprRenderer 
     }
 
     public JsonRepresentation render() {
-        // id and memberType are put in eagerly
+        // id and memberType are rendered eagerly
         
-        addValue();
 
+        renderMemberContent();
+        addValue();
+        
         putDisabledReasonIfDisabled();
 
-        addMemberContentSpecificToMode();
         if(mode.isStandalone()) {
             addChoices();
         }

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprRenderer.java (from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.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/domaintypes/AbstractTypeFeatureReprRenderer.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.java&r1=1189396&r2=1189731&rev=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprRenderer.java Thu Oct 27 13:01:25 2011
@@ -18,30 +18,24 @@ package org.apache.isis.viewer.json.view
 
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
-import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
-import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
-import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
 
 import com.google.common.base.Strings;
 
-public abstract class AbstractTypeFeatureReprBuilder<R extends ReprRendererAbstract<R, SpecAndFeature<T>>, T extends ObjectFeature> extends ReprRendererAbstract<R, SpecAndFeature<T>> {
+public abstract class AbstractTypeFeatureReprRenderer<R extends ReprRendererAbstract<R, ParentSpecAndFeature<T>>, T extends ObjectFeature> extends ReprRendererAbstract<R, ParentSpecAndFeature<T>> {
 
     protected ObjectSpecification objectSpecification;
     protected T objectFeature;
 
-    protected ObjectSpecification parentSpec;
-
-    public AbstractTypeFeatureReprBuilder(ResourceContext resourceContext, LinkFollower linkFollower, RepresentationType representationType, JsonRepresentation representation) {
+    public AbstractTypeFeatureReprRenderer(ResourceContext resourceContext, LinkFollower linkFollower, RepresentationType representationType, JsonRepresentation representation) {
         super(resourceContext, linkFollower, representationType, representation);
     }
 
-    public ObjectSpecification getObjectSpecification() {
+    public ObjectSpecification getParentSpecification() {
         return objectSpecification;
     }
     
@@ -50,22 +44,17 @@ public abstract class AbstractTypeFeatur
     }
 
     @Override
-    public R with(SpecAndFeature<T> specAndFeature) {
-        objectSpecification = specAndFeature.getObjectSpecification();
+    public R with(ParentSpecAndFeature<T> specAndFeature) {
+        objectSpecification = specAndFeature.getParentSpec();
         objectFeature = specAndFeature.getObjectFeature();
         
         return cast(this);
     }
 
-    public R withParent(ObjectSpecification parentSpec) {
-        this.parentSpec = parentSpec;
-        return cast(this);
-    }
-
     public JsonRepresentation render() {
         
         addLinkSelfIfRequired();
-        addLinkToParentIfProvided();
+        addLinkUpToParent();
         
         addPropertiesSpecificToFeature();
         
@@ -90,7 +79,7 @@ public abstract class AbstractTypeFeatur
     /**
      * Mandatory hook method.
      */
-    protected abstract void addLinkToParentIfProvided();
+    protected abstract void addLinkUpToParent();
 
     /**
      * Optional hook method.

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberReprRenderer.java (from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberReprBuilder.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/domaintypes/AbstractTypeMemberReprRenderer.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberReprBuilder.java&r1=1189396&r2=1189731&rev=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberReprRenderer.java Thu Oct 27 13:01:25 2011
@@ -16,7 +16,6 @@
  */
 package org.apache.isis.viewer.json.viewer.resources.domaintypes;
 
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
@@ -27,25 +26,15 @@ import org.apache.isis.viewer.json.viewe
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
 
-import com.google.common.base.Strings;
-
-public abstract class AbstractTypeMemberReprBuilder<R extends ReprRendererAbstract<R, SpecAndFeature<T>>, T extends ObjectMember> 
-        extends AbstractTypeFeatureReprBuilder<R, T> {
+public abstract class AbstractTypeMemberReprRenderer<R extends ReprRendererAbstract<R, ParentSpecAndFeature<T>>, T extends ObjectMember> 
+        extends AbstractTypeFeatureReprRenderer<R, T> {
 
     protected MemberType memberType;
 
-    public AbstractTypeMemberReprBuilder(ResourceContext resourceContext, LinkFollower linkFollower, RepresentationType representationType, JsonRepresentation representation) {
+    public AbstractTypeMemberReprRenderer(ResourceContext resourceContext, LinkFollower linkFollower, RepresentationType representationType, JsonRepresentation representation) {
         super(resourceContext, linkFollower, representationType, representation);
     }
 
-    public ObjectSpecification getObjectSpecification() {
-        return objectSpecification;
-    }
-    
-    public T getObjectFeature() {
-        return objectFeature;
-    }
-
     /**
      * null if the feature is an object action param.
      * @return
@@ -55,36 +44,21 @@ public abstract class AbstractTypeMember
     }
     
     @Override
-    public R with(SpecAndFeature<T> specAndFeature) {
+    public R with(ParentSpecAndFeature<T> specAndFeature) {
         super.with(specAndFeature);
         memberType = MemberType.determineFrom(objectFeature);
         
         // done eagerly so can use as criteria for x-ro-follow-links
-
-        if(memberType != null) {
-            ObjectMember objectMember = (ObjectMember) objectFeature;
-            putId(objectMember);
-            putMemberType(objectMember);
-        }
+        representation.mapPut(memberType.getJsProp(), objectFeature.getId());
+        representation.mapPut("memberType", memberType.getName());
 
         return cast(this);
     }
 
 
-    protected void putId(ObjectMember objectMember) {
-        representation.mapPut(memberType.getJsProp(), objectMember.getId());
-    }
-
-    protected void putMemberType(ObjectMember objectMember) {
-        representation.mapPut("memberType", memberType.getName());
-    }
-
-    protected void addLinkToParentIfProvided() {
-        if(parentSpec == null) {
-            return;
-        }
+    protected void addLinkUpToParent() {
         final LinkBuilder parentLinkBuilder = 
-                DomainTypeReprRenderer.newLinkToBuilder(resourceContext, Rel.UP, parentSpec);
+                DomainTypeReprRenderer.newLinkToBuilder(resourceContext, Rel.UP, objectSpecification);
         getLinks().arrayAdd(parentLinkBuilder.build());
     }
 
@@ -98,7 +72,7 @@ public abstract class AbstractTypeMember
         final LinkBuilder linkBuilder = LinkBuilder.newBuilder(
                 getResourceContext(), Rel.SELF, getRepresentationType(), 
                 "domainTypes/%s/%s%s", 
-                getObjectSpecification().getFullIdentifier(), 
+                getParentSpecification().getFullIdentifier(), 
                 getMemberType().getUrlPart(), 
                 objectMember.getId());
         getLinks().arrayAdd(linkBuilder.build());

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.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/domaintypes/DomainTypeResourceServerside.java?rev=1189731&r1=1189730&r2=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java Thu Oct 27 13:01:25 2011
@@ -113,7 +113,7 @@ public class DomainTypeResourceServersid
         
         final TypePropertyReprRenderer renderer = 
                 (TypePropertyReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
-        renderer.with(new SpecAndProperty(parentSpec, property)).includesSelf().withParent(parentSpec);
+        renderer.with(new ParentSpecAndProperty(parentSpec, property)).includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
     }
@@ -143,7 +143,7 @@ public class DomainTypeResourceServersid
         
         final TypeCollectionReprRenderer renderer = 
                 (TypeCollectionReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
-        renderer.with(new SpecAndCollection(parentSpec, collection)).includesSelf().withParent(parentSpec);
+        renderer.with(new ParentSpecAndCollection(parentSpec, collection)).includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
     }
@@ -173,7 +173,7 @@ public class DomainTypeResourceServersid
         
         final TypeActionReprRenderer renderer = 
                 (TypeActionReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
-        renderer.with(new SpecAndAction(parentSpec, action)).includesSelf().withParent(parentSpec);
+        renderer.with(new ParentSpecAndAction(parentSpec, action)).includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
     }
@@ -206,9 +206,8 @@ public class DomainTypeResourceServersid
         
         final TypeActionParamReprRenderer renderer = 
                 (TypeActionParamReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
-        renderer.with(new SpecAndActionParam(parentSpec, actionParam))
-                .includesSelf()
-                .withParent(parentSpec);
+        renderer.with(new ParentSpecAndActionParam(parentSpec, actionParam))
+                .includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
     }

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndAction.java (from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndAction.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/domaintypes/ParentSpecAndAction.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndAction.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndAction.java&r1=1189396&r2=1189731&rev=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndAction.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndAction.java Thu Oct 27 13:01:25 2011
@@ -21,9 +21,9 @@ package org.apache.isis.viewer.json.view
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 
-public class SpecAndAction extends SpecAndFeature<ObjectAction> {
+public class ParentSpecAndAction extends ParentSpecAndFeature<ObjectAction> {
     
-    public SpecAndAction(ObjectSpecification objectSpecification, ObjectAction action) {
+    public ParentSpecAndAction(ObjectSpecification objectSpecification, ObjectAction action) {
         super(objectSpecification, action);
     }
     

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndActionParam.java (from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndActionParam.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/domaintypes/ParentSpecAndActionParam.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndActionParam.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndActionParam.java&r1=1189396&r2=1189731&rev=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndActionParam.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndActionParam.java Thu Oct 27 13:01:25 2011
@@ -21,9 +21,9 @@ package org.apache.isis.viewer.json.view
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 
-public class SpecAndActionParam extends SpecAndFeature<ObjectActionParameter> {
+public class ParentSpecAndActionParam extends ParentSpecAndFeature<ObjectActionParameter> {
     
-    public SpecAndActionParam(ObjectSpecification objectSpecification, ObjectActionParameter actionParam) {
+    public ParentSpecAndActionParam(ObjectSpecification objectSpecification, ObjectActionParameter actionParam) {
         super(objectSpecification, actionParam);
     }
     

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndCollection.java (from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndCollection.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/domaintypes/ParentSpecAndCollection.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndCollection.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndCollection.java&r1=1189396&r2=1189731&rev=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndCollection.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndCollection.java Thu Oct 27 13:01:25 2011
@@ -21,9 +21,9 @@ package org.apache.isis.viewer.json.view
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
-public class SpecAndCollection extends SpecAndFeature<OneToManyAssociation> {
+public class ParentSpecAndCollection extends ParentSpecAndFeature<OneToManyAssociation> {
     
-    public SpecAndCollection(ObjectSpecification objectSpecification, OneToManyAssociation collection) {
+    public ParentSpecAndCollection(ObjectSpecification objectSpecification, OneToManyAssociation collection) {
         super(objectSpecification, collection);
     }
     

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndFeature.java (from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndFeature.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/domaintypes/ParentSpecAndFeature.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndFeature.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndFeature.java&r1=1189396&r2=1189731&rev=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndFeature.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndFeature.java Thu Oct 27 13:01:25 2011
@@ -21,17 +21,17 @@ package org.apache.isis.viewer.json.view
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
 
-public abstract class SpecAndFeature<T extends ObjectFeature> {
+public abstract class ParentSpecAndFeature<T extends ObjectFeature> {
     
-    private final ObjectSpecification objectSpecification;
+    private final ObjectSpecification parentSpec;
     private final T objectFeature;
     
-    public SpecAndFeature(ObjectSpecification objectSpecification, T objectFeature) {
-        this.objectSpecification = objectSpecification;
+    public ParentSpecAndFeature(ObjectSpecification objectSpecification, T objectFeature) {
+        this.parentSpec = objectSpecification;
         this.objectFeature = objectFeature;
     }
-    public ObjectSpecification getObjectSpecification() {
-        return objectSpecification;
+    public ObjectSpecification getParentSpec() {
+        return parentSpec;
     }
     public T getObjectFeature() {
         return objectFeature;

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndProperty.java (from r1189396, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndProperty.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/domaintypes/ParentSpecAndProperty.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndProperty.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndProperty.java&r1=1189396&r2=1189731&rev=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndProperty.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/ParentSpecAndProperty.java Thu Oct 27 13:01:25 2011
@@ -21,9 +21,9 @@ package org.apache.isis.viewer.json.view
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 
-public class SpecAndProperty extends SpecAndFeature<OneToOneAssociation> {
+public class ParentSpecAndProperty extends ParentSpecAndFeature<OneToOneAssociation> {
     
-    public SpecAndProperty(ObjectSpecification objectSpecification, OneToOneAssociation property) {
+    public ParentSpecAndProperty(ObjectSpecification objectSpecification, OneToOneAssociation property) {
         super(objectSpecification, property);
     }
     

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionParamReprRenderer.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/domaintypes/TypeActionParamReprRenderer.java?rev=1189731&r1=1189730&r2=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionParamReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionParamReprRenderer.java Thu Oct 27 13:01:25 2011
@@ -16,10 +16,12 @@
  */
 package org.apache.isis.viewer.json.viewer.resources.domaintypes;
 
+import org.apache.isis.core.commons.lang.NameUtils;
 import org.apache.isis.core.metamodel.facets.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
@@ -28,11 +30,9 @@ import org.apache.isis.viewer.json.viewe
 import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
 
-public class TypeActionParamReprRenderer extends AbstractTypeFeatureReprBuilder<TypeActionParamReprRenderer, ObjectActionParameter> {
-
-    private ObjectAction parentAction;
-    private ObjectSpecification parentSpec;
+public class TypeActionParamReprRenderer extends AbstractTypeFeatureReprRenderer<TypeActionParamReprRenderer, ObjectActionParameter> {
 
     public static class Factory extends ReprRendererFactoryAbstract {
 
@@ -52,7 +52,8 @@ public class TypeActionParamReprRenderer
         String actionId = objectAction.getId();
         final String paramName = objectActionParameter.getName();
         String url = String.format("domainTypes/%s/actions/%s/params/%s", typeFullName, actionId, paramName);
-        return LinkBuilder.newBuilder(resourceContext, rel, RepresentationType.TYPE_ACTION_PARAMETER, url);
+        return LinkBuilder.newBuilder(resourceContext, rel, RepresentationType.TYPE_ACTION_PARAMETER, url)
+                          .withId(deriveId(objectActionParameter));
     }
 
     public TypeActionParamReprRenderer(ResourceContext resourceContext, LinkFollower linkFollower, RepresentationType representationType, JsonRepresentation representation) {
@@ -60,27 +61,46 @@ public class TypeActionParamReprRenderer
     }
 
     @Override
+    public TypeActionParamReprRenderer with(ParentSpecAndFeature<ObjectActionParameter> specAndFeature) {
+        super.with(specAndFeature);
+        
+        // done eagerly so can use as criteria for x-ro-follow-links
+        representation.mapPut("id", deriveId());
+
+        return this;
+    }
+
+    protected String deriveId() {
+        return deriveId(getObjectFeature());
+    }
+
+    private static String deriveId(ObjectActionParameter objectActionParameter) {
+        return objectActionParameter.getAction().getId() + "-" + objectActionParameter.getName();
+    }
+
+
+    @Override
     protected void addLinkSelfIfRequired() {
         if(!includesSelf) {
             return;
         }
         getLinks().arrayAdd( 
-                newLinkToBuilder(getResourceContext(), Rel.SELF, getObjectSpecification(), getObjectFeature()).build());
+                newLinkToBuilder(getResourceContext(), Rel.SELF, getParentSpecification(), getObjectFeature()).build());
     }
 
     @Override
-    protected void addLinkToParentIfProvided() {
-        if(parentSpec == null || parentAction == null) {
-            return;
-        }
+    protected void addLinkUpToParent() {
+        ObjectAction parentAction = this.objectFeature.getAction();
         
         final LinkBuilder parentLinkBuilder = 
-                TypeActionReprRenderer.newLinkToBuilder(resourceContext, Rel.UP, parentSpec, parentAction);
+                TypeActionReprRenderer.newLinkToBuilder(resourceContext, Rel.UP, objectSpecification, parentAction);
         getLinks().arrayAdd(parentLinkBuilder.build());
     }
 
     @Override
     protected void addPropertiesSpecificToFeature() {
+        representation.mapPut("name", getObjectFeature().getName());
+        representation.mapPut("number", getObjectFeature().getNumber());
         representation.mapPut("optional", getObjectFeature().isOptional());
         final MaxLengthFacet maxLength = getObjectFeature().getFacet(MaxLengthFacet.class);
         if(maxLength != null && !maxLength.isNoop()) {
@@ -89,6 +109,13 @@ public class TypeActionParamReprRenderer
     }
     
     @Override
+    protected void addLinksSpecificToFeature() {
+        final LinkBuilder linkBuilder = 
+                DomainTypeReprRenderer.newLinkToBuilder(resourceContext, Rel.RETURN_TYPE, objectFeature.getSpecification());
+        getLinks().arrayAdd(linkBuilder.build());
+    }
+    
+    @Override
     protected void putExtensionsSpecificToFeature() {
         putExtensionsName();
         putExtensionsDescriptionIfAvailable();        

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.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/domaintypes/TypeActionReprRenderer.java?rev=1189731&r1=1189730&r2=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java Thu Oct 27 13:01:25 2011
@@ -31,9 +31,7 @@ import org.apache.isis.viewer.json.viewe
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
 
-import com.google.common.base.Strings;
-
-public class TypeActionReprRenderer extends AbstractTypeMemberReprBuilder<TypeActionReprRenderer, ObjectAction> {
+public class TypeActionReprRenderer extends AbstractTypeMemberReprRenderer<TypeActionReprRenderer, ObjectAction> {
 
     public static class Factory extends ReprRendererFactoryAbstract {
 
@@ -66,13 +64,11 @@ public class TypeActionReprRenderer exte
     }
 
     private void addParameters() {
-        if(parentSpec == null) {
-            return;
-        }
         final JsonRepresentation parameterList = JsonRepresentation.newArray();
         final List<ObjectActionParameter> parameters = getObjectFeature().getParameters();
         for (ObjectActionParameter parameter : parameters) {
-            final LinkBuilder linkBuilder = TypeActionParamReprRenderer.newLinkToBuilder(getResourceContext(), Rel.ACTION_PARAM, parentSpec, parameter);
+            final LinkBuilder linkBuilder = 
+                    TypeActionParamReprRenderer.newLinkToBuilder(getResourceContext(), Rel.ACTION_PARAM, objectSpecification, parameter);
             parameterList.arrayAdd(linkBuilder.build());
         }
         

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.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/domaintypes/TypeCollectionReprRenderer.java?rev=1189731&r1=1189730&r2=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java Thu Oct 27 13:01:25 2011
@@ -27,7 +27,7 @@ import org.apache.isis.viewer.json.viewe
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
 
-public class TypeCollectionReprRenderer extends AbstractTypeMemberReprBuilder<TypeCollectionReprRenderer, OneToManyAssociation> {
+public class TypeCollectionReprRenderer extends AbstractTypeMemberReprRenderer<TypeCollectionReprRenderer, OneToManyAssociation> {
 
     public static class Factory extends ReprRendererFactoryAbstract {
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.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/domaintypes/TypePropertyReprRenderer.java?rev=1189731&r1=1189730&r2=1189731&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java Thu Oct 27 13:01:25 2011
@@ -28,7 +28,7 @@ import org.apache.isis.viewer.json.viewe
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
 
-public class TypePropertyReprRenderer extends AbstractTypeMemberReprBuilder<TypePropertyReprRenderer, OneToOneAssociation> {
+public class TypePropertyReprRenderer extends AbstractTypeMemberReprRenderer<TypePropertyReprRenderer, OneToOneAssociation> {
 
     public static class Factory extends ReprRendererFactoryAbstract {