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/03 23:46:19 UTC

svn commit: r1178596 - in /incubator/isis/trunk/framework/viewer/json: json-tck/src/test/java/org/apache/isis/viewer/json/tck/ json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ json-viewer/src/main/java/org/apache/isis/viewe...

Author: danhaywood
Date: Mon Oct  3 21:46:18 2011
New Revision: 1178596

URL: http://svn.apache.org/viewvc?rev=1178596&view=rev
Log:
ISIS-109: ReprRenderers for the domain type resources

Added:
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprRenderer.java
      - copied, changed from r1177860, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypesReprRenderer.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/SpecAndCollection.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndMember.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndProperty.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java
      - copied, changed from r1177860, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java
      - copied, changed from r1177860, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java
      - copied, changed from r1177860, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprBuilder.java
Removed:
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprBuilder.java
Modified:
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RendererFactoryRegistry.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprBuilderAbstract.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectLinkToBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelper.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/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/AbstractTypeMemberReprBuilder.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/home/HomePageReprRenderer.java

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java?rev=1178596&r1=1178595&r2=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java Mon Oct  3 21:46:18 2011
@@ -129,12 +129,12 @@ public class DomainServiceResourceTest_s
     }
 
     @Test
-    public void links_noIcons() throws Exception {
+    public void links() throws Exception {
         // given, when
         DomainObjectRepresentation repr = givenRepresentation("simples");
 
         // then
-        assertThat(repr.getLinks().arraySize(), is(0));
+        assertThat(repr.getLinks().arraySize(), is(1));
     }
     
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkReprBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkReprBuilder.java?rev=1178596&r1=1178595&r2=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkReprBuilder.java Mon Oct  3 21:46:18 2011
@@ -16,27 +16,36 @@
  */
 package org.apache.isis.viewer.json.viewer.representations;
 
+import javax.ws.rs.core.MediaType;
+
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 
 public class LinkReprBuilder extends ReprBuilderAbstract<LinkReprBuilder> {
 
-    public static LinkReprBuilder newBuilder(ResourceContext resourceContext, String rel, String hrefFormat, Object... args) {
-        return new LinkReprBuilder(resourceContext, rel, String.format(hrefFormat, args));
+    public static LinkReprBuilder newBuilder(ResourceContext resourceContext, String rel, RepresentationType representationType, String hrefFormat, Object... hrefArgs) {
+        return newBuilder(resourceContext, rel, representationType.getMediaType(), hrefFormat, hrefArgs);
+    }
+
+    public static LinkReprBuilder newBuilder(ResourceContext resourceContext, String rel, MediaType mediaType, String hrefFormat, Object... hrefArgs) {
+        return new LinkReprBuilder(resourceContext, rel, String.format(hrefFormat, hrefArgs), mediaType);
     }
 
 	private final String rel;
     private final String href;
+    private final MediaType mediaType;
     
     private HttpMethod method = HttpMethod.GET;
     private String title;
     private JsonRepresentation arguments;
     private JsonRepresentation value;
     
-    protected LinkReprBuilder(ResourceContext resourceContext, String rel, String href) {
+    protected LinkReprBuilder(ResourceContext resourceContext, String rel, String href, MediaType mediaType) {
         super(resourceContext);
         this.rel = rel;
         this.href = href;
+        this.mediaType = mediaType;
     }
     public LinkReprBuilder withHttpMethod(HttpMethod method) {
         this.method = method;
@@ -59,6 +68,7 @@ public class LinkReprBuilder extends Rep
         representation.mapPut("rel", rel);
         representation.mapPut("href", resourceContext.urlFor(href));
         representation.mapPut("method", method);
+        representation.mapPut("type", mediaType.toString());
         representation.mapPut("title", title);
         representation.mapPut("arguments", arguments);
         representation.mapPut("value", value);

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RendererFactoryRegistry.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RendererFactoryRegistry.java?rev=1178596&r1=1178595&r2=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RendererFactoryRegistry.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RendererFactoryRegistry.java Mon Oct  3 21:46:18 2011
@@ -30,6 +30,11 @@ import org.apache.isis.viewer.json.viewe
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.ObjectCollectionReprRenderer;
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.ObjectPropertyReprRenderer;
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.ScalarValueReprRenderer;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.DomainTypeReprRenderer;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.DomainTypesReprRenderer;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypeActionReprRenderer;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypeCollectionReprRenderer;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypePropertyReprRenderer;
 import org.apache.isis.viewer.json.viewer.resources.home.HomePageReprRenderer;
 import org.apache.isis.viewer.json.viewer.resources.user.UserReprRenderer;
 
@@ -56,6 +61,11 @@ public class RendererFactoryRegistry {
         register(new ObjectActionReprRenderer.Factory());
         register(new ListReprRenderer.Factory());
         register(new ScalarValueReprRenderer.Factory());
+        register(new DomainTypesReprRenderer.Factory());
+        register(new DomainTypeReprRenderer.Factory());
+        register(new TypePropertyReprRenderer.Factory());
+        register(new TypeCollectionReprRenderer.Factory());
+        register(new TypeActionReprRenderer.Factory());
     }
 
     public void register(RendererFactory factory) {

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprBuilderAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprBuilderAbstract.java?rev=1178596&r1=1178595&r2=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprBuilderAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprBuilderAbstract.java Mon Oct  3 21:46:18 2011
@@ -43,13 +43,6 @@ public abstract class ReprBuilderAbstrac
         return resourceContext;
     }
 
-    public T withSelf(String href) {
-        if(href != null) {
-            representation.mapPut("self", LinkReprBuilder.newBuilder(resourceContext, "self", href).render());
-        }
-        return cast(this);
-    }
-
     public ReprBuilderAbstract<T> withLinks() {
         return withLinks(JsonRepresentation.newArray());
     }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java?rev=1178596&r1=1178595&r2=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java Mon Oct  3 21:46:18 2011
@@ -21,6 +21,13 @@ public abstract class ReprRendererAbstra
         return (R) this;
     }
 
+    public R withSelf(String href) {
+        if(href != null) {
+            representation.mapPut("self", LinkReprBuilder.newBuilder(resourceContext, "self", representationType, href).render());
+        }
+        return cast(this);
+    }
+
     @Override
     public RepresentationType getRepresentationType() {
         return representationType;

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectLinkToBuilder.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/DomainObjectLinkToBuilder.java?rev=1178596&r1=1178595&r2=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectLinkToBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectLinkToBuilder.java Mon Oct  3 21:46:18 2011
@@ -16,8 +16,11 @@
  */
 package org.apache.isis.viewer.json.viewer.resources.domainobjects;
 
+import javax.ws.rs.core.MediaType;
+
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkReprBuilder;
 
@@ -41,14 +44,14 @@ public class DomainObjectLinkToBuilder i
     @Override
     public final LinkReprBuilder linkToAdapter() {
         StringBuilder buf = objectsBuf();
-        return LinkReprBuilder.newBuilder(resourceContext, "object", buf.toString());
+        return LinkReprBuilder.newBuilder(resourceContext, "object", RepresentationType.DOMAIN_OBJECT, buf.toString());
     }
 
 
     @Override
     public final LinkReprBuilder linkToMember(String rel, MemberType memberType, ObjectMember objectMember, String... parts) {
         StringBuilder buf = objectsBuf();
-        buf.append("/").append(memberType.urlPart()).append(objectMember.getId());
+        buf.append("/").append(memberType.getUrlPart()).append(objectMember.getId());
         for(String part: parts) {
             if(part == null) {
                 continue;
@@ -56,7 +59,7 @@ public class DomainObjectLinkToBuilder i
             buf.append("/").append(part);
         }
         String url = buf.toString();
-        return LinkReprBuilder.newBuilder(resourceContext, rel, url);
+        return LinkReprBuilder.newBuilder(resourceContext, rel, memberType.getRepresentationType(), url);
     }
 
     /**

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprRenderer.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/DomainObjectReprRenderer.java?rev=1178596&r1=1178595&r2=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprRenderer.java Mon Oct  3 21:46:18 2011
@@ -18,6 +18,8 @@ package org.apache.isis.viewer.json.view
 
 import java.util.List;
 
+import javax.ws.rs.core.MediaType;
+
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
@@ -39,6 +41,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.ReprRendererAbstract;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.DomainTypeReprRenderer;
 import org.apache.isis.viewer.json.viewer.util.OidUtils;
 
 import com.google.common.base.Function;
@@ -60,10 +63,11 @@ public class DomainObjectReprRenderer ex
     public static LinkReprBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectAdapter elementAdapter) {
         String oidStr = resourceContext.getOidStringifier().enString(elementAdapter.getOid());
         String url = "objects/" + oidStr;
-        return LinkReprBuilder.newBuilder(resourceContext, rel, url);
+        return LinkReprBuilder.newBuilder(resourceContext, rel, RepresentationType.DOMAIN_OBJECT, url);
     }
 
     private ObjectAdapterLinkToBuilder linkToBuilder;
+    private ObjectAdapter objectAdapter;
 
     private DomainObjectReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
         super(resourceContext, representationType, representation);
@@ -80,18 +84,39 @@ public class DomainObjectReprRenderer ex
     }
 
     public DomainObjectReprRenderer with(ObjectAdapter objectAdapter) {
+        this.objectAdapter = objectAdapter;
+        return this;
+    }
+
+    public JsonRepresentation render() {
+
+        // self
         if(includesSelf) {
             JsonRepresentation self = linkToBuilder.with(objectAdapter).linkToAdapter().render();
             representation.mapPut("self", self);
         }
 
+        // title
         String title = objectAdapter.titleString();
         representation.mapPut("oid", OidUtils.getOidStr(resourceContext, objectAdapter));
         representation.mapPut("title", title);
+        
+        // members
         withMembers(objectAdapter);
-        return this;
+
+        // links
+        final JsonRepresentation links = JsonRepresentation.newArray();
+        links.arrayAdd(
+                DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), "domainType", objectAdapter.getSpecification()).render());
+        withLinks(links);
+        
+        // extensions
+        withExtensions();
+        
+        return representation;
     }
 
+
     private DomainObjectReprRenderer withMembers(ObjectAdapter objectAdapter) {
         JsonRepresentation members = JsonRepresentation.newArray();
         List<ObjectAssociation> associations = objectAdapter.getSpecification().getAssociations();
@@ -139,19 +164,19 @@ public class DomainObjectReprRenderer ex
     }
 
     private void addActions(final ObjectAdapter objectAdapter,
-			List<ObjectAction> actions, JsonRepresentation members) {
-		for (ObjectAction action : actions) {
+            List<ObjectAction> actions, JsonRepresentation members) {
+        for (ObjectAction action : actions) {
             Consent visibility = action.isVisible(getSession(), objectAdapter);
             if(!visibility.isAllowed()) {
                 continue;
             } 
-        	if(action.getType().isSet()) {
-        		ObjectActionSet objectActionSet = (ObjectActionSet) action;
-        		List<ObjectAction> subactions = objectActionSet.getActions();
-        		addActions(objectAdapter, subactions, members);
+            if(action.getType().isSet()) {
+                ObjectActionSet objectActionSet = (ObjectActionSet) action;
+                List<ObjectAction> subactions = objectActionSet.getActions();
+                addActions(objectAdapter, subactions, members);
 
-        	} else {
-        	    
+            } else {
+                
                 RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.OBJECT_ACTION);
                 final ObjectActionReprRenderer renderer = 
                         (ObjectActionReprRenderer) factory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
@@ -161,17 +186,11 @@ public class DomainObjectReprRenderer ex
                         .withDetailsLink();
 
                 members.arrayAdd(renderer.render());
-        	}
+            }
         }
-	}
-
-    public JsonRepresentation render() {
-        withLinks();
-        withExtensions();
-        return representation;
     }
 
-    
+
     /////////////////////////////////////////////////////////////////////
     //
     /////////////////////////////////////////////////////////////////////

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.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/DomainObjectResourceServerside.java?rev=1178596&r1=1178595&r2=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java Mon Oct  3 21:46:18 2011
@@ -45,7 +45,6 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectResource;
 import org.apache.isis.viewer.json.viewer.JsonApplicationException;
-import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactory;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactoryRegistry;
 import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelper.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/DomainResourceHelper.java?rev=1178596&r1=1178595&r2=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelper.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelper.java Mon Oct  3 21:46:18 2011
@@ -293,7 +293,9 @@ public class DomainResourceHelper {
     private JsonRepresentation representationWithSelfFor(final ObjectAdapter objectAdapter, final ObjectAction action) {
         JsonRepresentation representation = JsonRepresentation.newMap();
         String oid = OidUtils.getOidStr(resourceContext, objectAdapter);
-        final JsonRepresentation repBuilder = LinkReprBuilder.newBuilder(resourceContext, "self", "objects/%s/actions/%s/invoke", oid, action.getId()).render();
+        // TODO: review; can't be more specific with the media type because we don't have a media type for action/invoke
+        final JsonRepresentation repBuilder = 
+                LinkReprBuilder.newBuilder(resourceContext, "self", MediaType.APPLICATION_JSON_TYPE, "objects/%s/actions/%s/invoke", oid, action.getId()).render();
         representation.mapPut("self", repBuilder);
         return representation;
     }

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=1178596&r1=1178595&r2=1178596&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 Mon Oct  3 21:46:18 2011
@@ -31,6 +31,7 @@ import org.apache.isis.core.progmodel.fa
 import org.apache.isis.core.progmodel.facets.collections.validate.CollectionValidateAddToFacet;
 import org.apache.isis.core.progmodel.facets.collections.validate.CollectionValidateRemoveFromFacet;
 import org.apache.isis.core.progmodel.facets.properties.validate.PropertyValidateFacet;
+import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.applib.util.Enums;
 import org.apache.isis.viewer.json.viewer.representations.HttpMethod;
 
@@ -38,7 +39,7 @@ import com.google.common.collect.Immutab
 
 public enum MemberType {
 
-    OBJECT_PROPERTY("properties/", "propertyId", "propertyDetails", 
+    OBJECT_PROPERTY("properties/", "propertyId", "propertyDetails", RepresentationType.OBJECT_PROPERTY, 
             ImmutableMap.of(
                 "modify", MutatorSpec.of(PropertyValidateFacet.class, PropertySetterFacet.class, HttpMethod.PUT, BodyArgs.ONE),
                 "clear", MutatorSpec.of(PropertyValidateFacet.class, PropertyClearFacet.class, HttpMethod.DELETE, BodyArgs.NONE)
@@ -51,7 +52,7 @@ public enum MemberType {
     /**
      * {@link #getMutators()} are keyed by {@link CollectionSemantics#getAddToKey()}
      */
-    OBJECT_COLLECTION("collections/", "collectionId", "collectionDetails", 
+    OBJECT_COLLECTION("collections/", "collectionId", "collectionDetails", RepresentationType.OBJECT_COLLECTION, 
             ImmutableMap.of(
                 "addToSet", MutatorSpec.of(CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.PUT, BodyArgs.ONE),
                 "addToList", MutatorSpec.of(CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.POST, BodyArgs.ONE),
@@ -65,7 +66,7 @@ public enum MemberType {
     /**
      * {@link #getMutators()} are keyed by {@link ActionSemantics#getInvokeKey()}
      */
-    OBJECT_ACTION("actions/", "actionId", "actionDetails",
+    OBJECT_ACTION("actions/", "actionId", "actionDetails", RepresentationType.OBJECT_ACTION,
             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"),
@@ -78,17 +79,20 @@ public enum MemberType {
         }
     };
 
-    private final Map<String, MutatorSpec> mutators;
-    
     private final String urlPart;
+    private final String jsProp;
     private final String detailsRel;
     private final String name;
-    private final String jsProp;
+    private final RepresentationType representationType;
+
+    private final Map<String, MutatorSpec> mutators;
     
-    private MemberType(String urlPart, String jsProp, String detailsRel, Map<String, MutatorSpec> mutators) {
+
+    private MemberType(String urlPart, String jsProp, String detailsRel, RepresentationType representationType, Map<String, MutatorSpec> mutators) {
         this.urlPart = urlPart;
         this.jsProp = jsProp;
         this.detailsRel = detailsRel;
+        this.representationType = representationType;
         this.mutators = mutators;
         name = Enums.enumToCamelCase(this);
     }
@@ -97,7 +101,7 @@ public enum MemberType {
         return jsProp;
     }
 
-    public String urlPart() {
+    public String getUrlPart() {
         return urlPart;
     }
     
@@ -136,6 +140,10 @@ public enum MemberType {
 						OBJECT_COLLECTION;
 	}
 
+    public RepresentationType getRepresentationType() {
+        return representationType;
+    }
+
     public String getDetailsRel() {
         return detailsRel;
     }
@@ -155,4 +163,5 @@ public enum MemberType {
     }
 
 
+
 }

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=1178596&r1=1178595&r2=1178596&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 Mon Oct  3 21:46:18 2011
@@ -28,8 +28,8 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 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.domaintypes.DomainTypeReprBuilder;
-import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypeActionReprBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.DomainTypeReprRenderer;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypeActionReprRenderer;
 import org.codehaus.jackson.node.NullNode;
 
 import com.google.common.collect.Lists;
@@ -206,7 +206,7 @@ public class ObjectActionReprRenderer ex
     }
 
      private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
-         links.arrayAdd(TypeActionReprBuilder.newLinkToBuilder(resourceContext, "typeAction", objectAdapter.getSpecification(), objectMember).render());
+         links.arrayAdd(TypeActionReprRenderer.newLinkToBuilder(resourceContext, "typeAction", objectAdapter.getSpecification(), objectMember).render());
      }
 
      private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
@@ -216,7 +216,7 @@ public class ObjectActionReprRenderer ex
             links.arrayAdd(contributedByLink);
         }
 
-       links.arrayAdd(DomainTypeReprBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).render());
+       links.arrayAdd(DomainTypeReprRenderer.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).render());
     }
 
 

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=1178596&r1=1178595&r2=1178596&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 Mon Oct  3 21:46:18 2011
@@ -29,8 +29,8 @@ import org.apache.isis.viewer.json.viewe
 import org.apache.isis.viewer.json.viewer.representations.LinkReprBuilder;
 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.domaintypes.DomainTypeReprBuilder;
-import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypeCollectionReprBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.DomainTypeReprRenderer;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypeCollectionReprRenderer;
 
 import com.google.common.collect.Lists;
 
@@ -140,11 +140,11 @@ public class ObjectCollectionReprRendere
     }
 
     private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(TypeCollectionReprBuilder.newLinkToBuilder(resourceContext, "typeCollection", objectAdapter.getSpecification(), objectMember).render());
+        links.arrayAdd(TypeCollectionReprRenderer.newLinkToBuilder(resourceContext, "typeCollection", objectAdapter.getSpecification(), objectMember).render());
     }
 
     private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(DomainTypeReprBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).render());
+        links.arrayAdd(DomainTypeReprRenderer.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).render());
     }
 
 

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=1178596&r1=1178595&r2=1178596&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 Mon Oct  3 21:46:18 2011
@@ -27,8 +27,8 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 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.domaintypes.DomainTypeReprBuilder;
-import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypePropertyReprBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.DomainTypeReprRenderer;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypePropertyReprRenderer;
 
 import com.google.common.collect.Lists;
 
@@ -156,11 +156,11 @@ public class ObjectPropertyReprRenderer 
     }
 
     private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(TypePropertyReprBuilder.newLinkToBuilder(resourceContext, "typeProperty", objectAdapter.getSpecification(), objectMember).render());
