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/01 00:19:29 UTC

svn commit: r1177860 [2/2] - in /incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer: representations/ resources/ resources/capabilities/ resources/domainobjects/ resources/domaintypes/ resources/home...

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceServerside.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/DomainServiceResourceServerside.java?rev=1177860&r1=1177859&r2=1177860&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceServerside.java Fri Sep 30 22:19:28 2011
@@ -32,17 +32,21 @@ import javax.ws.rs.core.Response;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 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.domainobjects.DomainServiceResource;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.RendererFactoryRegistry;
 import org.apache.isis.viewer.json.viewer.representations.ReprBuilderAbstract;
 import org.apache.isis.viewer.json.viewer.representations.ReprBuilder;
-import org.apache.isis.viewer.json.viewer.representations.TypedReprBuilder;
-import org.apache.isis.viewer.json.viewer.representations.TypedReprBuilderFactory;
+import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
+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.DomainResourceHelper.Intent;
 
 @Path("/services")
-public class DomainServiceResourceServerside extends DomainResourceAbstract implements
+public class DomainServiceResourceServerside extends ResourceAbstract implements
         DomainServiceResource {
 
     @Override
@@ -72,14 +76,14 @@ public class DomainServiceResourceServer
         
         final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
         
-        final TypedReprBuilderFactory factory = builderFactoryRegistry.find(RepresentationType.DOMAIN_OBJECT);
-        final DomainObjectReprBuilder reprBuilder = 
-                (DomainObjectReprBuilder) factory.newBuilder(getResourceContext());
-        reprBuilder.usingLinkToBuilder(new DomainServiceLinkToBuilder())
-                    .withSelf()
+        final RendererFactory factory = rendererFactoryRegistry.find(RepresentationType.DOMAIN_OBJECT);
+        final DomainObjectReprRenderer renderer = 
+                (DomainObjectReprRenderer) factory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+        renderer.usingLinkToBuilder(new DomainServiceLinkToBuilder())
+                    .includesSelf()
                     .with(serviceAdapter);
         
-        return responseOfOk(RepresentationType.DOMAIN_OBJECT, Caching.ONE_DAY, reprBuilder).build();
+        return responseOfOk(RepresentationType.DOMAIN_OBJECT, Caching.ONE_DAY, renderer).build();
     }
 
 
@@ -95,15 +99,20 @@ public class DomainServiceResourceServer
             @PathParam("propertyId") final String propertyId) {
         init();
 
+        final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext());
+
         final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
-        final OneToOneAssociation property = getPropertyThatIsVisibleAndUsable(
+        final OneToOneAssociation property = helper.getPropertyThatIsVisibleAndUsable(
                 serviceAdapter, propertyId, Intent.ACCESS);
 
-        ResourceContext resourceContext = getResourceContext();
-        final ObjectPropertyReprBuilder builder = ObjectPropertyReprBuilder.newBuilder(
-                resourceContext, serviceAdapter, property);
-
-        return responseOfOk(RepresentationType.OBJECT_PROPERTY, Caching.ONE_DAY, builder).build();
+        RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.OBJECT_PROPERTY);
+        final ObjectPropertyReprRenderer renderer = 
+                (ObjectPropertyReprRenderer) factory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+        
+        renderer.with(new ObjectAndProperty(serviceAdapter, property))
+                .withDetailsLink();
+        
+        return responseOfOk(RepresentationType.OBJECT_PROPERTY, Caching.ONE_DAY, renderer.render()).build();
     }
 
 
@@ -120,9 +129,11 @@ public class DomainServiceResourceServer
             @PathParam("actionId") final String actionId) {
         init();
 
+        final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext());
+
         final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
 
