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 2013/02/26 00:28:30 UTC

[11/24] ISIS-233: working toward RO spec 1.0.0

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
index 647b24d..8615c24 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
@@ -34,6 +34,7 @@ import org.jboss.resteasy.annotations.ClientResponseType;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
@@ -58,11 +59,11 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @POST
-    @Path("/")
+    @Path("/{domainType}")
     @Consumes({ MediaType.WILDCARD })
-    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType = String.class)
-    public Response persist(final InputStream object) {
+    public Response persist(@PathParam("domainType") String domainType, final InputStream object) {
 
         init(RepresentationType.DOMAIN_OBJECT, Where.OBJECT_FORMS);
 
@@ -72,18 +73,9 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
             throw RestfulObjectsApplicationException.create(HttpStatusCode.BAD_REQUEST, "Body is not a map; got %s", objectRepr);
         }
 
-        final LinkRepresentation describedByLink = objectRepr.getLink("links[rel=describedby]");
-        if (!describedByLink.isLink()) {
-            throw RestfulObjectsApplicationException.create(HttpStatusCode.BAD_REQUEST, "Could not determine type of domain object to persist (no links[rel=describedby] link); got %s", objectRepr);
-        }
-
-        final String domainTypeStr = UrlParserUtils.domainTypeFrom(describedByLink);
-        if (domainTypeStr == null) {
-            throw RestfulObjectsApplicationException.create(HttpStatusCode.BAD_REQUEST, "Could not determine type of domain object to persist (no href in links[rel=describedby]); got %s", describedByLink);
-        }
-        final ObjectSpecification domainTypeSpec = getSpecificationLoader().loadSpecification(domainTypeStr);
+        final ObjectSpecification domainTypeSpec = getSpecificationLoader().lookupBySpecId(ObjectSpecId.of(domainType));
         if (domainTypeSpec == null) {
-            throw RestfulObjectsApplicationException.create(HttpStatusCode.BAD_REQUEST, "Could not determine type of domain object to persist (no such class '%s')", domainTypeStr);
+            throw RestfulObjectsApplicationException.create(HttpStatusCode.BAD_REQUEST, "Could not determine type of domain object to persist (no class with domainType Id of '%s')", domainType);
         }
 
         final ObjectAdapter objectAdapter = getResourceContext().getPersistenceSession().createTransientInstance(domainTypeSpec);
@@ -111,12 +103,12 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @GET
-    @Path("/{oid}")
-    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response object(@PathParam("oid") final String oidStr) {
+    @Path("/{domainType}/{instanceId}")
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
+    public Response object(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId) {
         init(RepresentationType.DOMAIN_OBJECT, Where.OBJECT_FORMS);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, instanceId);
 
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
         return helper.objectRepresentation();
@@ -124,10 +116,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @PUT
-    @Path("/{oid}")
+    @Path("/{domainType}/{instanceId}")
     @Consumes({ MediaType.WILDCARD })
-    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response object(@PathParam("oid") final String oidStr, final InputStream object) {
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
+    public Response object(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, final InputStream object) {
 
         init(RepresentationType.DOMAIN_OBJECT, Where.OBJECT_FORMS);
 
@@ -137,7 +129,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
             throw RestfulObjectsApplicationException.create(HttpStatusCode.BAD_REQUEST, "Body is not a map; got %s", objectRepr);
         }
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
 
         final JsonRepresentation propertiesList = objectRepr.getArrayEnsured("members[memberType=property]");
         if (propertiesList == null) {
@@ -176,13 +168,13 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @GET
-    @Path("/{oid}/properties/{propertyId}")
+    @Path("/{domainType}/{instanceId}/properties/{propertyId}")
     @Consumes({ MediaType.WILDCARD })
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response propertyDetails(@PathParam("oid") final String oidStr, @PathParam("propertyId") final String propertyId) {
+    public Response propertyDetails(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("propertyId") final String propertyId) {
         init(RepresentationType.OBJECT_PROPERTY, Where.OBJECT_FORMS);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         return helper.propertyDetails(objectAdapter, propertyId, MemberMode.NOT_MUTATING, Caching.NONE, getResourceContext().getWhere());
@@ -190,13 +182,13 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @PUT
-    @Path("/{oid}/properties/{propertyId}")
+    @Path("/{domainType}/{instanceId}/properties/{propertyId}")
     @Consumes({ MediaType.WILDCARD })
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response modifyProperty(@PathParam("oid") final String oidStr, @PathParam("propertyId") final String propertyId, final InputStream body) {
+    public Response modifyProperty(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("propertyId") final String propertyId, final InputStream body) {
         init(Where.OBJECT_FORMS);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         final OneToOneAssociation property = helper.getPropertyThatIsVisibleAndUsable(propertyId, Intent.MUTATE, getResourceContext().getWhere());
@@ -218,12 +210,12 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @DELETE
-    @Path("/{oid}/properties/{propertyId}")
+    @Path("/{domainType}/{instanceId}/properties/{propertyId}")
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response clearProperty(@PathParam("oid") final String oidStr, @PathParam("propertyId") final String propertyId) {
+    public Response clearProperty(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("propertyId") final String propertyId) {
         init(Where.OBJECT_FORMS);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         final OneToOneAssociation property = helper.getPropertyThatIsVisibleAndUsable(propertyId, Intent.MUTATE, getResourceContext().getWhere());
@@ -244,12 +236,12 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @GET
-    @Path("/{oid}/collections/{collectionId}")
+    @Path("/{domainType}/{instanceId}/collections/{collectionId}")
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response accessCollection(@PathParam("oid") final String oidStr, @PathParam("collectionId") final String collectionId) {
+    public Response accessCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("collectionId") final String collectionId) {
         init(RepresentationType.OBJECT_COLLECTION, Where.PARENTED_TABLES);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         return helper.collectionDetails(objectAdapter, collectionId, MemberMode.NOT_MUTATING, Caching.NONE, getResourceContext().getWhere());
@@ -257,13 +249,13 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @PUT
-    @Path("/{oid}/collections/{collectionId}")
+    @Path("/{domainType}/{instanceId}/collections/{collectionId}")
     @Consumes({ MediaType.WILDCARD })
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response addToSet(@PathParam("oid") final String oidStr, @PathParam("collectionId") final String collectionId, final InputStream body) {
+    public Response addToSet(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("collectionId") final String collectionId, final InputStream body) {
         init(Where.PARENTED_TABLES);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         final OneToManyAssociation collection = helper.getCollectionThatIsVisibleAndUsable(collectionId, Intent.MUTATE, getResourceContext().getWhere());
@@ -288,13 +280,13 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @POST
-    @Path("/{oid}/collections/{collectionId}")
+    @Path("/{domainType}/{instanceId}/collections/{collectionId}")
     @Consumes({ MediaType.WILDCARD })
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response addToList(@PathParam("oid") final String oidStr, @PathParam("collectionId") final String collectionId, final InputStream body) {
+    public Response addToList(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("collectionId") final String collectionId, final InputStream body) {
         init(Where.PARENTED_TABLES);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         final OneToManyAssociation collection = helper.getCollectionThatIsVisibleAndUsable(collectionId, Intent.MUTATE, getResourceContext().getWhere());
@@ -319,12 +311,12 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @DELETE
-    @Path("/{oid}/collections/{collectionId}")
+    @Path("/{domainType}/{instanceId}/collections/{collectionId}")
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response removeFromCollection(@PathParam("oid") final String oidStr, @PathParam("collectionId") final String collectionId) {
+    public Response removeFromCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("collectionId") final String collectionId) {
         init(Where.PARENTED_TABLES);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         final OneToManyAssociation collection = helper.getCollectionThatIsVisibleAndUsable(collectionId, Intent.MUTATE, getResourceContext().getWhere());
@@ -348,12 +340,12 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @GET
-    @Path("/{oid}/actions/{actionId}")
+    @Path("/{domainType}/{instanceId}/actions/{actionId}")
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_ACTION, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response actionPrompt(@PathParam("oid") final String oidStr, @PathParam("actionId") final String actionId) {
+    public Response actionPrompt(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("actionId") final String actionId) {
         init(RepresentationType.OBJECT_ACTION, Where.OBJECT_FORMS);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         return helper.actionPrompt(actionId, getResourceContext().getWhere());
@@ -365,14 +357,14 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @GET
-    @Path("/{oid}/actions/{actionId}/invoke")
+    @Path("/{domainType}/{instanceId}/actions/{actionId}/invoke")
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response invokeActionQueryOnly(@PathParam("oid") final String oidStr, @PathParam("actionId") final String actionId) {
+    public Response invokeActionQueryOnly(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("actionId") final String actionId) {
         init(RepresentationType.ACTION_RESULT, Where.STANDALONE_TABLES);
 
         final JsonRepresentation arguments = getResourceContext().getQueryStringAsJsonRepr();
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         return helper.invokeActionQueryOnly(actionId, arguments, getResourceContext().getWhere());
@@ -380,13 +372,13 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @PUT
-    @Path("/{oid}/actions/{actionId}/invoke")
+    @Path("/{domainType}/{instanceId}/actions/{actionId}/invoke")
     @Consumes({ MediaType.WILDCARD })
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response invokeActionIdempotent(@PathParam("oid") final String oidStr, @PathParam("actionId") final String actionId, final InputStream arguments) {
+    public Response invokeActionIdempotent(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("actionId") final String actionId, final InputStream arguments) {
         init(RepresentationType.ACTION_RESULT, Where.STANDALONE_TABLES);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         return helper.invokeActionIdempotent(actionId, arguments, getResourceContext().getWhere());
@@ -394,13 +386,13 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
     @Override
     @POST
-    @Path("/{oid}/actions/{actionId}/invoke")
+    @Path("/{domainType}/{instanceId}/actions/{actionId}/invoke")
     @Consumes({ MediaType.WILDCARD })
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response invokeAction(@PathParam("oid") final String oidStr, @PathParam("actionId") final String actionId, final InputStream body) {
+    public Response invokeAction(@PathParam("domainType") String domainType, @PathParam("instanceId") final String oidStr, @PathParam("actionId") final String actionId, final InputStream body) {
         init(RepresentationType.ACTION_RESULT, Where.STANDALONE_TABLES);
 
-        final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
+        final ObjectAdapter objectAdapter = getObjectAdapter(domainType, oidStr);
         final DomainResourceHelper helper = new DomainResourceHelper(getResourceContext(), objectAdapter);
 
         return helper.invokeAction(actionId, body, getResourceContext().getWhere());

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
index 28a4c9a..084994f 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
@@ -44,19 +44,16 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
 import org.apache.isis.viewer.restfulobjects.applib.util.UrlEncodingUtils;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactory;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactoryRegistry;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.AbstractObjectMemberReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectLinkTo;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.JsonValueEncoder;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.JsonValueEncoder.ExpectedStringRepresentingValueException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberType;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectActionReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAdapterLinkTo;
@@ -66,7 +63,6 @@ import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCo
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndProperty;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectCollectionReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectPropertyReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.JsonValueEncoder.ExpectedStringRepresentingValueException;
 import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
 import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.server.resources.ResourceAbstract.Caching;
@@ -151,9 +147,7 @@ public final class DomainResourceHelper {
     // //////////////////////////////////////////////////////////////
 
     public Response objectRepresentation() {
-        final RendererFactory rendererFactory = getRendererFactoryRegistry().find(RepresentationType.DOMAIN_OBJECT);
-
-        final DomainObjectReprRenderer renderer = (DomainObjectReprRenderer) rendererFactory.newRenderer(resourceContext, null, JsonRepresentation.newMap());
+        final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(resourceContext, null, JsonRepresentation.newMap());
         renderer.with(objectAdapter).includesSelf();
 
         final ResponseBuilder respBuilder = ResourceAbstract.responseOfOk(renderer, Caching.NONE);
@@ -190,8 +184,7 @@ public final class DomainResourceHelper {
 
         final OneToOneAssociation property = getPropertyThatIsVisibleAndUsable(propertyId, Intent.ACCESS, where);
 
-        final RendererFactory factory = getRendererFactoryRegistry().find(RepresentationType.OBJECT_PROPERTY);
-        final ObjectPropertyReprRenderer renderer = (ObjectPropertyReprRenderer) factory.newRenderer(resourceContext, null, JsonRepresentation.newMap());
+        final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(resourceContext, null, JsonRepresentation.newMap());
 
         renderer.with(new ObjectAndProperty(objectAdapter, property)).usingLinkTo(adapterLinkTo);
 
@@ -208,8 +201,7 @@ public final class DomainResourceHelper {
 
         final OneToManyAssociation collection = getCollectionThatIsVisibleAndUsable(collectionId, Intent.ACCESS, where);
 
-        final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.OBJECT_COLLECTION);
-        final ObjectCollectionReprRenderer renderer = (ObjectCollectionReprRenderer) factory.newRenderer(resourceContext, null, JsonRepresentation.newMap());
+        final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(resourceContext, null, JsonRepresentation.newMap());
 
         renderer.with(new ObjectAndCollection(objectAdapter, collection)).usingLinkTo(adapterLinkTo);
 
@@ -225,8 +217,7 @@ public final class DomainResourceHelper {
     Response actionPrompt(final String actionId, Where where) {
         final ObjectAction action = getObjectActionThatIsVisibleAndUsable(actionId, Intent.ACCESS, where);
 
-        final RendererFactory factory = getRendererFactoryRegistry().find(RepresentationType.OBJECT_ACTION);
-        final ObjectActionReprRenderer renderer = (ObjectActionReprRenderer) factory.newRenderer(resourceContext, null, JsonRepresentation.newMap());
+        final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(resourceContext, null, JsonRepresentation.newMap());
 
         renderer.with(new ObjectAndAction(objectAdapter, action)).usingLinkTo(adapterLinkTo).asStandalone();
 
@@ -313,8 +304,7 @@ public final class DomainResourceHelper {
         final ObjectAdapter returnedAdapter = action.execute(objectAdapter, argArray);
 
         // response (void)
-        final RendererFactory factory = getRendererFactoryRegistry().find(RepresentationType.ACTION_RESULT);
-        final ActionResultReprRenderer renderer = (ActionResultReprRenderer) factory.newRenderer(resourceContext, null, JsonRepresentation.newMap());
+        final ActionResultReprRenderer renderer = new ActionResultReprRenderer(resourceContext, null, JsonRepresentation.newMap());
 
         renderer.with(new ObjectAndActionInvocation(objectAdapter, action, arguments, returnedAdapter)).using(adapterLinkTo);
 
@@ -593,13 +583,4 @@ public final class DomainResourceHelper {
         return objectSpec.getFullIdentifier();
     }
 
-    // //////////////////////////////////////////////////////////////
-    // dependencies
-    // //////////////////////////////////////////////////////////////
-
-    protected RendererFactoryRegistry getRendererFactoryRegistry() {
-        // TODO: yuck
-        return RendererFactoryRegistry.instance;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
index 30f5fff..cb2a4b1 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
@@ -35,8 +35,6 @@ import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
 import org.apache.isis.viewer.restfulobjects.applib.domainobjects.DomainServiceResource;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactory;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactoryRegistry;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainServiceLinkTo;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ListReprRenderer;
@@ -50,14 +48,11 @@ public class DomainServiceResourceServerside extends ResourceAbstract implements
     @Path("/")
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response services() {
-        final RepresentationType representationType = RepresentationType.LIST;
-        init(representationType, Where.STANDALONE_TABLES);
+        init(RepresentationType.LIST, Where.STANDALONE_TABLES);
 
         final List<ObjectAdapter> serviceAdapters = getResourceContext().getServiceAdapters();
 
-        final RendererFactory factory = RendererFactoryRegistry.instance.find(representationType);
-
-        final ListReprRenderer renderer = (ListReprRenderer) factory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final ListReprRenderer renderer = new ListReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.usingLinkToBuilder(new DomainServiceLinkTo()).withSelf("services").with(serviceAdapters);
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
@@ -70,15 +65,13 @@ public class DomainServiceResourceServerside extends ResourceAbstract implements
     @Override
     @GET
     @Path("/{serviceId}")
-    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response service(@PathParam("serviceId") final String serviceId) {
         init(RepresentationType.DOMAIN_OBJECT, Where.OBJECT_FORMS);
 
         final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
 
-        final RendererFactory rendererFactory = rendererFactoryRegistry.find(RepresentationType.DOMAIN_OBJECT);
-
-        final DomainObjectReprRenderer renderer = (DomainObjectReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.usingLinkToBuilder(new DomainServiceLinkTo()).with(serviceAdapter).includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
index 21eb837..7835356 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
@@ -80,9 +80,7 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
 
         final Collection<ObjectSpecification> allSpecifications = getSpecificationLoader().allSpecifications();
 
-        final RendererFactory rendererFactory = rendererFactoryRegistry.find(representationType);
-
-        final TypeListReprRenderer renderer = (TypeListReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final TypeListReprRenderer renderer = new TypeListReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.with(allSpecifications).includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
@@ -94,14 +92,11 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_TYPE })
     public Response domainType(@PathParam("domainType") final String domainType) {
 
-        final RepresentationType representationType = RepresentationType.DOMAIN_TYPE;
-        init(representationType, Where.ANYWHERE);
+        init(RepresentationType.DOMAIN_TYPE, Where.ANYWHERE);
 
         final ObjectSpecification objectSpec = getSpecificationLoader().loadSpecification(domainType);
 
-        final RendererFactory rendererFactory = rendererFactoryRegistry.find(representationType);
-
-        final DomainTypeReprRenderer renderer = (DomainTypeReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final DomainTypeReprRenderer renderer = new DomainTypeReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.with(objectSpec).includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
@@ -126,9 +121,7 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
         }
         final OneToOneAssociation property = (OneToOneAssociation) objectMember;
 
-        final RendererFactory rendererFactory = rendererFactoryRegistry.find(representationType);
-
-        final PropertyDescriptionReprRenderer renderer = (PropertyDescriptionReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final PropertyDescriptionReprRenderer renderer = new PropertyDescriptionReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.with(new ParentSpecAndProperty(parentSpec, property)).includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
@@ -153,9 +146,7 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
         }
         final OneToManyAssociation collection = (OneToManyAssociation) objectMember;
 
-        final RendererFactory rendererFactory = rendererFactoryRegistry.find(representationType);
-
-        final CollectionDescriptionReprRenderer renderer = (CollectionDescriptionReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final CollectionDescriptionReprRenderer renderer = new CollectionDescriptionReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.with(new ParentSpecAndCollection(parentSpec, collection)).includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
@@ -180,9 +171,7 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
         }
         final ObjectAction action = (ObjectAction) objectMember;
 
-        final RendererFactory rendererFactory = rendererFactoryRegistry.find(representationType);
-
-        final ActionDescriptionReprRenderer renderer = (ActionDescriptionReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final ActionDescriptionReprRenderer renderer = new ActionDescriptionReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.with(new ParentSpecAndAction(parentSpec, action)).includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
@@ -209,9 +198,7 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
 
         final ObjectActionParameter actionParam = parentAction.getParameterByName(paramName);
 
-        final RendererFactory rendererFactory = rendererFactoryRegistry.find(representationType);
-
-        final ActionParameterDescriptionReprRenderer renderer = (ActionParameterDescriptionReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final ActionParameterDescriptionReprRenderer renderer = new ActionParameterDescriptionReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.with(new ParentSpecAndActionParam(parentSpec, actionParam)).includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();
@@ -225,12 +212,11 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
     @GET
     @Path("/{domainType}/typeactions/isSubtypeOf/invoke")
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
-    public Response domainTypeIsSubtypeOf(@PathParam("domainType") final String domainType, @QueryParam("supertype") final String superTypeStr, // simple
-                                                                                                                                                // style
+    public Response domainTypeIsSubtypeOf(
+            @PathParam("domainType") final String domainType, 
+            @QueryParam("supertype") final String superTypeStr, // simple style
             @QueryParam("args") final String args // formal style
-    ) {
-
-        final RepresentationType representationType = RepresentationType.TYPE_ACTION_RESULT;
+            ) {
         init(Where.ANYWHERE);
 
         final String supertype = domainTypeFor(superTypeStr, args, "supertype");
@@ -238,11 +224,10 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
         final ObjectSpecification domainTypeSpec = getSpecificationLoader().loadSpecification(domainType);
         final ObjectSpecification supertypeSpec = getSpecificationLoader().loadSpecification(supertype);
 
-        final RendererFactory rendererFactory = rendererFactoryRegistry.find(representationType);
-        final TypeActionResultReprRenderer renderer = (TypeActionResultReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final TypeActionResultReprRenderer renderer = new TypeActionResultReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
 
         final String url = "domainTypes/" + domainTypeSpec.getFullIdentifier() + "/typeactions/isSubtypeOf/invoke";
-        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.SELF, RepresentationType.TYPE_ACTION_RESULT, url);
+        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.SELF.getName(), RepresentationType.TYPE_ACTION_RESULT, url);
         final JsonRepresentation arguments = DomainTypeReprRenderer.argumentsTo(getResourceContext(), "supertype", supertypeSpec);
         final JsonRepresentation selfLink = linkBuilder.withArguments(arguments).build();
 
@@ -262,7 +247,6 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
             @QueryParam("args") final String args // formal style
             ) {
 
-        final RepresentationType representationType = RepresentationType.TYPE_ACTION_RESULT;
         init(Where.ANYWHERE);
 
         final String subtype = domainTypeFor(subTypeStr, args, "subtype");
@@ -270,11 +254,10 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
         final ObjectSpecification domainTypeSpec = getSpecificationLoader().loadSpecification(domainType);
         final ObjectSpecification subtypeSpec = getSpecificationLoader().loadSpecification(subtype);
 
-        final RendererFactory rendererFactory = rendererFactoryRegistry.find(representationType);
-        final TypeActionResultReprRenderer renderer = (TypeActionResultReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final TypeActionResultReprRenderer renderer = new TypeActionResultReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
 
         final String url = "domainTypes/" + domainTypeSpec.getFullIdentifier() + "/typeactions/isSupertypeOf/invoke";
-        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.SELF, RepresentationType.TYPE_ACTION_RESULT, url);
+        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.SELF.getName(), RepresentationType.TYPE_ACTION_RESULT, url);
         final JsonRepresentation arguments = DomainTypeReprRenderer.argumentsTo(getResourceContext(), "subtype", subtypeSpec);
         final JsonRepresentation selfLink = linkBuilder.withArguments(arguments).build();
 
@@ -284,37 +267,6 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
         return responseOfOk(renderer, Caching.ONE_DAY).build();
     }
 
-    @Override
-    @GET
-    @Path("/{domainType}/typeactions/newTransientInstance/invoke")
-    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
-    @ClientResponseType(entityType = String.class)
-    public Response newTransientInstance(@PathParam("domainType") final String domainTypeStr, @QueryParam("args") final String args) {
-
-        final RepresentationType representationType = RepresentationType.TYPE_ACTION_RESULT;
-        init(representationType, Where.ANYWHERE);
-
-        final String domainType = domainTypeFor(domainTypeStr, args, "domainType");
-
-        final ObjectSpecification domainTypeSpec = getSpecificationLoader().loadSpecification(domainType);
-
-        final RendererFactory rendererFactory = rendererFactoryRegistry.find(representationType);
-        final TypeActionResultReprRenderer renderer = (TypeActionResultReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
-
-        final String url = "domainTypes/" + domainTypeSpec.getFullIdentifier() + "/typeactions/newTransientInstance/invoke";
-        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.SELF, RepresentationType.TYPE_ACTION_RESULT, url);
-        final JsonRepresentation selfLink = linkBuilder.build();
-
-        final RendererFactory domainObjectRendererFactory = rendererFactoryRegistry.find(RepresentationType.DOMAIN_OBJECT);
-        final DomainObjectReprRenderer domainObjectRenderer = (DomainObjectReprRenderer) domainObjectRendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
-        final ObjectAdapter transientInstance = getResourceContext().getPersistenceSession().createTransientInstance(domainTypeSpec);
-        domainObjectRenderer.with(transientInstance).includesSelf();
-
-        renderer.with(domainTypeSpec).withSelf(selfLink).withValue(domainObjectRenderer.render());
-
-        return responseOfOk(renderer, Caching.ONE_DAY).build();
-    }
-
     private static String domainTypeFor(final String domainTypeStr, final String argumentsQueryString, final String argsParamName) {
         // simple style; simple return
         if (!Strings.isNullOrEmpty(domainTypeStr)) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageReprRenderer.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageReprRenderer.java
index 9e085ec..c5d2da2 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageReprRenderer.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageReprRenderer.java
@@ -30,11 +30,8 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollower;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactory;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactoryRegistry;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererFactoryAbstract;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainServiceLinkTo;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ListReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.TypeListReprRenderer;
@@ -42,19 +39,8 @@ import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
 
 public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRenderer, Void> {
 
-    public static class Factory extends ReprRendererFactoryAbstract {
-        public Factory() {
-            super(RepresentationType.HOME_PAGE);
-        }
-
-        @Override
-        public ReprRenderer<?, ?> newRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
-            return new HomePageReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
-        }
-    }
-
-    private HomePageReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
-        super(resourceContext, linkFollower, representationType, representation);
+    HomePageReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
+        super(resourceContext, linkFollower, RepresentationType.HOME_PAGE, representation);
     }
 
     @Override
@@ -70,10 +56,10 @@ public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRende
             addLinkToSelf(representation);
         }
 
-        addLinkToUser(getResourceContext().getAuthenticationSession());
-        addLinkToServices(((ResourceContext)getResourceContext()).getPersistenceSession().getServices());
+        addLinkToUser(getRendererContext().getAuthenticationSession());
+        addLinkToServices(((ResourceContext)getRendererContext()).getPersistenceSession().getServices());
         addLinkToVersion();
-        addLinkToDomainTypes(((ResourceContext)getResourceContext()).getSpecificationLookup().allSpecifications());
+        addLinkToDomainTypes(((ResourceContext)getRendererContext()).getSpecificationLookup().allSpecifications());
 
         // inks and extensions
         representation.mapPut("extensions", JsonRepresentation.newMap());
@@ -82,13 +68,12 @@ public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRende
     }
 
     private void addLinkToSelf(final JsonRepresentation representation) {
-        final JsonRepresentation link = LinkBuilder.newBuilder(resourceContext, Rel.SELF, getRepresentationType(), "").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(rendererContext, Rel.SELF.getName(), getRepresentationType(), "").build();
 
-        final LinkFollower linkFollower = getLinkFollower().follow("links[rel=self]");
+        final LinkFollower linkFollower = getLinkFollower().follow("links[rel=" + Rel.SELF.getName() + "]");
         if (linkFollower.matches(link)) {
 
-            final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.HOME_PAGE);
-            final HomePageReprRenderer renderer = (HomePageReprRenderer) factory.newRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
+            final HomePageReprRenderer renderer = new HomePageReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
 
             link.mapPut("value", renderer.render());
         }
@@ -96,13 +81,12 @@ public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRende
     }
 
     private void addLinkToVersion() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.VERSION, RepresentationType.VERSION, "version").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.VERSION.getName(), RepresentationType.VERSION, "version").build();
 
-        final LinkFollower linkFollower = getLinkFollower().follow("links[rel=version]");
+        final LinkFollower linkFollower = getLinkFollower().follow("links[rel=" + Rel.VERSION.getName() + "]");
         if (linkFollower.matches(link)) {
 
-            final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.VERSION);
-            final VersionReprRenderer renderer = (VersionReprRenderer) factory.newRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
+            final VersionReprRenderer renderer = new VersionReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
 
             link.mapPut("value", renderer.render());
         }
@@ -112,14 +96,12 @@ public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRende
 
     private void addLinkToServices(List<ObjectAdapter> serviceAdapters) {
 
-        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.SERVICES, RepresentationType.LIST, "services").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.SERVICES.getName(), RepresentationType.LIST, "services").build();
 
-        final LinkFollower linkFollower = getLinkFollower().follow("links[rel=services]");
+        final LinkFollower linkFollower = getLinkFollower().follow("links[rel=" + Rel.SERVICES.getName() + "]");
         if (linkFollower.matches(link)) {
 
-            final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.LIST);
-
-            final ListReprRenderer renderer = (ListReprRenderer) factory.newRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
+            final ListReprRenderer renderer = new ListReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
             renderer.usingLinkToBuilder(new DomainServiceLinkTo()).withSelf("services").with(serviceAdapters);
 
             link.mapPut("value", renderer.render());
@@ -129,12 +111,11 @@ public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRende
     }
 
     private void addLinkToUser(AuthenticationSession authenticationSession) {
-        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.USER, RepresentationType.USER, "user").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.USER.getName(), RepresentationType.USER, "user").build();
 
-        final LinkFollower linkFollower = getLinkFollower().follow("links[rel=user]");
+        final LinkFollower linkFollower = getLinkFollower().follow("links[rel=" + Rel.USER.getName() + "]");
         if (linkFollower.matches(link)) {
-            final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.USER);
-            final UserReprRenderer renderer = (UserReprRenderer) factory.newRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
+            final UserReprRenderer renderer = new UserReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
             renderer.with(authenticationSession);
 
             link.mapPut("value", renderer.render());
@@ -145,14 +126,12 @@ public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRende
 
     private void addLinkToDomainTypes(final Collection<ObjectSpecification> specifications) {
 
-        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.TYPES, RepresentationType.TYPE_LIST, "domainTypes").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.DOMAIN_TYPES.getName(), RepresentationType.TYPE_LIST, "domainTypes").build();
 
-        final LinkFollower linkFollower = getLinkFollower().follow("links[rel=types]");
+        final LinkFollower linkFollower = getLinkFollower().follow("links[rel=" + Rel.DOMAIN_TYPES.getName() + "]");
         if (linkFollower.matches(link)) {
 
-            final RendererFactory factory = RendererFactoryRegistry.instance.find(RepresentationType.TYPE_LIST);
-
-            final TypeListReprRenderer renderer = (TypeListReprRenderer) factory.newRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
+            final TypeListReprRenderer renderer = new TypeListReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
 
             renderer.withSelf("domainTypes").with(specifications);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageResourceServerside.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageResourceServerside.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageResourceServerside.java
index f11cf8a..d284611 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageResourceServerside.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageResourceServerside.java
@@ -30,7 +30,6 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.restfulobjects.applib.homepage.HomePageResource;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactory;
 import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
 
 /**
@@ -43,11 +42,9 @@ public class HomePageResourceServerside extends ResourceAbstract implements Home
     @Override
     @Produces({ RestfulMediaType.APPLICATION_JSON_HOME_PAGE })
     public Response homePage() {
-        final RepresentationType representationType = RepresentationType.HOME_PAGE;
-        init(representationType, Where.NOWHERE);
+        init(RepresentationType.HOME_PAGE, Where.NOWHERE);
 
-        final RendererFactory factory = rendererFactoryRegistry.find(representationType);
-        final HomePageReprRenderer renderer = (HomePageReprRenderer) factory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final HomePageReprRenderer renderer = new HomePageReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
index fed675e..5a8d4ca 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
@@ -40,6 +40,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.services.ServiceUtil;
 import org.apache.isis.core.metamodel.spec.ActionType;
@@ -51,7 +52,6 @@ import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactoryRegistry;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRenderer;
 import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
 import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
@@ -86,8 +86,6 @@ public abstract class ResourceAbstract {
     // nb: SET is excluded; we simply flatten contributed actions.
     public final static ActionType[] ACTION_TYPES = { ActionType.USER, ActionType.DEBUG, ActionType.EXPLORATION };
 
-    // TODO: should inject this instead...
-    protected final static RendererFactoryRegistry rendererFactoryRegistry = RendererFactoryRegistry.instance;
 
     @Context
     HttpHeaders httpHeaders;
@@ -152,17 +150,21 @@ public abstract class ResourceAbstract {
         return getSpecificationLoader().loadSpecification(specFullName);
     }
 
-    protected ObjectAdapter getObjectAdapter(final String oidEncodedStr) {
+    protected ObjectAdapter getObjectAdapter(String domainType, final String instanceId) {
 
-        final ObjectAdapter objectAdapter = OidUtils.getObjectAdapter(resourceContext, oidEncodedStr);
+        final ObjectAdapter objectAdapter = OidUtils.getObjectAdapter(resourceContext, domainType, instanceId);
 
         if (objectAdapter == null) {
-            final String oidStr = UrlDecoderUtils.urlDecode(oidEncodedStr);
-            throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_FOUND, "could not determine adapter for OID: '%s'", oidStr);
+            final String instanceIdUnencoded = UrlDecoderUtils.urlDecode(instanceId);
+            throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_FOUND, "could not determine adapter for OID: '%s:%s'", domainType, instanceIdUnencoded);
         }
         return objectAdapter;
     }
 
+    OidMarshaller getOidMarshaller() {
+        return new OidMarshaller();
+    }
+
     protected ObjectAdapter getServiceAdapter(final String serviceId) {
         final List<ObjectAdapter> serviceAdapters = getPersistenceSession().getServices();
         for (final ObjectAdapter serviceAdapter : serviceAdapters) {
@@ -175,9 +177,6 @@ public abstract class ResourceAbstract {
         throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_FOUND, "Could not locate service '%s'", serviceId);
     }
 
-    protected String getOidStr(final ObjectAdapter objectAdapter) {
-        return OidUtils.getOidStr(resourceContext, objectAdapter);
-    }
 
     // //////////////////////////////////////////////////////////////
     // Responses

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserReprRenderer.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserReprRenderer.java
index ed6bf6f..5e22d28 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserReprRenderer.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserReprRenderer.java
@@ -21,26 +21,12 @@ import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollower;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererFactoryAbstract;
 
 public class UserReprRenderer extends ReprRendererAbstract<UserReprRenderer, AuthenticationSession> {
 
-    public static class Factory extends ReprRendererFactoryAbstract {
-
-        public Factory() {
-            super(RepresentationType.USER);
-        }
-
-        @Override
-        public ReprRenderer<?, ?> newRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
-            return new UserReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
-        }
-    }
-
-    private UserReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
-        super(resourceContext, linkFollower, representationType, representation);
+    UserReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
+        super(resourceContext, linkFollower, RepresentationType.USER, representation);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
index eefd602..676027a 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
@@ -27,18 +27,15 @@ import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
 import org.apache.isis.viewer.restfulobjects.applib.user.UserResource;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactory;
 
 public class UserResourceServerside extends ResourceAbstract implements UserResource {
 
     @Override
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_USER })
     public Response user() {
-        final RepresentationType user = RepresentationType.USER;
-        init(user, Where.NOWHERE);
+        init(RepresentationType.USER, Where.NOWHERE);
 
-        final RendererFactory factory = rendererFactoryRegistry.find(user);
-        final UserReprRenderer renderer = (UserReprRenderer) factory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final UserReprRenderer renderer = new UserReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.includesSelf().with(getAuthenticationSession());
 
         return responseOfOk(renderer, Caching.ONE_HOUR).build();

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionReprRenderer.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionReprRenderer.java
index 3453c93..34d118a 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionReprRenderer.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionReprRenderer.java
@@ -24,9 +24,7 @@ import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollower;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererFactoryAbstract;
 import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplication;
 
 import com.google.common.io.Resources;
@@ -35,19 +33,8 @@ public class VersionReprRenderer extends ReprRendererAbstract<VersionReprRendere
 
     private static final String META_INF_POM_PROPERTIES = "/META-INF/maven/org.apache.isis.viewer/restfulobjects-viewer/pom.properties";
 
-    public static class Factory extends ReprRendererFactoryAbstract {
-        public Factory() {
-            super(RepresentationType.VERSION);
-        }
-
-        @Override
-        public ReprRenderer<?, ?> newRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
-            return new VersionReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
-        }
-    }
-
-    private VersionReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
-        super(resourceContext, linkFollower, representationType, representation);
+    VersionReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
+        super(resourceContext, linkFollower, RepresentationType.VERSION, representation);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionResourceServerside.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionResourceServerside.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionResourceServerside.java
index d3ec248..476c45a 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionResourceServerside.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionResourceServerside.java
@@ -31,7 +31,6 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.restfulobjects.applib.version.VersionResource;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactory;
 import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
 
 /**
@@ -39,20 +38,17 @@ import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationExc
  * with {@link Path} rather than the interface (at least under RestEasy 1.0.2
  * and 1.1-RC2).
  */
-@Path("/version")
+//@Path("/version")
 public class VersionResourceServerside extends ResourceAbstract implements VersionResource {
 
     @Override
     @GET
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_VERSION })
     public Response version() {
-        final RepresentationType representationType = RepresentationType.VERSION;
-
-        init(representationType, Where.NOWHERE);
+        init(RepresentationType.VERSION, Where.NOWHERE);
         fakeRuntimeExceptionIfXFail();
 
-        final RendererFactory factory = rendererFactoryRegistry.find(representationType);
-        final VersionReprRenderer renderer = (VersionReprRenderer) factory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+        final VersionReprRenderer renderer = new VersionReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.includesSelf();
 
         return responseOfOk(renderer, Caching.ONE_DAY).build();

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
index 968eaae..93798e2 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
@@ -29,15 +29,33 @@ public final class OidUtils {
     private OidUtils() {
     }
 
+    public static String getDomainType(final RendererContext renderContext, final ObjectAdapter objectAdapter) {
+        return org.apache.isis.viewer.restfulobjects.rendering.util.OidUtils.getDomainType(objectAdapter);
+    }
+
+    public static String getInstanceId(final RendererContext renderContext, final ObjectAdapter objectAdapter) {
+        return org.apache.isis.viewer.restfulobjects.rendering.util.OidUtils.getInstanceId(renderContext, objectAdapter);
+    }
+    
+    public static ObjectAdapter getObjectAdapter(final RendererContext resourceContext, final String domainType, final String instanceId) {
+
+        final String instanceIdUnencoded = UrlDecoderUtils.urlDecode(instanceId);
+        
+        // REVIEW: it's a bit hokey to join these together just to split them out again.
+        final String oidStr = getOidMarshaller().joinAsOid(domainType, instanceIdUnencoded);
+        
+        return getObjectAdapterForUnencoded(resourceContext, oidStr);
+    }
+
     public static ObjectAdapter getObjectAdapter(final RendererContext resourceContext, final String oidEncodedStr) {
         final String oidStr = UrlDecoderUtils.urlDecode(oidEncodedStr);
+        return getObjectAdapterForUnencoded(resourceContext, oidStr);
+    }
+
+    private static ObjectAdapter getObjectAdapterForUnencoded(final RendererContext resourceContext, final String oidStr) {
         final RootOid rootOid = RootOidDefault.deStringEncoded(oidStr, getOidMarshaller());
         return resourceContext.getAdapterManager().adapterFor(rootOid);
     }
-    
-    public static String getOidStr(final RendererContext resourceContext, final ObjectAdapter objectAdapter) {
-        return org.apache.isis.viewer.restfulobjects.rendering.util.OidUtils.getOidStr(resourceContext, objectAdapter);
-    }
 
     private static OidMarshaller getOidMarshaller() {
 		return new OidMarshaller();

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/isis.properties b/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/isis.properties
index fcfa486..4bd7fbb 100644
--- a/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/isis.properties
+++ b/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/isis.properties
@@ -14,48 +14,44 @@
 #  KIND, either express or implied.  See the License for the
 #  specific language governing permissions and limitations
 #  under the License.
-isis.services.prefix = org.apache.isis.tck.dom
+
+isis.persistor=in-memory
+
+isis.authentication=bypass
+isis.authorization=bypass
+
+isis.user-profile-store=in-memory
+
+
+isis.services.prefix = org.apache.isis.core.tck.dom
 isis.services =\
     scalars.ApplibValuedEntityRepository,\
     scalars.JdkValuedEntityRepository,\
     scalars.PrimitiveValuedEntityRepository,\
     scalars.WrapperValuedEntityRepository, \
-    refs.AssociatedEntitiesRepository,\
+    refs.ParentEntityRepository,\
+    refs.BidirWithListParentEntityRepository,\
+    refs.BidirWithSetParentEntityRepository,\
+    refs.PolyClassParentEntityRepository,\
+    refs.PolyInterfaceIdentityStrategyParentEntityRepository,\
+    refs.PolyInterfaceParentEntityRepository,\
+    refs.UnidirFkParentEntityRepository,\
+    refs.UnidirJoinParentEntityRepository,\
+    refs.UnidirReferencedEntityRepository,\
+    refs.UnidirReferencingEntityRepository,\
     defaults.WithDefaultsEntityRepository,\
     defaults.HiddenRepository
 
 
-isis.fixtures.prefix= org.apache.isis.tck.fixture
+isis.fixtures.prefix= org.apache.isis.core.tck.fixture
 isis.fixtures=\
     LogonAsSvenFixture,\
     scalars.ApplibValuedEntityFixture,\
     scalars.JdkValuedEntityFixture,\
     scalars.PrimitiveValuedEntityFixture,\
     scalars.WrapperValuedEntityFixture,\
-    refs.AssociatedEntitiesFixture,\
+    refs.ParentEntitiesFixture,\
     defaults.WithDefaultsEntityFixture
 
 
 
-isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.dflt.classsubstitutor.CglibClassSubstitutor
-#isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.javassist.classsubstitutor.JavassistClassSubstitutor
-#isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.identity.classsubstitutor.ClassSubstitutorIdentity
-
-isis.persistor.object-factory=org.apache.isis.runtimes.dflt.bytecode.dflt.objectfactory.CglibObjectFactory
-#isis.persistor.object-factory=org.apache.isis.runtimes.dflt.bytecode.javassist.objectfactory.JavassistObjectFactory
-#isis.persistor.object-factory=org.apache.isis.runtimes.dflt.bytecode.identity.objectfactory.ObjectFactoryBasic
-
-
-isis.persistor.domain-object-container=org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault
-#isis.persistor.domain-object-container=org.apache.isis.progmodel.wrapper.metamodel.DomainObjectContainerWrapperFactory
-
-
-#isis.reflector.facets.include=org.apache.isis.runtimes.dflt.runtime.authorization.standard.AuthorizationFacetFactoryImpl
-#isis.authorization.learn=true
-
-isis.authentication=dflt
-isis.authorization=dflt
-
-isis.user-profile-store=in-memory
-isis.persistor=in-memory
-#isis.xmlos.dir=/tmp/xml
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/security_file.allow
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/security_file.allow b/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/security_file.allow
deleted file mode 100644
index 928983a..0000000
--- a/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/security_file.allow
+++ /dev/null
@@ -1,16 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one
-#  or more contributor license agreements.  See the NOTICE file
-#  distributed with this work for additional information
-#  regarding copyright ownership.  The ASF licenses this file
-#  to you under the Apache License, Version 2.0 (the
-#  "License"); you may not use this file except in compliance
-#  with the License.  You may obtain a copy of the License at
-#  
-#         http://www.apache.org/licenses/LICENSE-2.0
-#         
-#  Unless required by applicable law or agreed to in writing,
-#  software distributed under the License is distributed on an
-#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#  KIND, either express or implied.  See the License for the
-#  specific language governing permissions and limitations
-#  under the License.

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/security_file.passwords
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/security_file.passwords b/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/security_file.passwords
deleted file mode 100644
index 7f07af5..0000000
--- a/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/security_file.passwords
+++ /dev/null
@@ -1,20 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one
-#  or more contributor license agreements.  See the NOTICE file
-#  distributed with this work for additional information
-#  regarding copyright ownership.  The ASF licenses this file
-#  to you under the Apache License, Version 2.0 (the
-#  "License"); you may not use this file except in compliance
-#  with the License.  You may obtain a copy of the License at
-#  
-#         http://www.apache.org/licenses/LICENSE-2.0
-#         
-#  Unless required by applicable law or agreed to in writing,
-#  software distributed under the License is distributed on an
-#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#  KIND, either express or implied.  See the License for the
-#  specific language governing permissions and limitations
-#  under the License.
-sven:pass
-dick:pass
-bob:pass
-joe:pass

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/web.xml b/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/web.xml
index f275a03..6b320d3 100644
--- a/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/web.xml
+++ b/component/viewer/restfulobjects/tck/src/main/webapp/WEB-INF/web.xml
@@ -94,7 +94,7 @@
 		<init-param>
 			<!-- trusted client, so no authentication required -->
 			<param-name>authenticationSessionStrategy</param-name>
-			<param-value>org.apache.isis.viewer.restfulobjects.viewer.authentication.AuthenticationSessionStrategyTrusted</param-value>
+			<param-value>org.apache.isis.viewer.restfulobjects.server.authentication.AuthenticationSessionStrategyTrusted</param-value>
 		</init-param>
 		<init-param>
             <!-- what to do if no session was found; we indicate to issue a 401 basic authentication challenge -->
@@ -117,7 +117,7 @@
 
 	<context-param>
 		<param-name>javax.ws.rs.Application</param-name>
-		<param-value>org.apache.isis.viewer.restfulobjects.viewer.RestfulObjectsApplication</param-value>
+		<param-value>org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplication</param-value>
 	</context-param>
 
 	<servlet>

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/IsisWebServerRule.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/IsisWebServerRule.java b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/IsisWebServerRule.java
index 95b644c..8c7367d 100644
--- a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/IsisWebServerRule.java
+++ b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/IsisWebServerRule.java
@@ -23,6 +23,7 @@ import org.junit.runners.model.FrameworkMethod;
 import org.junit.runners.model.Statement;
 
 import org.apache.isis.core.webserver.WebServer;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulClient;
 
 public class IsisWebServerRule implements MethodRule {
 
@@ -34,6 +35,7 @@ public class IsisWebServerRule implements MethodRule {
             return webServer;
         };
     };
+    private RestfulClient client;
 
     @Override
     public Statement apply(final Statement base, final FrameworkMethod method, final Object target) {
@@ -45,4 +47,12 @@ public class IsisWebServerRule implements MethodRule {
         return WEBSERVER.get();
     }
 
+    public RestfulClient getClient() {
+        if(client == null) {
+            final WebServer webServer = getWebServer();
+            client = new RestfulClient(webServer.getBase());
+        }
+        return client;
+    }
+    
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5041f0b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/resources/AnyResourceTest_clientAcceptHeader_exceptionHandling.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/resources/AnyResourceTest_clientAcceptHeader_exceptionHandling.java b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/resources/AnyResourceTest_clientAcceptHeader_exceptionHandling.java
deleted file mode 100644
index 97d2ccd..0000000
--- a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/resources/AnyResourceTest_clientAcceptHeader_exceptionHandling.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.viewer.restfulobjects.tck.resources;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-import javax.ws.rs.core.MediaType;
-
-import org.jboss.resteasy.client.ClientRequest;
-import org.jboss.resteasy.client.ClientResponse;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.apache.isis.core.webserver.WebServer;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulClient;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.Header;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.applib.homepage.HomePageRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.util.Parser;
-import org.apache.isis.viewer.restfulobjects.tck.IsisWebServerRule;
-
-public class AnyResourceTest_clientAcceptHeader_exceptionHandling {
-
-    @Rule
-    public IsisWebServerRule webServerRule = new IsisWebServerRule();
-
-    private RestfulClient client;
-
-    @Before
-    public void setUp() throws Exception {
-        final WebServer webServer = webServerRule.getWebServer();
-        client = new RestfulClient(webServer.getBase());
-    }
-
-    @Test
-    public void whenSetsNoAcceptHeader_isOk() throws Exception {
-        // given
-        final RestfulRequest restfulReq = client.createRequest(RestfulHttpMethod.GET, "/");
-
-        // when
-        final RestfulResponse<HomePageRepresentation> restfulResp = restfulReq.executeT();
-
-        // then
-        assertThat(restfulResp.getStatus(), is(HttpStatusCode.OK));
-        assertThat(restfulResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(RepresentationType.HOME_PAGE.getMediaType()));
-    }
-
-    @Test
-    public void whenSetsAcceptHeaderOfApplicationJson_isOk() throws Exception {
-
-        // given
-        final RestfulRequest restfulReq = client.createRequest(RestfulHttpMethod.GET, "/");
-        restfulReq.withHeader(Header.ACCEPT, MediaType.APPLICATION_JSON_TYPE);
-
-        // when
-        final RestfulResponse<HomePageRepresentation> restfulResp = restfulReq.executeT();
-
-        // then
-        assertThat(restfulResp.getStatus(), is(HttpStatusCode.OK));
-        assertThat(restfulResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(RepresentationType.HOME_PAGE.getMediaType()));
-    }
-
-    @Ignore("RestEasy seems to reject with a 500, 'No match for accept header', rather than a 405.")
-    @Test
-    public void whenSetsIncorrectMediaType_returnsNotAcceptable() throws Exception {
-
-        // given
-        final ClientRequest clientRequest = client.getClientRequestFactory().createRelativeRequest("/");
-        clientRequest.accept(MediaType.APPLICATION_ATOM_XML_TYPE);
-
-        // when
-        final ClientResponse<?> resp = clientRequest.get();
-        final RestfulResponse<JsonRepresentation> restfulResp = RestfulResponse.of(resp);
-        
-        final String entity = restfulResp.getEntity().toString();
-
-        // then
-        assertThat(restfulResp.getStatus(), is(HttpStatusCode.NOT_ACCEPTABLE));
-    }
-
-}