+        links.arrayAdd(TypePropertyReprRenderer.newLinkToBuilder(resourceContext, "typeProperty", objectAdapter.getSpecification(), objectMember).render());
     }
 
     private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(DomainTypeReprBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).render());
+        links.arrayAdd(DomainTypeReprRenderer.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).render());
     }
 
 }
\ 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/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/AbstractTypeMemberReprBuilder.java?rev=1178596&r1=1178595&r2=1178596&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/AbstractTypeMemberReprBuilder.java Mon Oct  3 21:46:18 2011
@@ -18,22 +18,53 @@ package org.apache.isis.viewer.json.view
 
 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;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
-import org.apache.isis.viewer.json.viewer.representations.ReprBuilderAbstract;
+import org.apache.isis.viewer.json.viewer.representations.LinkReprBuilder;
+import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
 
-public abstract class AbstractTypeMemberReprBuilder<R extends ReprBuilderAbstract<R>, T extends ObjectMember> extends ReprBuilderAbstract<R> {
+public abstract class AbstractTypeMemberReprBuilder<R extends ReprRendererAbstract<R, SpecAndMember<T>>, T extends ObjectMember> extends ReprRendererAbstract<R, SpecAndMember<T>> {
 
-    protected final ObjectSpecification objectSpecification;
-    protected final MemberType memberType;
-    protected final T objectMember;
-
-    public AbstractTypeMemberReprBuilder(ResourceContext resourceContext, ObjectSpecification objectSpecification, MemberType memberType, T objectMember) {
-        super(resourceContext);
-        this.objectSpecification = objectSpecification;
-        this.memberType = memberType;
-        this.objectMember = objectMember;
+    protected ObjectSpecification objectSpecification;
+    protected MemberType memberType;
+    protected T objectMember;
+
+    public AbstractTypeMemberReprBuilder(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
+    }
+
+    public ObjectSpecification getObjectSpecification() {
+        return objectSpecification;
+    }
+    
+    public T getObjectMember() {
+        return objectMember;
     }
 
+    public MemberType getMemberType() {
+        return memberType;
+    }
     
+    @Override
+    public R with(SpecAndMember<T> specAndMember) {
+        objectSpecification = specAndMember.getObjectSpecification();
+        objectMember = specAndMember.getObjectMember();
+        memberType = MemberType.determineFrom(objectMember);
+        return cast(this);
+    }
+    
+    
+    protected void includeSelfIfRequired() {
+        if(!includesSelf) {
+            return;
+        } 
+        
+        representation.mapPut("self", 
+            LinkReprBuilder.newBuilder(getResourceContext(), "self", getRepresentationType(), "domainTypes/%s/%s/%s", 
+                    getObjectSpecification().getFullIdentifier(), getMemberType().getUrlPart(), getObjectMember().getId()).render());
+    }
+
+
 }
\ No newline at end of file

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprRenderer.java (from r1177860, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprBuilder.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/DomainTypeReprRenderer.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprBuilder.java&r1=1177860&r2=1178596&rev=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprRenderer.java Mon Oct  3 21:46:18 2011
@@ -18,30 +18,59 @@ package org.apache.isis.viewer.json.view
 
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 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.LinkReprBuilder;
-import org.apache.isis.viewer.json.viewer.representations.ReprBuilderAbstract;
-
-public class DomainTypeReprBuilder extends ReprBuilderAbstract<DomainTypeReprBuilder> {
-
-    public static DomainTypeReprBuilder newBuilder(ResourceContext representationContext) {
-        return new DomainTypeReprBuilder(representationContext);
+import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
+import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
+import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
+
+public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprRenderer, ObjectSpecification> {
+
+    public static class Factory extends ReprRendererFactoryAbstract {
+        public Factory() {
+            super(RepresentationType.DOMAIN_TYPE);
+        }
+
+        @Override
+        public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new DomainTypeReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
     }
 
     public static LinkReprBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpec) {
         String typeFullName = objectSpec.getFullIdentifier();
         String url = "domainTypes/" + typeFullName;
-        return LinkReprBuilder.newBuilder(resourceContext, rel, url);
+        return LinkReprBuilder.newBuilder(resourceContext, rel, RepresentationType.DOMAIN_TYPE, url);
+    }
+
+    private ObjectSpecification objectSpecification;
+
+    public DomainTypeReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
     }
 
-    public DomainTypeReprBuilder(ResourceContext resourceContext) {
-        super(resourceContext);
+    @Override
+    public DomainTypeReprRenderer with(ObjectSpecification objectSpecification) {
+        this.objectSpecification = objectSpecification;
+        return cast(this);
     }
 
 
     public JsonRepresentation render() {
+
+        // self
+        if(includesSelf) {
+            representation.mapPut("self", newLinkToBuilder(getResourceContext(), "self", objectSpecification).render());
+        }
+        
+        
+        
+        // links and extensions
+        representation.mapPut("links", JsonRepresentation.newArray());
+        representation.mapPut("extensions", JsonRepresentation.newMap());
+
         return representation;
     }
 
-
 }
\ 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/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=1178596&r1=1178595&r2=1178596&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 Mon Oct  3 21:46:18 2011
@@ -28,12 +28,18 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.applib.RestfulMediaType;
+import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.json.applib.domaintypes.DomainTypeResource;
+import org.apache.isis.viewer.json.viewer.JsonApplicationException;
 import org.apache.isis.viewer.json.viewer.representations.LinkReprBuilder;
+import org.apache.isis.viewer.json.viewer.representations.RendererFactory;
 import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainObjectReprRenderer;
 
 /**
  * Implementation note: it seems to be necessary to annotate the implementation with {@link Path} rather than the
@@ -49,19 +55,16 @@ public class DomainTypeResourceServersid
     public Response domainTypes() {
         init();
 
-        JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes").render());
-        
-        JsonRepresentation specList = JsonRepresentation.newArray();
         final Collection<ObjectSpecification> allSpecifications = getSpecificationLoader().allSpecifications();
-        for (ObjectSpecification objectSpec : allSpecifications) {
-            final LinkReprBuilder linkBuilder = LinkReprBuilder.newBuilder(getResourceContext(), "domainType", "domainTypes/%s", objectSpec.getFullIdentifier());
-            specList.arrayAdd(linkBuilder.render());
-        }
+
+        final RendererFactory rendererFactory = 
+                rendererFactoryRegistry.find(RepresentationType.DOMAIN_TYPES);
         
-        representation.mapPut("domainTypes", specList);
+        final DomainTypesReprRenderer renderer = 
+                (DomainTypesReprRenderer) rendererFactory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+        renderer.with(allSpecifications).includesSelf();
         
-        return responseOfOk(RepresentationType.DOMAIN_TYPE, Caching.ONE_DAY, representation).build();
+        return responseOfOk(Caching.ONE_DAY, renderer).build();
     }
 
     
@@ -71,10 +74,16 @@ public class DomainTypeResourceServersid
     public Response domainType(@PathParam("domainType") final String domainType){
         init();
 
-        JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s", domainType).render());
-        
-        return responseOfOk(RepresentationType.DOMAIN_TYPE, Caching.ONE_DAY, representation).build();
+        final ObjectSpecification objectSpec = getSpecificationLoader().loadSpecification(domainType);
+
+        final RendererFactory rendererFactory = 
+                rendererFactoryRegistry.find(RepresentationType.DOMAIN_TYPE);
+
+        final DomainTypeReprRenderer renderer = 
+                (DomainTypeReprRenderer) rendererFactory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+        renderer.with(objectSpec).includesSelf();
+
+        return responseOfOk(Caching.ONE_DAY, renderer).build();
     }
 
     @GET
@@ -85,10 +94,25 @@ public class DomainTypeResourceServersid
             @PathParam("propertyId") final String propertyId){
         init();
 
-        JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/properties/%s", domainType, propertyId).render());
+        final ObjectSpecification objectSpec = getSpecificationLoader().loadSpecification(domainType);
+        if(objectSpec == null) {
+            throw JsonApplicationException.create(HttpStatusCode.NOT_FOUND);
+        }
         
-        return responseOfOk(RepresentationType.TYPE_PROPERTY, Caching.ONE_DAY, representation).build();
+        final ObjectMember objectMember = objectSpec.getAssociation(propertyId);
+        if(objectMember == null || objectMember.isOneToManyAssociation()) {
+            throw JsonApplicationException.create(HttpStatusCode.NOT_FOUND);
+        }
+        OneToOneAssociation property = (OneToOneAssociation) objectMember;
+
+        final RendererFactory rendererFactory = 
+                rendererFactoryRegistry.find(RepresentationType.TYPE_PROPERTY);
+        
+        final TypePropertyReprRenderer renderer = 
+                (TypePropertyReprRenderer) rendererFactory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+        renderer.with(new SpecAndProperty(objectSpec, property)).includesSelf();
+
+        return responseOfOk(Caching.ONE_DAY, renderer).build();
     }
 
     @GET
@@ -100,7 +124,8 @@ public class DomainTypeResourceServersid
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainType/%s/collections/%s", domainType, collectionId).render());
+        representation.mapPut("self", 
+                LinkReprBuilder.newBuilder(getResourceContext(), "self", RepresentationType.TYPE_COLLECTION, "domainType/%s/collections/%s", domainType, collectionId).render());
         
         return responseOfOk(RepresentationType.TYPE_COLLECTION, Caching.ONE_DAY, representation).build();
     }
@@ -114,7 +139,8 @@ public class DomainTypeResourceServersid
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/actions/%s", domainType, actionId).render());
+        representation.mapPut("self", 
+                LinkReprBuilder.newBuilder(getResourceContext(), "self", RepresentationType.TYPE_ACTION, "domainTypes/%s/actions/%s", domainType, actionId).render());
         
         return responseOfOk(RepresentationType.TYPE_ACTION, Caching.ONE_DAY, representation).build();
     }
@@ -129,7 +155,8 @@ public class DomainTypeResourceServersid
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/actions/%s/params/%s", domainType, actionId, paramName).render());
+        representation.mapPut("self", 
+                LinkReprBuilder.newBuilder(getResourceContext(), "self", RepresentationType.TYPE_ACTION_PARAMETER, "domainTypes/%s/actions/%s/params/%s", domainType, actionId, paramName).render());
         
         return responseOfOk(RepresentationType.TYPE_COLLECTION, Caching.ONE_DAY, representation).build();
     }

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypesReprRenderer.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/DomainTypesReprRenderer.java?rev=1178596&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypesReprRenderer.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypesReprRenderer.java Mon Oct  3 21:46:18 2011
@@ -0,0 +1,64 @@
+package org.apache.isis.viewer.json.viewer.resources.domaintypes;
+
+import java.util.Collection;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+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.LinkReprBuilder;
+import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
+import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
+import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
+
+public class DomainTypesReprRenderer extends ReprRendererAbstract<DomainTypesReprRenderer, Collection<ObjectSpecification>> {
+
+    private Collection<ObjectSpecification> specifications;
+
+    public static class Factory extends ReprRendererFactoryAbstract {
+        public Factory() {
+            super(RepresentationType.DOMAIN_TYPES);
+        }
+
+        @Override
+        public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new DomainTypesReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
+    }
+
+    private DomainTypesReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
+    }
+
+    @Override
+    public DomainTypesReprRenderer with(Collection<ObjectSpecification> specifications) {
+        this.specifications = specifications;
+        return this;
+    }
+
+    @Override
+    public JsonRepresentation render() {
+        
+        // self
+        if(includesSelf) {
+            withSelf("domainTypes");
+        }
+        
+        JsonRepresentation specList = JsonRepresentation.newArray();
+        for (ObjectSpecification objectSpec : specifications) {
+            final LinkReprBuilder linkBuilder = 
+                    LinkReprBuilder.newBuilder(getResourceContext(), "domainType", RepresentationType.DOMAIN_TYPE, "domainTypes/%s", objectSpec.getFullIdentifier());
+            specList.arrayAdd(linkBuilder.render());
+        }
+        
+        representation.mapPut("domainTypes", specList);
+
+        // links and extensions
+        representation.mapPut("links", JsonRepresentation.newArray());
+        representation.mapPut("extensions", JsonRepresentation.newMap());
+        
+        return representation;
+    }
+
+
+}
\ No newline at end of file

Added: 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/SpecAndAction.java?rev=1178596&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndAction.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndAction.java Mon Oct  3 21:46:18 2011
@@ -0,0 +1,12 @@
+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.ObjectAction;
+
+public class SpecAndAction extends SpecAndMember<ObjectAction> {
+    
+    public SpecAndAction(ObjectSpecification objectSpecification, ObjectAction action) {
+        super(objectSpecification, action);
+    }
+    
+}
\ No newline at end of file

Added: 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/SpecAndCollection.java?rev=1178596&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndCollection.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndCollection.java Mon Oct  3 21:46:18 2011
@@ -0,0 +1,12 @@
+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.OneToManyAssociation;
+
+public class SpecAndCollection extends SpecAndMember<OneToManyAssociation> {
+    
+    public SpecAndCollection(ObjectSpecification objectSpecification, OneToManyAssociation collection) {
+        super(objectSpecification, collection);
+    }
+    
+}
\ No newline at end of file

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndMember.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/SpecAndMember.java?rev=1178596&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndMember.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndMember.java Mon Oct  3 21:46:18 2011
@@ -0,0 +1,24 @@
+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;
+
+public abstract class SpecAndMember<T extends ObjectMember> {
+    
+    private final ObjectSpecification objectSpecification;
+    private final T objectMember;
+    
+    public SpecAndMember(ObjectSpecification objectSpecification, T objectMember) {
+        this.objectSpecification = objectSpecification;
+        this.objectMember = objectMember;
+    }
+    public ObjectSpecification getObjectSpecification() {
+        return objectSpecification;
+    }
+    public T getObjectMember() {
+        return objectMember;
+    }
+
+    
+    
+}
\ No newline at end of file

Added: 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/SpecAndProperty.java?rev=1178596&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndProperty.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/SpecAndProperty.java Mon Oct  3 21:46:18 2011
@@ -0,0 +1,12 @@
+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.OneToOneAssociation;
+
+public class SpecAndProperty extends SpecAndMember<OneToOneAssociation> {
+    
+    public SpecAndProperty(ObjectSpecification objectSpecification, OneToOneAssociation property) {
+        super(objectSpecification, property);
+    }
+    
+}
\ No newline at end of file

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java (from r1177860, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprBuilder.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?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprBuilder.java&r1=1177860&r2=1178596&rev=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java Mon Oct  3 21:46:18 2011
@@ -16,32 +16,51 @@
  */
 package org.apache.isis.viewer.json.viewer.resources.domaintypes;
 
+import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 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.LinkReprBuilder;
-import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
+import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
+import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
 
-public class TypeActionReprBuilder extends AbstractTypeMemberReprBuilder<TypeActionReprBuilder, ObjectAction> {
+public class TypeActionReprRenderer extends AbstractTypeMemberReprBuilder<TypeActionReprRenderer, ObjectAction> {
 
-    public static TypeActionReprBuilder newBuilder(ResourceContext representationContext, ObjectSpecification objectSpecification, ObjectAction objectAction) {
-        return new TypeActionReprBuilder(representationContext, objectSpecification, objectAction);
+    public static class Factory extends ReprRendererFactoryAbstract {
+
+        public Factory() {
+            super(RepresentationType.TYPE_ACTION);
+        }
+
+        @Override
+        public ReprRenderer<?,?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new TypeActionReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
     }
 
     public static LinkReprBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpecification, ObjectAction objectAction) {
         String typeFullName = objectSpecification.getFullIdentifier();
         String actionId = objectAction.getId();
         String url = "domainTypes/" + typeFullName + "/actions/" + actionId;
-        return LinkReprBuilder.newBuilder(resourceContext, rel, url);
+        return LinkReprBuilder.newBuilder(resourceContext, rel, RepresentationType.TYPE_ACTION, url);
     }
 
-    public TypeActionReprBuilder(ResourceContext resourceContext, ObjectSpecification objectSpecification, ObjectAction objectAction) {
-        super(resourceContext, objectSpecification, MemberType.OBJECT_ACTION, objectAction);
+    public TypeActionReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
     }
 
 
     public JsonRepresentation render() {
+
+        // self
+        includeSelfIfRequired();
+
+        // links and extensions
+        representation.mapPut("links", JsonRepresentation.newArray());
+        representation.mapPut("extensions", JsonRepresentation.newMap());
+
         return representation;
     }
 

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java (from r1177860, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprBuilder.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?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprBuilder.java&r1=1177860&r2=1178596&rev=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java Mon Oct  3 21:46:18 2011
@@ -19,28 +19,45 @@ package org.apache.isis.viewer.json.view
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 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.LinkReprBuilder;
-import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
+import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
+import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
 
-public class TypeCollectionReprBuilder extends AbstractTypeMemberReprBuilder<TypeCollectionReprBuilder, OneToManyAssociation> {
+public class TypeCollectionReprRenderer extends AbstractTypeMemberReprBuilder<TypeCollectionReprRenderer, OneToManyAssociation> {
 
-    public static TypeCollectionReprBuilder newBuilder(ResourceContext representationContext, ObjectSpecification objectSpecification, OneToManyAssociation collection) {
-        return new TypeCollectionReprBuilder(representationContext, objectSpecification, collection);
+    public static class Factory extends ReprRendererFactoryAbstract {
+
+        public Factory() {
+            super(RepresentationType.TYPE_COLLECTION);
+        }
+
+        @Override
+        public ReprRenderer<?,?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new TypeCollectionReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
     }
 
     public static LinkReprBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpecification, OneToManyAssociation collection) {
         String typeFullName = objectSpecification.getFullIdentifier();
         String collectionId = collection.getId();
         String url = "domainTypes/" + typeFullName + "/collections/" + collectionId;
-        return LinkReprBuilder.newBuilder(resourceContext, rel, url);
+        return LinkReprBuilder.newBuilder(resourceContext, rel, RepresentationType.TYPE_COLLECTION, url);
     }
 
-    public TypeCollectionReprBuilder(ResourceContext resourceContext, ObjectSpecification objectSpecification, OneToManyAssociation collection) {
-        super(resourceContext, objectSpecification, MemberType.OBJECT_COLLECTION, collection);
+    public TypeCollectionReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
     }
 
     public JsonRepresentation render() {
+
+        includeSelfIfRequired();
+
+        // links and extensions
+        representation.mapPut("links", JsonRepresentation.newArray());
+        representation.mapPut("extensions", JsonRepresentation.newMap());
+
         return representation;
     }
 

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java (from r1177860, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprBuilder.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?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprBuilder.java&r1=1177860&r2=1178596&rev=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java Mon Oct  3 21:46:18 2011
@@ -19,28 +19,46 @@ package org.apache.isis.viewer.json.view
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 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.LinkReprBuilder;
-import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
+import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
+import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
 
-public class TypePropertyReprBuilder extends AbstractTypeMemberReprBuilder<TypePropertyReprBuilder, OneToOneAssociation> {
+public class TypePropertyReprRenderer extends AbstractTypeMemberReprBuilder<TypePropertyReprRenderer, OneToOneAssociation> {
 
-    public static TypePropertyReprBuilder newBuilder(ResourceContext representationContext, ObjectSpecification objectSpecification, OneToOneAssociation property) {
-        return new TypePropertyReprBuilder(representationContext, objectSpecification, property);
+    public static class Factory extends ReprRendererFactoryAbstract {
+
+        public Factory() {
+            super(RepresentationType.TYPE_PROPERTY);
+        }
+
+        @Override
+        public ReprRenderer<?,?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new TypePropertyReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
     }
 
     public static LinkReprBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpecification, OneToOneAssociation property) {
         String typeFullName = objectSpecification.getFullIdentifier();
         String propertyId = property.getId();
         String url = "domainTypes/" + typeFullName + "/properties/" + propertyId;
-        return LinkReprBuilder.newBuilder(resourceContext, rel, url);
+        return LinkReprBuilder.newBuilder(resourceContext, rel, RepresentationType.TYPE_PROPERTY, url);
     }
 
-    public TypePropertyReprBuilder(ResourceContext resourceContext, ObjectSpecification objectSpecification, OneToOneAssociation property) {
-        super(resourceContext, objectSpecification, MemberType.OBJECT_COLLECTION, property);
+    public TypePropertyReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
     }
 
     public JsonRepresentation render() {
+        
+        // self
+        includeSelfIfRequired();
+
+        // links and extensions
+        representation.mapPut("links", JsonRepresentation.newArray());
+        representation.mapPut("extensions", JsonRepresentation.newMap());
+
         return representation;
     }
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.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/home/HomePageReprRenderer.java?rev=1178596&r1=1178595&r2=1178596&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java Mon Oct  3 21:46:18 2011
@@ -2,6 +2,8 @@ package org.apache.isis.viewer.json.view
 
 import java.util.List;
 
+import javax.ws.rs.core.MediaType;
+
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
@@ -54,7 +56,7 @@ public class HomePageReprRenderer extend
         putLinkToServices(representation);
         
         // capabilities
-        representation.mapPut("capabilities", LinkReprBuilder.newBuilder(getResourceContext(), "capabilities", "capabilities").render());
+        putLinkToCapabilities(representation);
 
         // links and extensions
         representation.mapPut("links", JsonRepresentation.newArray());
@@ -63,9 +65,15 @@ public class HomePageReprRenderer extend
         return representation;
     }
 
+    private void putLinkToCapabilities(final JsonRepresentation representation) {
+        representation.mapPut("capabilities", 
+                LinkReprBuilder.newBuilder(getResourceContext(), "capabilities", RepresentationType.CAPABILITIES, "capabilities").render());
+    }
+
     private void putLinkToServices(JsonRepresentation representation) {
 
-        final LinkReprBuilder servicesLinkBuilder = LinkReprBuilder.newBuilder(getResourceContext(), "services", "services");
+        final LinkReprBuilder servicesLinkBuilder = 
+                LinkReprBuilder.newBuilder(getResourceContext(), "services", RepresentationType.LIST, "services");
         
         final List<String> followLinks = getResourceContext().getArg(QueryParameter.FOLLOW_LINKS);
         if(followLinks.contains("services")) {
@@ -86,7 +94,8 @@ public class HomePageReprRenderer extend
     }
 
     private void putLinkToUser(JsonRepresentation representation) {
-        final LinkReprBuilder userLinkBuilder = LinkReprBuilder.newBuilder(getResourceContext(), "user", "user");
+        final LinkReprBuilder userLinkBuilder = 
+                LinkReprBuilder.newBuilder(getResourceContext(), "user", RepresentationType.USER, "user");
         
         final List<String> followLinks = getResourceContext().getArg(QueryParameter.FOLLOW_LINKS);
         if(followLinks.contains("user")) {