-        return actionPrompt(actionId, serviceAdapter);
+        return helper.actionPrompt(actionId, serviceAdapter);
     }
 
     

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ListReprRenderer.java (from r1177294, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListReprBuilder.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/ListReprRenderer.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ListReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListReprBuilder.java&r1=1177294&r2=1177860&rev=1177860&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ListReprRenderer.java Fri Sep 30 22:19:28 2011
@@ -17,39 +17,45 @@
 package org.apache.isis.viewer.json.viewer.resources.domainobjects;
 
 import java.util.Collection;
-import java.util.List;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 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;
-
-public class DomainObjectListReprBuilder extends ReprBuilderAbstract<DomainObjectListReprBuilder> {
-
-    private ObjectAdapterLinkToBuilder objectAdapterLinkToBuilder;
+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 ListReprRenderer extends ReprRendererAbstract<ListReprRenderer, Collection<ObjectAdapter>> {
+
+    public static class Factory extends ReprRendererFactoryAbstract {
+        public Factory() {
+            super(RepresentationType.LIST);
+        }
 
-    public static DomainObjectListReprBuilder newBuilder(ResourceContext resourceContext, JsonRepresentation representation) {
-        return new DomainObjectListReprBuilder(resourceContext, representation);
+        @Override
+        public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new ListReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
     }
 
-    public static DomainObjectListReprBuilder newBuilder(ResourceContext resourceContext) {
-        return new DomainObjectListReprBuilder(resourceContext, JsonRepresentation.newMap());
-    }
+    private ObjectAdapterLinkToBuilder objectAdapterLinkToBuilder;
 
-    private DomainObjectListReprBuilder(ResourceContext resourceContext, JsonRepresentation representation) {
-        super(resourceContext, representation);
+    private ListReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
         usingLinkToBuilder(new DomainObjectLinkToBuilder());
     }
     
-    public DomainObjectListReprBuilder usingLinkToBuilder(ObjectAdapterLinkToBuilder objectAdapterLinkToBuilder) {
+    public ListReprRenderer usingLinkToBuilder(ObjectAdapterLinkToBuilder objectAdapterLinkToBuilder) {
         this.objectAdapterLinkToBuilder = objectAdapterLinkToBuilder.usingResourceContext(resourceContext);
         return this;
     }
 
-    public DomainObjectListReprBuilder withAdapters(Collection<ObjectAdapter> objectAdapters) {
+    @Override
+    public ListReprRenderer with(Collection<ObjectAdapter> objectAdapters) {
         JsonRepresentation list = JsonRepresentation.newArray();
         for(ObjectAdapter adapter: objectAdapters) {
-            JsonRepresentation linkToObject = objectAdapterLinkToBuilder.with(adapter).linkToAdapter().build();
+            JsonRepresentation linkToObject = objectAdapterLinkToBuilder.with(adapter).linkToAdapter().render();
             list.arrayAdd(linkToObject);
         }
         representation.mapPut("values", list);
@@ -57,7 +63,7 @@ public class DomainObjectListReprBuilder
     }
 
 
-    public JsonRepresentation build() {
+    public JsonRepresentation render() {
         withLinks();
         withExtensions();
 

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=1177860&r1=1177859&r2=1177860&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 Fri Sep 30 22:19:28 2011
@@ -26,6 +26,7 @@ import org.apache.isis.core.metamodel.fa
 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.ObjectMember;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.progmodel.facets.actions.validate.ActionValidationFacet;
 import org.apache.isis.core.progmodel.facets.collections.validate.CollectionValidateAddToFacet;
 import org.apache.isis.core.progmodel.facets.collections.validate.CollectionValidateRemoveFromFacet;
@@ -143,4 +144,15 @@ public enum MemberType {
         return name;
     }
 
+    public static MemberType determineFrom(ObjectMember objectMember) {
+        if (objectMember instanceof ObjectAction) {
+            return MemberType.OBJECT_ACTION;
+        }
+        if (objectMember instanceof OneToOneAssociation) {
+            return MemberType.OBJECT_PROPERTY;
+        }
+        return MemberType.OBJECT_COLLECTION;
+    }
+
+
 }

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java (from r1176973, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprBuilder.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?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprBuilder.java&r1=1176973&r2=1177860&rev=1177860&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java Fri Sep 30 22:19:28 2011
@@ -24,28 +24,40 @@ import org.apache.isis.core.metamodel.sp
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 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.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.codehaus.jackson.node.NullNode;
 
 import com.google.common.collect.Lists;
 
-public class ObjectActionReprBuilder extends AbstractObjectMemberReprBuilder<ObjectActionReprBuilder, ObjectAction> {
+public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<ObjectActionReprRenderer, ObjectAction> {
 
-	public static ObjectActionReprBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
-        return new ObjectActionReprBuilder(resourceContext, objectAdapter, objectAction);
+    public static class Factory extends ReprRendererFactoryAbstract {
+
+        public Factory() {
+            super(RepresentationType.OBJECT_ACTION);
+        }
+
+        @Override
+        public ReprRenderer<?,?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new ObjectActionReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
     }
 
-    protected ObjectActionReprBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
-        super(resourceContext, objectAdapter, MemberType.OBJECT_ACTION, objectAction);
-        
-        putId();
-        putMemberType();
+
+    private ObjectActionReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
     }
 
 
-    public JsonRepresentation build() {
+    public JsonRepresentation render() {
+        putId();
+        putMemberType();
+        
         putDisabledReasonIfDisabled();
         
         JsonRepresentation extensions = JsonRepresentation.newMap();
@@ -66,7 +78,7 @@ public class ObjectActionReprBuilder ext
     /////////////////////////////////////////////////////
 
     @Override
-    public ObjectActionReprBuilder withMutatorsIfEnabled() {
+    public ObjectActionReprRenderer withMutatorsIfEnabled() {
         if(usability().isVetoed()) {
             return cast(this);
         }
@@ -89,7 +101,7 @@ public class ObjectActionReprBuilder ext
                 linkToBuilder.linkToMember("invoke", memberType, objectMember, mutatorSpec.suffix)
                 .withHttpMethod(mutatorSpec.httpMethod)
                 .withArguments(arguments)
-                .build();
+                .render();
         representation.mapPut("invoke", detailsLink);
     }
     
@@ -120,7 +132,7 @@ public class ObjectActionReprBuilder ext
 	        if(objectMember.isContributed()) {
 	            ObjectActionParameter actionParameter = objectMember.getParameters().get(i);
 	            if (actionParameter.getSpecification().isOfType(objectAdapter.getSpecification())) {
-	                return DomainObjectReprBuilder.newLinkToBuilder(resourceContext, "object", objectAdapter).build();
+	                return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, "object", objectAdapter).render();
 	            }
 	        }
 	        return NullNode.instance;
@@ -131,7 +143,7 @@ public class ObjectActionReprBuilder ext
     // parameter details
     /////////////////////////////////////////////////////
 
-    public ObjectActionReprBuilder withParameterDetails() {
+    public ObjectActionReprRenderer withParameterDetails() {
     	List<Object> parameters = Lists.newArrayList();
 		for (int i=0; i< objectMember.getParameterCount(); i++) {
 			ObjectActionParameter param = objectMember.getParameters().get(i);
@@ -165,7 +177,7 @@ public class ObjectActionReprBuilder ext
         List<Object> list = Lists.newArrayList();
         for (final ObjectAdapter choiceAdapter : choiceAdapters) {
         	ObjectSpecification objectSpec = param.getSpecification();
-        	list.add(DomainObjectReprBuilder.valueOrRef(resourceContext, choiceAdapter, objectSpec));
+        	list.add(DomainObjectReprRenderer.valueOrRef(resourceContext, choiceAdapter, objectSpec));
         }
         return list;
 	}
@@ -176,7 +188,7 @@ public class ObjectActionReprBuilder ext
 			return null;
 		}
     	ObjectSpecification objectSpec = param.getSpecification();
-    	return DomainObjectReprBuilder.valueOrRef(resourceContext, defaultAdapter, objectSpec);
+    	return DomainObjectReprRenderer.valueOrRef(resourceContext, defaultAdapter, objectSpec);
 	}
 
 	
@@ -194,17 +206,17 @@ public class ObjectActionReprBuilder ext
     }
 
      private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
-         links.arrayAdd(TypeActionReprBuilder.newLinkToBuilder(resourceContext, "typeAction", objectAdapter.getSpecification(), objectMember).build());
+         links.arrayAdd(TypeActionReprBuilder.newLinkToBuilder(resourceContext, "typeAction", objectAdapter.getSpecification(), objectMember).render());
      }
 
      private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
        if(objectMember.isContributed()) {
             ObjectAdapter serviceAdapter = contributingServiceAdapter();
-            JsonRepresentation contributedByLink = DomainObjectReprBuilder.newLinkToBuilder(resourceContext, "contributedBy", serviceAdapter).build();
+            JsonRepresentation contributedByLink = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, "contributedBy", serviceAdapter).render();
             links.arrayAdd(contributedByLink);
         }
 
-       links.arrayAdd(DomainTypeReprBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).build());
+       links.arrayAdd(DomainTypeReprBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).render());
     }
 
 

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAndAction.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/ObjectAndAction.java?rev=1177860&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAndAction.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAndAction.java Fri Sep 30 22:19:28 2011
@@ -0,0 +1,12 @@
+package org.apache.isis.viewer.json.viewer.resources.domainobjects;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+
+public class ObjectAndAction extends ObjectAndMember<ObjectAction>{
+    
+    public ObjectAndAction(ObjectAdapter objectAdapter, ObjectAction action) {
+        super(objectAdapter, 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/domainobjects/ObjectAndCollection.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/ObjectAndCollection.java?rev=1177860&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAndCollection.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAndCollection.java Fri Sep 30 22:19:28 2011
@@ -0,0 +1,12 @@
+package org.apache.isis.viewer.json.viewer.resources.domainobjects;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+
+public class ObjectAndCollection extends ObjectAndMember<OneToManyAssociation>{
+    
+    public ObjectAndCollection(ObjectAdapter objectAdapter, OneToManyAssociation collection) {
+        super(objectAdapter, 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/domainobjects/ObjectAndMember.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/ObjectAndMember.java?rev=1177860&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAndMember.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAndMember.java Fri Sep 30 22:19:28 2011
@@ -0,0 +1,21 @@
+package org.apache.isis.viewer.json.viewer.resources.domainobjects;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+
+public abstract class ObjectAndMember<T extends ObjectMember> {
+    
+    private ObjectAdapter objectAdapter;
+    private T objectMember;
+    
+    public ObjectAndMember(ObjectAdapter objectAdapter, T objectMember) {
+        this.objectAdapter = objectAdapter;
+        this.objectMember = objectMember;
+    }
+    public ObjectAdapter getObjectAdapter() {
+        return objectAdapter;
+    }
+    public T getMember() {
+        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/domainobjects/ObjectAndProperty.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/ObjectAndProperty.java?rev=1177860&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAndProperty.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAndProperty.java Fri Sep 30 22:19:28 2011
@@ -0,0 +1,12 @@
+package org.apache.isis.viewer.json.viewer.resources.domainobjects;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+
+public class ObjectAndProperty extends ObjectAndMember<OneToOneAssociation>{
+    
+    public ObjectAndProperty(ObjectAdapter objectAdapter, OneToOneAssociation property) {
+        super(objectAdapter, 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/domainobjects/ObjectCollectionReprRenderer.java (from r1176973, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprBuilder.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?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprBuilder.java&r1=1176973&r2=1177860&rev=1177860&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java Fri Sep 30 22:19:28 2011
@@ -24,28 +24,38 @@ import org.apache.isis.core.metamodel.fa
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacetUtils;
 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.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 com.google.common.collect.Lists;
 
-public class ObjectCollectionReprBuilder extends AbstractObjectMemberReprBuilder<ObjectCollectionReprBuilder, OneToManyAssociation> {
+public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRenderer<ObjectCollectionReprRenderer, OneToManyAssociation> {
 
-    public static ObjectCollectionReprBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
-        return new ObjectCollectionReprBuilder(resourceContext, objectAdapter, otma);
-    }
+    public static class Factory extends ReprRendererFactoryAbstract {
 
-    public ObjectCollectionReprBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
-        super(resourceContext, objectAdapter, MemberType.OBJECT_COLLECTION, otma);
+        public Factory() {
+            super(RepresentationType.OBJECT_COLLECTION);
+        }
 
-        putId();
-        putMemberType();
+        @Override
+        public ReprRenderer<?,?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new ObjectCollectionReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
     }
 
+    private ObjectCollectionReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
+    }
     
-    public JsonRepresentation build() {
+    public JsonRepresentation render() {
+        putId();
+        putMemberType();
+        
         putDisabledReasonIfDisabled();
         
         JsonRepresentation extensions = JsonRepresentation.newMap();
@@ -67,7 +77,7 @@ public class ObjectCollectionReprBuilder
     /////////////////////////////////////////////////////
 
     @Override
-    public ObjectCollectionReprBuilder withMutatorsIfEnabled() {
+    public ObjectCollectionReprRenderer withMutatorsIfEnabled() {
         if(usability().isVetoed()) {
             return cast(this);
         }
@@ -81,7 +91,7 @@ public class ObjectCollectionReprBuilder
                         linkToBuilder.linkToMember(mutator, memberType, objectMember, mutatorSpec.suffix)
                         .withHttpMethod(mutatorSpec.httpMethod)
                         .withArguments(arguments)
-                        .build();
+                        .render();
                 representation.mapPut(mutator, detailsLink);
             }
         }
@@ -112,9 +122,9 @@ public class ObjectCollectionReprBuilder
         List<JsonRepresentation> list = Lists.newArrayList();
         for (final ObjectAdapter elementAdapter : facet.iterable(valueAdapter)) {
 
-            LinkReprBuilder newBuilder = DomainObjectReprBuilder.newLinkToBuilder(resourceContext, "object", elementAdapter);
+            LinkReprBuilder newBuilder = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, "object", elementAdapter);
 
-			list.add(newBuilder.build());
+			list.add(newBuilder.render());
         }
         
         return list;
@@ -130,11 +140,11 @@ public class ObjectCollectionReprBuilder
     }
 
     private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(TypeCollectionReprBuilder.newLinkToBuilder(resourceContext, "typeCollection", objectAdapter.getSpecification(), objectMember).build());
+        links.arrayAdd(TypeCollectionReprBuilder.newLinkToBuilder(resourceContext, "typeCollection", objectAdapter.getSpecification(), objectMember).render());
     }
 
     private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(DomainTypeReprBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).build());
+        links.arrayAdd(DomainTypeReprBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).render());
     }
 
 

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java (from r1176973, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprBuilder.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?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprBuilder.java&r1=1176973&r2=1177860&rev=1177860&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java Fri Sep 30 22:19:28 2011
@@ -23,28 +23,40 @@ import org.apache.isis.core.metamodel.ad
 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.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 com.google.common.collect.Lists;
 
-public class ObjectPropertyReprBuilder extends AbstractObjectMemberReprBuilder<ObjectPropertyReprBuilder, OneToOneAssociation> {
+public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAssociation> {
 
-    public static ObjectPropertyReprBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
-        return new ObjectPropertyReprBuilder(resourceContext, objectAdapter, otoa);
+    public static class Factory extends ReprRendererFactoryAbstract {
+
+        public Factory() {
+            super(RepresentationType.OBJECT_PROPERTY);
+        }
+
+        @Override
+        public ReprRenderer<?,?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new ObjectPropertyReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
     }
     
-    public ObjectPropertyReprBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
-        super(resourceContext, objectAdapter, MemberType.OBJECT_PROPERTY, otoa);
+
+    private ObjectPropertyReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
+    }
+
+    public JsonRepresentation render() {
 
         putId();
         putMemberType();
         withValue();
-    }
-
 
-    public JsonRepresentation build() {
         putDisabledReasonIfDisabled();
 
         JsonRepresentation extensions = JsonRepresentation.newMap();
@@ -66,7 +78,7 @@ public class ObjectPropertyReprBuilder e
 
 
     @Override
-    public ObjectPropertyReprBuilder withMutatorsIfEnabled() {
+    public ObjectPropertyReprRenderer withMutatorsIfEnabled() {
         if(usability().isVetoed()) {
             return cast(this);
         }
@@ -80,7 +92,7 @@ public class ObjectPropertyReprBuilder e
                         linkToBuilder.linkToMember(mutator, memberType, objectMember, mutatorSpec.suffix)
                         .withHttpMethod(mutatorSpec.httpMethod)
                         .withArguments(arguments)
-                        .build();
+                        .render();
                 representation.mapPut(mutator, detailsLink);
             }
         }
@@ -106,7 +118,7 @@ public class ObjectPropertyReprBuilder e
         if(valueAdapter == null) {
 		    return null;
 		}
-        return DomainObjectReprBuilder.valueOrRef(resourceContext, valueAdapter, objectMember.getSpecification());
+        return DomainObjectReprRenderer.valueOrRef(resourceContext, valueAdapter, objectMember.getSpecification());
     }
 
 	
@@ -114,7 +126,7 @@ public class ObjectPropertyReprBuilder e
     // choices
     /////////////////////////////////////////////////////
 
-	public ObjectPropertyReprBuilder withChoices() {
+	public ObjectPropertyReprRenderer withChoices() {
 		Object propertyChoices = propertyChoices();
 		if(propertyChoices != null) {
 			representation.mapPut("choices", propertyChoices);
@@ -130,7 +142,7 @@ public class ObjectPropertyReprBuilder e
         List<Object> list = Lists.newArrayList();
         for (final ObjectAdapter choiceAdapter : choiceAdapters) {
         	ObjectSpecification objectSpec = objectMember.getSpecification();
-        	list.add(DomainObjectReprBuilder.valueOrRef(resourceContext, choiceAdapter, objectSpec));
+        	list.add(DomainObjectReprRenderer.valueOrRef(resourceContext, choiceAdapter, objectSpec));
         }
         return list;
 	}
@@ -144,11 +156,11 @@ public class ObjectPropertyReprBuilder e
     }
 
     private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(TypePropertyReprBuilder.newLinkToBuilder(resourceContext, "typeProperty", objectAdapter.getSpecification(), objectMember).build());
+        links.arrayAdd(TypePropertyReprBuilder.newLinkToBuilder(resourceContext, "typeProperty", objectAdapter.getSpecification(), objectMember).render());
     }
 
     private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(DomainTypeReprBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).build());
+        links.arrayAdd(DomainTypeReprBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).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/domainobjects/ScalarValueReprRenderer.java (from r1177294, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ScalarReprBuilder.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/ScalarValueReprRenderer.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ScalarValueReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ScalarReprBuilder.java&r1=1177294&r2=1177860&rev=1177860&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ScalarReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ScalarValueReprRenderer.java Fri Sep 30 22:19:28 2011
@@ -19,26 +19,32 @@ package org.apache.isis.viewer.json.view
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.json.viewer.JsonApplicationException;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
-import org.apache.isis.viewer.json.viewer.representations.ReprBuilderAbstract;
-
-public class ScalarReprBuilder extends ReprBuilderAbstract<ScalarReprBuilder> {
-
-    public static ScalarReprBuilder newBuilder(final ResourceContext resourceContext) {
-        return new ScalarReprBuilder(resourceContext, JsonRepresentation.newMap());
-    }
+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 ScalarValueReprRenderer extends ReprRendererAbstract<ScalarValueReprRenderer, ObjectAdapter> {
+
+    public static class Factory extends ReprRendererFactoryAbstract {
+        public Factory() {
+            super(RepresentationType.SCALAR_VALUE);
+        }
 
-    public static ScalarReprBuilder newBuilder(ResourceContext resourceContext, JsonRepresentation representation) {
-        return new ScalarReprBuilder(resourceContext, representation);
+        @Override
+        public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new ScalarValueReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
     }
 
-    private ScalarReprBuilder(final ResourceContext resourceContext, JsonRepresentation representation) {
-        super(resourceContext, representation);
+    private ScalarValueReprRenderer(final ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
     }
 
-    public ScalarReprBuilder withAdapter(final ObjectAdapter objectAdapter) {
+    public ScalarValueReprRenderer with(final ObjectAdapter objectAdapter) {
         final EncodableFacet facet = objectAdapter.getSpecification().getFacet(EncodableFacet.class);
         if(facet == null) {
             throw JsonApplicationException.create(HttpStatusCode.INTERNAL_SERVER_ERROR, "Not an (encodable) value", objectAdapter.titleString());
@@ -49,7 +55,7 @@ public class ScalarReprBuilder extends R
     }
 
     @Override
-    public JsonRepresentation build() {
+    public JsonRepresentation render() {
  
         JsonRepresentation extensions = JsonRepresentation.newMap();
         putExtensionsIsisProprietary(extensions);

Modified: 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/DomainTypeReprBuilder.java?rev=1177860&r1=1177859&r2=1177860&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/DomainTypeReprBuilder.java Fri Sep 30 22:19:28 2011
@@ -39,7 +39,7 @@ public class DomainTypeReprBuilder exten
     }
 
 
-    public JsonRepresentation build() {
+    public JsonRepresentation render() {
         return representation;
     }
 

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=1177860&r1=1177859&r2=1177860&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 Fri Sep 30 22:19:28 2011
@@ -50,13 +50,13 @@ public class DomainTypeResourceServersid
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes").build());
+        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.build());
+            specList.arrayAdd(linkBuilder.render());
         }
         
         representation.mapPut("domainTypes", specList);
@@ -72,7 +72,7 @@ public class DomainTypeResourceServersid
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s", domainType).build());
+        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s", domainType).render());
         
         return responseOfOk(RepresentationType.DOMAIN_TYPE, Caching.ONE_DAY, representation).build();
     }
@@ -86,7 +86,7 @@ public class DomainTypeResourceServersid
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/properties/%s", domainType, propertyId).build());
+        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/properties/%s", domainType, propertyId).render());
         
         return responseOfOk(RepresentationType.TYPE_PROPERTY, Caching.ONE_DAY, representation).build();
     }
@@ -100,7 +100,7 @@ public class DomainTypeResourceServersid
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainType/%s/collections/%s", domainType, collectionId).build());
+        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainType/%s/collections/%s", domainType, collectionId).render());
         
         return responseOfOk(RepresentationType.TYPE_COLLECTION, Caching.ONE_DAY, representation).build();
     }
@@ -114,7 +114,7 @@ public class DomainTypeResourceServersid
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/actions/%s", domainType, actionId).build());
+        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/actions/%s", domainType, actionId).render());
         
         return responseOfOk(RepresentationType.TYPE_ACTION, Caching.ONE_DAY, representation).build();
     }
@@ -129,7 +129,7 @@ public class DomainTypeResourceServersid
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/actions/%s/params/%s", domainType, actionId, paramName).build());
+        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/actions/%s/params/%s", domainType, actionId, paramName).render());
         
         return responseOfOk(RepresentationType.TYPE_COLLECTION, Caching.ONE_DAY, representation).build();
     }

Modified: 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/TypeActionReprBuilder.java?rev=1177860&r1=1177859&r2=1177860&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/TypeActionReprBuilder.java Fri Sep 30 22:19:28 2011
@@ -41,7 +41,7 @@ public class TypeActionReprBuilder exten
     }
 
 
-    public JsonRepresentation build() {
+    public JsonRepresentation render() {
         return representation;
     }
 

Modified: 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/TypeCollectionReprBuilder.java?rev=1177860&r1=1177859&r2=1177860&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/TypeCollectionReprBuilder.java Fri Sep 30 22:19:28 2011
@@ -40,7 +40,7 @@ public class TypeCollectionReprBuilder e
         super(resourceContext, objectSpecification, MemberType.OBJECT_COLLECTION, collection);
     }
 
-    public JsonRepresentation build() {
+    public JsonRepresentation render() {
         return representation;
     }
 

Modified: 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/TypePropertyReprBuilder.java?rev=1177860&r1=1177859&r2=1177860&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/TypePropertyReprBuilder.java Fri Sep 30 22:19:28 2011
@@ -40,7 +40,7 @@ public class TypePropertyReprBuilder ext
         super(resourceContext, objectSpecification, MemberType.OBJECT_COLLECTION, property);
     }
 
-    public JsonRepresentation build() {
+    public JsonRepresentation render() {
         return representation;
     }
 

Added: 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=1177860&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java Fri Sep 30 22:19:28 2011
@@ -0,0 +1,96 @@
+package org.apache.isis.viewer.json.viewer.resources.home;
+
+import java.util.List;
+
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulRequest.QueryParameter;
+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.RendererFactory;
+import org.apache.isis.viewer.json.viewer.representations.RendererFactoryRegistry;
+import org.apache.isis.viewer.json.viewer.representations.ReprBuilder;
+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.domainobjects.DomainServiceResourceHelper;
+import org.apache.isis.viewer.json.viewer.resources.user.UserReprRenderer;
+
+public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRenderer, Void> {
+
+    public static class Factory extends ReprRendererFactoryAbstract {
+        public Factory() {
+            super(RepresentationType.HOME_PAGE);
+        }
+
+        @Override
+        public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new HomePageReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
+    }
+
+    private HomePageReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
+    }
+
+    @Override
+    public HomePageReprRenderer with(Void t) {
+        return this;
+    }
+
+    @Override
+    public JsonRepresentation render() {
+        
+        // self
+        if(includesSelf) {
+            withSelf("/");
+        }
+
+        // user
+        putLinkToUser(representation);
+
+        // services
+        putLinkToServices(representation);
+        
+        // capabilities
+        representation.mapPut("capabilities", LinkReprBuilder.newBuilder(getResourceContext(), "capabilities", "capabilities").render());
+
+        // links and extensions
+        representation.mapPut("links", JsonRepresentation.newArray());
+        representation.mapPut("extensions", JsonRepresentation.newMap());
+        
+        return representation;
+    }
+
+    private void putLinkToServices(JsonRepresentation representation) {
+
+        final LinkReprBuilder servicesLinkBuilder = LinkReprBuilder.newBuilder(getResourceContext(), "services", "services");
+        
+        final List<String> followLinks = getResourceContext().getArg(QueryParameter.FOLLOW_LINKS);
+        if(followLinks.contains("services")) {
+            final ReprBuilder reprBuilder = 
+                    new DomainServiceResourceHelper(getResourceContext()).services();
+            servicesLinkBuilder.withValue(reprBuilder.render());
+        }
+        
+        representation.mapPut("services", servicesLinkBuilder.render());
+    }
+
+    private void putLinkToUser(JsonRepresentation representation) {
+        final LinkReprBuilder userLinkBuilder = LinkReprBuilder.newBuilder(getResourceContext(), "user", "user");
+        
+        final List<String> followLinks = getResourceContext().getArg(QueryParameter.FOLLOW_LINKS);
+        if(followLinks.contains("user")) {
+            
+            final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.USER);
+            final UserReprRenderer renderer = 
+                    (UserReprRenderer) factory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+            renderer.with(getResourceContext().getAuthenticationSession());
+            
+            userLinkBuilder.withValue(renderer.render());
+        }
+        
+        representation.mapPut("user", userLinkBuilder.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/home/HomePageResourceServerside.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/HomePageResourceServerside.java?rev=1177860&r1=1177859&r2=1177860&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java Fri Sep 30 22:19:28 2011
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.viewer.json.viewer.resources.home;
 
-import java.util.List;
 
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
@@ -28,14 +27,9 @@ import javax.ws.rs.core.Response;
 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.RestfulRequest.QueryParameter;
 import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
-import org.apache.isis.viewer.json.viewer.representations.LinkReprBuilder;
-import org.apache.isis.viewer.json.viewer.representations.ReprBuilder;
+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.DomainServiceResourceHelper;
-import org.apache.isis.viewer.json.viewer.resources.user.UserReprBuilder;
-import org.apache.isis.viewer.json.viewer.resources.user.UserResourceHelper;
 
 /**
  * Implementation note: it seems to be necessary to annotate the implementation with {@link Path} rather than the
@@ -43,60 +37,18 @@ import org.apache.isis.viewer.json.viewe
  */
 public class HomePageResourceServerside extends ResourceAbstract implements HomePageResource {
 
-
     @Override
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_HOME_PAGE} )
     public Response resources() {
         init();
         
-        JsonRepresentation representation = JsonRepresentation.newMap();
-        
-        // self
-        representation.mapPut("self", LinkReprBuilder.newBuilder(getResourceContext(), "self", "").build());
-
-        // user
-        putLinkToUser(representation);
-
-        // services
-        putLinkToServices(representation);
-        
-        // capabilities
-        representation.mapPut("capabilities", LinkReprBuilder.newBuilder(getResourceContext(), "capabilities", "capabilities").build());
-
-        //
-        representation.mapPut("links", JsonRepresentation.newArray());
-        representation.mapPut("extensions", JsonRepresentation.newMap());
-
-        return responseOfOk(RepresentationType.HOME_PAGE, Caching.ONE_DAY, representation).build();
-    }
-
-    private void putLinkToServices(JsonRepresentation representation) {
-
-        final LinkReprBuilder servicesLinkBuilder = LinkReprBuilder.newBuilder(getResourceContext(), "services", "services");
-        
-        final List<String> followLinks = getResourceContext().getArg(QueryParameter.FOLLOW_LINKS);
-        if(followLinks.contains("services")) {
-            final ReprBuilder reprBuilder = 
-                    new DomainServiceResourceHelper(getResourceContext()).services();
-            servicesLinkBuilder.withValue(reprBuilder.build());
-        }
-        
-        representation.mapPut("services", servicesLinkBuilder.build());
-    }
+        final RendererFactory factory = rendererFactoryRegistry.find(RepresentationType.HOME_PAGE);
+        final HomePageReprRenderer renderer = 
+                (HomePageReprRenderer) factory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+        renderer.includesSelf();
 
-    private void putLinkToUser(JsonRepresentation representation) {
-        final LinkReprBuilder userLinkBuilder = LinkReprBuilder.newBuilder(getResourceContext(), "user", "user");
-        
-        final List<String> followLinks = getResourceContext().getArg(QueryParameter.FOLLOW_LINKS);
-        if(followLinks.contains("user")) {
-            final ReprBuilder reprBuilder = 
-                    new UserResourceHelper(getResourceContext()).user();
-            userLinkBuilder.withValue(reprBuilder.build());
-        }
-        
-        representation.mapPut("user", userLinkBuilder.build());
+        return responseOfOk(RepresentationType.HOME_PAGE, Caching.ONE_DAY, renderer).build();
     }
 
 
-
 }
\ 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/user/UserReprRenderer.java (from r1177294, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserReprBuilder.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/user/UserReprRenderer.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserReprRenderer.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserReprBuilder.java&r1=1177294&r2=1177860&rev=1177860&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserReprRenderer.java Fri Sep 30 22:19:28 2011
@@ -18,23 +18,32 @@ package org.apache.isis.viewer.json.view
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 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.TypedReprBuilderAbstract;
+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 UserReprBuilder extends TypedReprBuilderAbstract<UserReprBuilder, AuthenticationSession> {
+public class UserReprRenderer extends ReprRendererAbstract<UserReprRenderer, AuthenticationSession> {
 
-    public static UserReprBuilder newBuilder(ResourceContext resourceContext) {
-        return new UserReprBuilder(resourceContext);
-    }
+    public static class Factory extends ReprRendererFactoryAbstract {
 
-    private boolean includesSelf;
+        public Factory() {
+            super(RepresentationType.USER);
+        }
 
-    private UserReprBuilder(ResourceContext resourceContext) {
-        super(resourceContext);
+        @Override
+        public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, JsonRepresentation representation) {
+            return new UserReprRenderer(resourceContext, getRepresentationType(), representation);
+        }
+    }
+    
+    private UserReprRenderer(ResourceContext resourceContext, RepresentationType representationType, JsonRepresentation representation) {
+        super(resourceContext, representationType, representation);
     }
 
     @Override
-    public UserReprBuilder with(AuthenticationSession authenticationSession) {
+    public UserReprRenderer with(AuthenticationSession authenticationSession) {
         representation.mapPut("username", authenticationSession.getUserName());
         JsonRepresentation roles = JsonRepresentation.newArray();
         for (String role : authenticationSession.getRoles()) {
@@ -44,7 +53,7 @@ public class UserReprBuilder extends Typ
         return this;
     }
 
-    public JsonRepresentation build() {
+    public JsonRepresentation render() {
         if(includesSelf) {
             withSelf("user");
         }
@@ -53,9 +62,4 @@ public class UserReprBuilder extends Typ
         return representation;
     }
 
-    public UserReprBuilder withSelf() {
-        this.includesSelf = true;
-        return this;
-    }
-
 }
\ 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/user/UserResourceServerside.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/user/UserResourceServerside.java?rev=1177860&r1=1177859&r2=1177860&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceServerside.java Fri Sep 30 22:19:28 2011
@@ -22,11 +22,11 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
+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.user.UserResource;
-import org.apache.isis.viewer.json.viewer.representations.TypedReprBuilderFactory;
+import org.apache.isis.viewer.json.viewer.representations.RendererFactory;
 import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
 
 public class UserResourceServerside extends ResourceAbstract implements UserResource {
@@ -36,12 +36,13 @@ public class UserResourceServerside exte
     public Response user() {
         init();
 
-        final TypedReprBuilderFactory factory = builderFactoryRegistry.find(RepresentationType.USER);
-        final UserReprBuilder reprBuilder = 
-                (UserReprBuilder) factory.newBuilder(getResourceContext());
-        reprBuilder.with(getAuthenticationSession());
+        final RendererFactory factory = rendererFactoryRegistry.find(RepresentationType.USER);
+        final UserReprRenderer renderer = 
+                (UserReprRenderer) factory.newRenderer(getResourceContext(), JsonRepresentation.newMap());
+        renderer.includesSelf()
+                .with(getAuthenticationSession());
 
-        return responseOfOk(RepresentationType.USER, Caching.ONE_HOUR, reprBuilder.build()).build();
+        return responseOfOk(RepresentationType.USER, Caching.ONE_HOUR, renderer.render()).build();
     }