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/17 23:04:13 UTC

svn commit: r1185378 [1/2] - in /incubator/isis/trunk/framework: tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/ viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/ viewer/json/json-applib/src/main/java/org/apache/isis/...

Author: danhaywood
Date: Mon Oct 17 21:04:11 2011
New Revision: 1185378

URL: http://svn.apache.org/viewvc?rev=1185378&view=rev
Log:
ISIS-109: support for custom serialization of JSON built-ins; Rels are now URNs (in an enum); changed format of the 'profile' parameter of media-type to be a URN (cf v0.47 of RO spec)

Added:
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelperTest_readBodyAsMap.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoderTest_asAdapter.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoderTest_asObject.java
Modified:
    incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntity.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/JsonRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulMediaType.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest_getMediaType_lookup.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/capabilities/CapabilitiesResourceTest_representationAndHeaders.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_representationAndHeaders.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_xrofollowlinks.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectLinkTo.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelper.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceLinkTo.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAdapterLinkTo.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypesReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionParamReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java

Modified: incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntity.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntity.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntity.java (original)
+++ incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntity.java Mon Oct 17 21:04:11 2011
@@ -19,12 +19,16 @@
 
 package org.apache.isis.tck.dom.simples;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
 import org.apache.isis.applib.AbstractDomainObject;
 import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Optional;
 
 public class SimpleEntity extends AbstractDomainObject {
 
-    // {{ Name
+    // {{ Name (string)
     private String name;
 
     @MemberOrder(sequence = "1")
@@ -38,7 +42,7 @@ public class SimpleEntity extends Abstra
     // }}
 
 
-    // {{ Flag
+    // {{ Flag (boolean)
     private Boolean flag;
 
     @MemberOrder(sequence = "1")
@@ -51,5 +55,126 @@ public class SimpleEntity extends Abstra
     }
     // }}
 
+    
+    // {{ AnInt (int)
+    private int anInt;
+
+    @MemberOrder(sequence = "1")
+    public int getAnInt() {
+        return anInt;
+    }
+
+    public void setAnInt(final int anInt) {
+        this.anInt = anInt;
+    }
+    // }}
+    
+    
+    // {{ AnotherInt
+    private Integer anotherInt;
+
+    @MemberOrder(sequence = "1")
+    @Optional
+    public Integer getAnotherInt() {
+        return anotherInt;
+    }
+
+    public void setAnotherInt(final Integer anotherInt) {
+        this.anotherInt = anotherInt;
+    }
+    // }}
+
+    // {{ ALong
+    private long aLong;
+    @MemberOrder(sequence = "1")
+    public long getALong() {
+        return aLong;
+    }
+
+    public void setALong(final long aLong) {
+        this.aLong = aLong;
+    }
+    // }}
+
+
+    // {{ AnotherLong
+    private Long anotherLong;
+
+    @MemberOrder(sequence = "1")
+    @Optional
+    public Long getAnotherLong() {
+        return anotherLong;
+    }
+
+    public void setAnotherLong(final Long anotherLong) {
+        this.anotherLong = anotherLong;
+    }
+    // }}
+
+
+    // {{ ADouble
+    private double aDouble;
+
+    @MemberOrder(sequence = "1")
+    public double getADouble() {
+        return aDouble;
+    }
+
+    public void setADouble(final double aDouble) {
+        this.aDouble = aDouble;
+    }
+    // }}
+
+
+    // {{ AnotherDouble
+    private Double anotherDouble;
+
+    @MemberOrder(sequence = "1")
+    @Optional
+    public Double getAnotherDouble() {
+        return anotherDouble;
+    }
+
+    public void setAnotherDouble(final Double anotherDouble) {
+        this.anotherDouble = anotherDouble;
+    }
+    // }}
+
+
+    // {{ ABigInteger
+    private BigInteger aBigInteger;
+
+    @MemberOrder(sequence = "1")
+    @Optional
+    public BigInteger getABigInteger() {
+        return aBigInteger;
+    }
+
+    public void setABigInteger(final BigInteger aBigInteger) {
+        this.aBigInteger = aBigInteger;
+    }
+    // }}
+
+
+    // {{ ABigDecimal
+    private BigDecimal aBigDecimal;
+
+    @MemberOrder(sequence = "1")
+    @Optional
+    public BigDecimal getABigDecimal() {
+        return aBigDecimal;
+    }
+
+    public void setABigDecimal(final BigDecimal bigDecimal) {
+        this.aBigDecimal = bigDecimal;
+    }
+    // }}
+
+
+    
+
+
+
+
 
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/JsonRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/JsonRepresentation.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/JsonRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/JsonRepresentation.java Mon Oct 17 21:04:11 2011
@@ -6,6 +6,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringReader;
 import java.lang.reflect.Constructor;
+import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.Collections;
@@ -314,6 +315,43 @@ public class JsonRepresentation {
     }
 
 
+    /////////////////////////////////////////////////////////////////////////
+    // isBigDecimal, getBigDecimal, asBigDecimal
+    /////////////////////////////////////////////////////////////////////////
+
+    public boolean isBigDecimal(String path) {
+        return isBigDecimal(getNode(path));
+    }
+
+    public boolean isBigDecimal() {
+        return isBigDecimal(asJsonNode());
+    }
+
+    private boolean isBigDecimal(JsonNode node) {
+        return !representsNull(node) && node.isValueNode() && node.isBigDecimal();
+    }
+
+    public BigDecimal getBigDecimal(String path) {
+        JsonNode node = getNode(path);
+        return getBigDecimal(path, node);
+    }
+
+    public BigDecimal asBigDecimal() {
+        return getBigDecimal(null, asJsonNode());
+    }
+
+    private BigDecimal getBigDecimal(String path, JsonNode node) {
+        if (representsNull(node)) {
+            return null;
+        }
+        checkValue(path, node, "a biginteger");
+        if (!node.isBigDecimal()) {
+            throw new IllegalArgumentException(formatExMsg(path, "is not a biginteger"));
+        }
+        return node.getDecimalValue();
+    }
+
+
     
     /////////////////////////////////////////////////////////////////////////
     // isInt, getInt, asInt
@@ -658,7 +696,9 @@ public class JsonRepresentation {
         String xpathExpression = String.format(xpathTemplate,  args);
         try {
             // puts object structure under a <o>
-            org.jdom.Document jdomDoc = new SAXBuilder().build(new StringReader(toXml()));
+            final StringReader xmlStream = new StringReader(toXml());
+            final SAXBuilder saxBuilder = new SAXBuilder();
+            org.jdom.Document jdomDoc = saxBuilder.build(xmlStream);
 
             String prefix = jsonNode.isArray()?"a":"o";
             XPath xpath = XPath.newInstance("/" + prefix + xpathExpression);

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulMediaType.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulMediaType.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulMediaType.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulMediaType.java Mon Oct 17 21:04:11 2011
@@ -12,7 +12,7 @@ public final class RestfulMediaType {
     
     private RestfulMediaType(){}
 
-    private static final String BASE = MediaType.APPLICATION_JSON + ";profile=http://restfulobjects.org/profiles/";
+    private static final String BASE = MediaType.APPLICATION_JSON + ";profile=urn:org.restfulobjects/";
     
     public final static String APPLICATION_JSON_HOME_PAGE = BASE + "homepage";
     public final static String APPLICATION_JSON_USER = BASE + "user";

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java Mon Oct 17 21:04:11 2011
@@ -71,8 +71,19 @@ public final class Link extends JsonRepr
         return this;
     }
 
+    /**
+     * Returns the &quot;arguments&quot; json-property of the link (a map).
+     * 
+     * <p>
+     * If there is no &quot;arguments&quot; node, then as a convenience
+     * will return an empty map.
+     * @return
+     */
     public JsonRepresentation getArguments() {
         JsonNode arguments = asObjectNode().get("arguments");
+        if(arguments.isNull()) {
+            return JsonRepresentation.newMap();
+        }
         return new JsonRepresentation(arguments);
     }
     

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest_getMediaType_lookup.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest_getMediaType_lookup.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest_getMediaType_lookup.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest_getMediaType_lookup.java Mon Oct 17 21:04:11 2011
@@ -32,7 +32,7 @@ public class RepresentationTypeTest_getM
 
     @Test
     public void getMediaTypeProfile() {
-        assertThat(RepresentationType.CAPABILITIES.getMediaTypeWithProfile(), is("http://restfulobjects.org/profiles/capabilities"));
+        assertThat(RepresentationType.CAPABILITIES.getMediaTypeWithProfile(), is("urn:org.restfulobjects/capabilities"));
         assertThat(RepresentationType.GENERIC.getMediaTypeWithProfile(), is(nullValue()));
     }
 

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/capabilities/CapabilitiesResourceTest_representationAndHeaders.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/capabilities/CapabilitiesResourceTest_representationAndHeaders.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/capabilities/CapabilitiesResourceTest_representationAndHeaders.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/capabilities/CapabilitiesResourceTest_representationAndHeaders.java Mon Oct 17 21:04:11 2011
@@ -104,7 +104,7 @@ public class CapabilitiesResourceTest_re
         final MediaType contentType = restfulResponse.getHeader(Header.CONTENT_TYPE);
         assertThat(contentType, hasType("application"));
         assertThat(contentType, hasSubType("json"));
-        assertThat(contentType, hasParameter("profile", "http://restfulobjects.org/profiles/capabilities"));
+        assertThat(contentType, hasParameter("profile", "urn:org.restfulobjects/capabilities"));
         assertThat(contentType, is(RepresentationType.CAPABILITIES.getMediaType()));
         
         // then

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_representationAndHeaders.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_representationAndHeaders.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_representationAndHeaders.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_representationAndHeaders.java Mon Oct 17 21:04:11 2011
@@ -92,7 +92,7 @@ public class HomePageResourceTest_repres
         final MediaType contentType = restfulResponse.getHeader(Header.CONTENT_TYPE);
         assertThat(contentType, hasType("application"));
         assertThat(contentType, hasSubType("json"));
-        assertThat(contentType, hasParameter("profile", "http://restfulobjects.org/profiles/homepage"));
+        assertThat(contentType, hasParameter("profile", "urn:org.restfulobjects/homepage"));
         assertThat(contentType, is(RepresentationType.HOME_PAGE.getMediaType()));
         
         // then

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java Mon Oct 17 21:04:11 2011
@@ -9,6 +9,7 @@ import java.io.IOException;
 
 import javax.ws.rs.core.Response;
 
+import org.apache.isis.applib.annotation.Ignore;
 import org.apache.isis.runtimes.dflt.webserver.WebServer;
 import org.apache.isis.viewer.json.applib.HttpMethod;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
@@ -48,7 +49,7 @@ public class DomainServiceResourceTest_i
 
 
     @Test
-    public void invokeNoArg() throws Exception {
+    public void invokeQueryOnly_noArg_usingClientFollow() throws Exception {
 
         // given
         JsonRepresentation givenAction = givenAction("simples", "list");
@@ -67,7 +68,7 @@ public class DomainServiceResourceTest_i
     }
 
     @Test
-    public void invokePut() throws Exception {
+    public void invokeIdempotent_withArgs_usingClientFollow() throws Exception {
 
         // given
         JsonRepresentation givenAction = givenAction("simples", "newPersistentEntity");
@@ -97,19 +98,49 @@ public class DomainServiceResourceTest_i
         assertThat(objectRepr.xpath("//members/e[propertyId='%s']/value", "flag").getBoolean("value"), is(true));
     }
 
+    @org.junit.Ignore("up to here")
+    @Test
+    public void invoke_withAllBuiltInArgs_usingClientFollow() throws Exception {
+
+        // given
+        JsonRepresentation givenAction = givenAction("simples", "newTransientEntity");
+        final ObjectActionRepresentation actionRepr = givenAction.as(ObjectActionRepresentation.class);
+        
+        // when
+        final Link invokeLink = actionRepr.getInvoke();
+        
+        // then
+        assertThat(invokeLink, is(not(nullValue())));
+        
+        final JsonRepresentation args = invokeLink.getArguments();
+        assertThat(args.size(), is(0));
+        
+        // when
+        args.mapPut("name", "New Name");
+        args.mapPut("flag", true);
+        final Response response = client.follow(invokeLink, args);
+        
+        // then
+        RestfulResponse<DomainObjectRepresentation> restfulResponse = RestfulResponse.ofT(response);
+        final DomainObjectRepresentation objectRepr = restfulResponse.getEntity();
+        
+        assertThat(objectRepr.xpath("//members/e[propertyId='%s']/value", "name").getString("value"), is("New Name"));
+        assertThat(objectRepr.xpath("//members/e[propertyId='%s']/value", "flag").getBoolean("value"), is(true));
+    }
+
 
     private JsonRepresentation givenAction(final String serviceId, final String actionId) throws JsonParseException, JsonMappingException, IOException {
         final String href = givenHrefToService(serviceId);
         
         final RestfulRequest request = 
-                client.createRequest(HttpMethod.GET, href).withArg(QueryParameter.FOLLOW_LINKS, "members[actionId=%s].actionDetails", actionId);
+                client.createRequest(HttpMethod.GET, href).withArg(QueryParameter.FOLLOW_LINKS, "members[actionId=%s].details", actionId);
         final RestfulResponse<DomainObjectRepresentation> restfulResponse = request.executeT();
 
         assertThat(restfulResponse.getStatus(), is(HttpStatusCode.OK));
         final DomainObjectRepresentation repr = restfulResponse.getEntity();
         
         JsonRepresentation actionLinkRepr = repr.xpath("/members/e[actionId='%s']", actionId);
-        return actionLinkRepr.getRepresentation("e.actionDetails.value");
+        return actionLinkRepr.getRepresentation("e.details.value");
     }
 
 

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_xrofollowlinks.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_xrofollowlinks.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_xrofollowlinks.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/serviceId/DomainServiceResourceTest_serviceId_xrofollowlinks.java Mon Oct 17 21:04:11 2011
@@ -45,7 +45,7 @@ public class DomainServiceResourceTest_s
         final String href = givenHrefToService("simples");
         
         final RestfulRequest request = 
-                client.createRequest(HttpMethod.GET, href).withArg(QueryParameter.FOLLOW_LINKS, "members[actionId=%s].actionDetails", "list");
+                client.createRequest(HttpMethod.GET, href).withArg(QueryParameter.FOLLOW_LINKS, "members[actionId=%s].details", "list");
         final RestfulResponse<DomainObjectRepresentation> restfulResponse = request.executeT();
 
         assertThat(restfulResponse.getStatus(), is(HttpStatusCode.OK));
@@ -57,12 +57,12 @@ public class DomainServiceResourceTest_s
         JsonRepresentation actionRepr;
         
         actionRepr = membersList.xpath("/e[actionId='%s']", "list");
-        assertThat(actionRepr.getRepresentation("e.actionDetails"), is(not(nullValue())));
-        assertThat(actionRepr.getRepresentation("e.actionDetails.value"), is(not(nullValue()))); // followed
+        assertThat(actionRepr.getRepresentation("e.details"), is(not(nullValue())));
+        assertThat(actionRepr.getRepresentation("e.details.value"), is(not(nullValue()))); // followed
         
         actionRepr = membersList.xpath("/e[actionId='%s']", "newTransientEntity");
-        assertThat(actionRepr.getRepresentation("e.actionDetails"), is(not(nullValue())));
-        assertThat(actionRepr.getRepresentation("e.actionDetails.value"), is(nullValue())); // not followed
+        assertThat(actionRepr.getRepresentation("e.details"), is(not(nullValue())));
+        assertThat(actionRepr.getRepresentation("e.details.value"), is(nullValue())); // not followed
     }
 
 

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java Mon Oct 17 21:04:11 2011
@@ -95,7 +95,7 @@ public class UserResourceTest_representa
         final MediaType contentType = restfulResponse.getHeader(Header.CONTENT_TYPE);
         assertThat(contentType, hasType("application"));
         assertThat(contentType, hasSubType("json"));
-        assertThat(contentType, hasParameter("profile", "http://restfulobjects.org/profiles/user"));
+        assertThat(contentType, hasParameter("profile", "urn:org.restfulobjects/user"));
         assertThat(contentType, is(RepresentationType.USER.getMediaType()));
 
         // then

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java Mon Oct 17 21:04:11 2011
@@ -24,18 +24,18 @@ import org.apache.isis.viewer.json.viewe
 
 public final class LinkBuilder {
 
-    public static LinkBuilder newBuilder(ResourceContext resourceContext, String rel, RepresentationType representationType, String hrefFormat, Object... hrefArgs) {
+    public static LinkBuilder newBuilder(ResourceContext resourceContext, Rel rel, RepresentationType representationType, String hrefFormat, Object... hrefArgs) {
         return newBuilder(resourceContext, rel, representationType.getMediaType(), hrefFormat, hrefArgs);
     }
 
-    public static LinkBuilder newBuilder(ResourceContext resourceContext, String rel, MediaType mediaType, String hrefFormat, Object... hrefArgs) {
+    public static LinkBuilder newBuilder(ResourceContext resourceContext, Rel rel, MediaType mediaType, String hrefFormat, Object... hrefArgs) {
         return new LinkBuilder(resourceContext, rel, String.format(hrefFormat, hrefArgs), mediaType);
     }
 
     private final ResourceContext resourceContext;
     private final JsonRepresentation representation = JsonRepresentation.newMap();
     
-	private final String rel;
+	private final Rel rel;
     private final String href;
     private final MediaType mediaType;
     
@@ -45,7 +45,7 @@ public final class LinkBuilder {
     private JsonRepresentation value;
     private String key;
 
-    protected LinkBuilder(ResourceContext resourceContext, String rel, String href, MediaType mediaType) {
+    protected LinkBuilder(ResourceContext resourceContext, Rel rel, String href, MediaType mediaType) {
         this.resourceContext = resourceContext;
         this.rel = rel;
         this.href = href;
@@ -74,7 +74,7 @@ public final class LinkBuilder {
 
     public JsonRepresentation build() {
         representation.mapPut("key", key);
-        representation.mapPut("rel", rel);
+        representation.mapPut("rel", rel.getName());
         representation.mapPut("href", resourceContext.urlFor(href));
         representation.mapPut("method", method);
         representation.mapPut("type", mediaType.toString());

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java Mon Oct 17 21:04:11 2011
@@ -55,7 +55,7 @@ public abstract class ReprRendererAbstra
 
     public R withSelf(String href) {
         if(href != null) {
-            representation.mapPut("self", LinkBuilder.newBuilder(resourceContext, "self", representationType, href).build());
+            representation.mapPut("self", LinkBuilder.newBuilder(resourceContext, Rel.SELF, representationType, href).build());
         }
         return cast(this);
     }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -25,6 +25,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
 
 public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbstract<R, ObjectAndMember<T>>, T extends ObjectMember> 
@@ -64,7 +65,7 @@ public abstract class AbstractObjectMemb
     }
 
     public R withSelf() {
-        representation.mapPut("self", linkToBuilder.linkToMember("self", memberType, objectMember).build());
+        representation.mapPut("self", linkToBuilder.linkToMember(Rel.SELF, memberType, objectMember).build());
         return cast(this);
     }
 
@@ -101,9 +102,9 @@ public abstract class AbstractObjectMemb
     public R withDetailsLink() {
         final JsonRepresentation link = 
                 linkToBuilder.linkToMember(memberType.getDetailsRel(), memberType, objectMember).build();
-        representation.mapPut(memberType.getDetailsRel(), link);
+        representation.mapPut(memberType.getDetailsRel().getName(), link);
         final LinkFollower membersLinkFollower = getLinkFollower();
-        final LinkFollower detailsLinkFollower = membersLinkFollower.follow(memberType.getDetailsRel());
+        final LinkFollower detailsLinkFollower = membersLinkFollower.follow(memberType.getDetailsRel().getName());
         if(membersLinkFollower.matches(representation) && detailsLinkFollower.matches(link)) {
             followDetailsLink(link);
         }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectLinkTo.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/DomainObjectLinkTo.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectLinkTo.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectLinkTo.java Mon Oct 17 21:04:11 2011
@@ -21,6 +21,7 @@ import org.apache.isis.core.metamodel.sp
 import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 
 public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
 
@@ -62,13 +63,13 @@ public class DomainObjectLinkTo implemen
     /**
      * hook method
      */
-    protected String linkRel() {
-        return "object";
+    protected Rel linkRel() {
+        return Rel.OBJECT;
     }
 
 
     @Override
-    public final LinkBuilder linkToMember(String rel, MemberType memberType, ObjectMember objectMember, String... parts) {
+    public final LinkBuilder linkToMember(Rel rel, MemberType memberType, ObjectMember objectMember, String... parts) {
         StringBuilder buf = new StringBuilder(linkRef());
         buf.append("/").append(memberType.getUrlPart()).append(objectMember.getId());
         for(String part: parts) {

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -35,6 +35,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactory;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactoryRegistry;
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
@@ -57,7 +58,7 @@ public class DomainObjectReprRenderer ex
         }
     }
     
-    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectAdapter elementAdapter) {
+    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, Rel rel, ObjectAdapter elementAdapter) {
         String oidStr = resourceContext.getOidStringifier().enString(elementAdapter.getOid());
         String url = "objects/" + oidStr;
         return LinkBuilder.newBuilder(resourceContext, rel, RepresentationType.DOMAIN_OBJECT, url);
@@ -88,7 +89,7 @@ public class DomainObjectReprRenderer ex
     public JsonRepresentation render() {
 
         // self
-        if(includesSelf) {
+        if(includesSelf && objectAdapter.isPersistent()) {
             JsonRepresentation self = linkToBuilder.with(objectAdapter).builder().build();
             representation.mapPut("self", self);
         }
@@ -104,7 +105,7 @@ public class DomainObjectReprRenderer ex
         // links
         final JsonRepresentation links = JsonRepresentation.newArray();
         links.arrayAdd(
-                DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), "domainType", objectAdapter.getSpecification()).build());
+                DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.DESCRIBEDBY, objectAdapter.getSpecification()).build());
         withLinks(links);
         
         // extensions
@@ -203,7 +204,7 @@ public class DomainObjectReprRenderer ex
 		}
 		TitleFacet titleFacet = objectSpec.getFacet(TitleFacet.class);
 		String title = titleFacet.title(objectAdapter, resourceContext.getLocalization());
-		return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, "object", objectAdapter)
+		return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.OBJECT, objectAdapter)
 		            .withTitle(title).build();
 	}
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelper.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelper.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceHelper.java Mon Oct 17 21:04:11 2011
@@ -47,6 +47,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.JsonApplicationException;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactory;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactoryRegistry;
 import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
@@ -290,7 +291,7 @@ public class DomainResourceHelper {
         String oid = OidUtils.getOidStr(resourceContext, objectAdapter);
         // TODO: review; can't be more specific with the media type because we don't have a media type for action/invoke
         final JsonRepresentation repBuilder = 
-                LinkBuilder.newBuilder(resourceContext, "self", MediaType.APPLICATION_JSON_TYPE, "objects/%s/actions/%s/invoke", oid, action.getId()).build();
+                LinkBuilder.newBuilder(resourceContext, Rel.SELF, MediaType.APPLICATION_JSON_TYPE, "objects/%s/actions/%s/invoke", oid, action.getId()).build();
         representation.mapPut("self", repBuilder);
         return representation;
     }
@@ -554,9 +555,16 @@ public class DomainResourceHelper {
         return argList;
     }
 
-    private JsonRepresentation readBodyAsMap(String bodyAsString) {
+    static JsonRepresentation readBodyAsMap(String body) {
+        if(body == null) {
+            return JsonRepresentation.newMap();
+        }
+        final String bodyTrimmed = body.trim();
+        if(bodyTrimmed.isEmpty()) {
+            return JsonRepresentation.newMap();
+        }
         try {
-            final JsonRepresentation jsonRepr = JsonMapper.instance().read(bodyAsString);
+            final JsonRepresentation jsonRepr = JsonMapper.instance().read(bodyTrimmed);
             if(!jsonRepr.isMap()) {
                 throw JsonApplicationException.create(
                     HttpStatusCode.BAD_REQUEST,

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceLinkTo.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/DomainServiceLinkTo.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceLinkTo.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceLinkTo.java Mon Oct 17 21:04:11 2011
@@ -19,6 +19,7 @@ package org.apache.isis.viewer.json.view
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.services.ServiceUtil;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 
 public class DomainServiceLinkTo extends DomainObjectLinkTo {
 
@@ -37,8 +38,8 @@ public class DomainServiceLinkTo extends
     }
     
     @Override
-    protected String linkRel() {
-        return "service";
+    protected Rel linkRel() {
+        return Rel.SERVICE;
     }
     
     @Override

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoder.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/JsonValueEncoder.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/JsonValueEncoder.java Mon Oct 17 21:04:11 2011
@@ -1,5 +1,8 @@
 package org.apache.isis.viewer.json.viewer.resources.domainobjects;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -15,16 +18,67 @@ public final class JsonValueEncoder {
     }
 
     public ObjectAdapter asAdapter(final ObjectSpecification objectSpec, final JsonRepresentation representation) {
-        EncodableFacet encodableFacet = objectSpec.getFacet(EncodableFacet.class);
+        if(objectSpec == null) {
+            throw new IllegalArgumentException("objectSpec cannot be null");
+        }
+        final EncodableFacet encodableFacet = objectSpec.getFacet(EncodableFacet.class);
+        if(encodableFacet == null) {
+            throw new IllegalArgumentException("objectSpec expected to have EncodableFacet");
+        }
+        if(representation == null) {
+            throw new IllegalArgumentException("representation cannot be null");
+        }
+        if(!representation.isValue()) {
+            throw new IllegalArgumentException("representation must be of a value");
+        }
 
         // special case handling for JSON built-ins
         if(isBoolean(objectSpec)) {
-            if(representation.isBoolean()) {
-                String argStr = ""+representation.asBoolean();
-                return encodableFacet.fromEncodedString(argStr);
-            } else {
-                throw new IllegalArgumentException("ObjectSpec is Boolean.class or boolean.class but representation is not a JSON boolean");
-            }
+            if(!representation.isBoolean()) {
+                throwIncompatibleException(objectSpec, representation);
+            } 
+            String argStr = ""+representation.asBoolean();
+            return encodableFacet.fromEncodedString(argStr);
+        }
+        
+        if(isInteger(objectSpec)) {
+            if(!representation.isInt()) {
+                throwIncompatibleException(objectSpec, representation);
+            } 
+            String argStr = ""+representation.asInt();
+            return encodableFacet.fromEncodedString(argStr);
+        }
+        
+        if(isLong(objectSpec)) {
+            if(!representation.isLong()) {
+                throwIncompatibleException(objectSpec, representation);
+            } 
+            String argStr = ""+representation.asLong();
+            return encodableFacet.fromEncodedString(argStr);
+        }
+        
+        if(isBigInteger(objectSpec)) {
+            if(!representation.isBigInteger()) {
+                throwIncompatibleException(objectSpec, representation);
+            } 
+            String argStr = ""+representation.asBigInteger();
+            return encodableFacet.fromEncodedString(argStr);
+        }
+        
+        if(isBigDecimal(objectSpec)) {
+            if(!representation.isBigDecimal()) {
+                throwIncompatibleException(objectSpec, representation);
+            } 
+            String argStr = ""+representation.asBigDecimal();
+            return encodableFacet.fromEncodedString(argStr);
+        }
+        
+        if(isDouble(objectSpec)) {
+            if(!representation.isDouble()) {
+                throwIncompatibleException(objectSpec, representation);
+            } 
+            String argStr = ""+representation.asDouble();
+            return encodableFacet.fromEncodedString(argStr);
         }
         
         if(!representation.isString()) {
@@ -35,25 +89,64 @@ public final class JsonValueEncoder {
     }
 
     public Object asObject(ObjectAdapter objectAdapter) {
-        
+        if(objectAdapter == null) {
+            throw new IllegalArgumentException("objectAdapter cannot be null");
+        }
         final ObjectSpecification objectSpec = objectAdapter.getSpecification();
 
         // special case handling for JSON built-ins
-        if(isBoolean(objectSpec)) {
+        if(     isBoolean(objectSpec) || 
+                isInteger(objectSpec) || isLong(objectSpec) || isBigInteger(objectSpec) || 
+                isDouble(objectSpec) || isBigDecimal(objectSpec) ) {
             // simply return
             return objectAdapter.getObject();
         }
         
-        EncodableFacet encodeableFacet = objectSpec.getFacet(EncodableFacet.class);
-        return encodeableFacet.toEncodedString(objectAdapter);
+        final EncodableFacet encodableFacet = objectSpec.getFacet(EncodableFacet.class);
+        if(encodableFacet == null) {
+            throw new IllegalArgumentException("objectSpec expected to have EncodableFacet");
+        }
+        return encodableFacet.toEncodedString(objectAdapter);
+    }
+
+    
+    private boolean isBoolean(final ObjectSpecification objectSpec) {
+        return hasCorrespondingClass(objectSpec, boolean.class, Boolean.class);
+    }
+
+    private boolean isInteger(final ObjectSpecification objectSpec) {
+        return hasCorrespondingClass(objectSpec, int.class, Integer.class);
+    }
+
+    private boolean isLong(final ObjectSpecification objectSpec) {
+        return hasCorrespondingClass(objectSpec, long.class, Long.class);
+    }
+
+    private boolean isBigInteger(final ObjectSpecification objectSpec) {
+        return hasCorrespondingClass(objectSpec, BigInteger.class);
     }
 
+    private boolean isDouble(final ObjectSpecification objectSpec) {
+        return hasCorrespondingClass(objectSpec, double.class, Double.class);
+    }
+    
+    private boolean isBigDecimal(final ObjectSpecification objectSpec) {
+        return hasCorrespondingClass(objectSpec, BigDecimal.class);
+    }
 
 
-    private boolean isBoolean(ObjectSpecification objectSpec) {
+    private boolean hasCorrespondingClass(ObjectSpecification objectSpec, Class<?>... candidates) {
         final Class<?> specClass = objectSpec.getCorrespondingClass();
-        return specClass == boolean.class || specClass == Boolean.class;
+        for(final Class<?> candidate: candidates) {
+            if(specClass == candidate) {
+                return true;
+            }
+        }
+        return false;
     }
 
+    private void throwIncompatibleException(final ObjectSpecification objectSpec, final JsonRepresentation representation) {
+        throw new IllegalArgumentException(String.format("representation '%s' incompatible with objectSpec '%s'", representation.toString(), objectSpec.getCorrespondingClass().getName()));
+    }
 
 }

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=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java Mon Oct 17 21:04:11 2011
@@ -36,15 +36,16 @@ import org.apache.isis.core.progmodel.fa
 import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.applib.util.Enums;
 import org.apache.isis.viewer.json.viewer.representations.HttpMethod;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 
 import com.google.common.collect.ImmutableMap;
 
 public enum MemberType {
 
-    OBJECT_PROPERTY("properties/", "propertyId", "propertyDetails", RepresentationType.OBJECT_PROPERTY, 
+    OBJECT_PROPERTY("properties/", "propertyId", Rel.DETAILS, RepresentationType.OBJECT_PROPERTY, 
             ImmutableMap.of(
-                "modify", MutatorSpec.of(PropertyValidateFacet.class, PropertySetterFacet.class, HttpMethod.PUT, BodyArgs.ONE),
-                "clear", MutatorSpec.of(PropertyValidateFacet.class, PropertyClearFacet.class, HttpMethod.DELETE, BodyArgs.NONE)
+                "modify", MutatorSpec.of(Rel.MODIFY, PropertyValidateFacet.class, PropertySetterFacet.class, HttpMethod.PUT, BodyArgs.ONE),
+                "clear", MutatorSpec.of(Rel.CLEAR, PropertyValidateFacet.class, PropertyClearFacet.class, HttpMethod.DELETE, BodyArgs.NONE)
                 )) {
         @Override
         public ObjectSpecification specFor(ObjectMember objectMember) {
@@ -54,11 +55,11 @@ public enum MemberType {
     /**
      * {@link #getMutators()} are keyed by {@link CollectionSemantics#getAddToKey()}
      */
-    OBJECT_COLLECTION("collections/", "collectionId", "collectionDetails", RepresentationType.OBJECT_COLLECTION, 
+    OBJECT_COLLECTION("collections/", "collectionId", Rel.DETAILS, RepresentationType.OBJECT_COLLECTION, 
             ImmutableMap.of(
-                "addToSet", MutatorSpec.of(CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.PUT, BodyArgs.ONE),
-                "addToList", MutatorSpec.of(CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.POST, BodyArgs.ONE),
-                "removeFrom", MutatorSpec.of(CollectionValidateRemoveFromFacet.class, CollectionRemoveFromFacet.class, HttpMethod.DELETE, BodyArgs.ONE)
+                "addToSet", MutatorSpec.of(Rel.ADD_TO, CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.PUT, BodyArgs.ONE),
+                "addToList", MutatorSpec.of(Rel.ADD_TO, CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.POST, BodyArgs.ONE),
+                "removeFrom", MutatorSpec.of(Rel.REMOVE_FROM, CollectionValidateRemoveFromFacet.class, CollectionRemoveFromFacet.class, HttpMethod.DELETE, BodyArgs.ONE)
                 )) {
         @Override
         public ObjectSpecification specFor(ObjectMember objectMember) {
@@ -68,11 +69,11 @@ public enum MemberType {
     /**
      * {@link #getMutators()} are keyed by {@link ActionSemantics#getInvokeKey()}
      */
-    OBJECT_ACTION("actions/", "actionId", "actionDetails", RepresentationType.OBJECT_ACTION,
+    OBJECT_ACTION("actions/", "actionId", Rel.DETAILS, RepresentationType.OBJECT_ACTION,
             ImmutableMap.of(
-                "invokeQueryOnly", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.GET, BodyArgs.MANY, "invoke"),
-                "invokeIdempotent", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.PUT, BodyArgs.MANY, "invoke"),
-                "invoke", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.POST, BodyArgs.MANY, "invoke")
+                "invokeQueryOnly", MutatorSpec.of(Rel.INVOKE, ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.GET, BodyArgs.MANY, "invoke"),
+                "invokeIdempotent", MutatorSpec.of(Rel.INVOKE, ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.PUT, BodyArgs.MANY, "invoke"),
+                "invoke", MutatorSpec.of(Rel.INVOKE, ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.POST, BodyArgs.MANY, "invoke")
             )) {
         @Override
         public ObjectSpecification specFor(ObjectMember objectMember) {
@@ -83,14 +84,14 @@ public enum MemberType {
 
     private final String urlPart;
     private final String jsProp;
-    private final String detailsRel;
+    private final Rel detailsRel;
     private final String name;
     private final RepresentationType representationType;
 
     private final Map<String, MutatorSpec> mutators;
     
 
-    private MemberType(String urlPart, String jsProp, String detailsRel, RepresentationType representationType, Map<String, MutatorSpec> mutators) {
+    private MemberType(String urlPart, String jsProp, Rel detailsRel, RepresentationType representationType, Map<String, MutatorSpec> mutators) {
         this.urlPart = urlPart;
         this.jsProp = jsProp;
         this.detailsRel = detailsRel;
@@ -146,7 +147,7 @@ public enum MemberType {
         return representationType;
     }
 
-    public String getDetailsRel() {
+    public Rel getDetailsRel() {
         return detailsRel;
     }
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MutatorSpec.java Mon Oct 17 21:04:11 2011
@@ -18,24 +18,27 @@ package org.apache.isis.viewer.json.view
 
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.viewer.json.viewer.representations.HttpMethod;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 
 public class MutatorSpec {
 
-    public static MutatorSpec of(Class<? extends Facet> validationFacetType, Class<? extends Facet> mutatorFacetType, HttpMethod httpMethod, BodyArgs argSpec) {
-        return of(validationFacetType, mutatorFacetType, httpMethod, argSpec, null);
+    public static MutatorSpec of(Rel rel, Class<? extends Facet> validationFacetType, Class<? extends Facet> mutatorFacetType, HttpMethod httpMethod, BodyArgs argSpec) {
+        return of(rel, validationFacetType, mutatorFacetType, httpMethod, argSpec, null);
     }
 
-    public static MutatorSpec of(Class<? extends Facet> validationFacetType, Class<? extends Facet> mutatorFacetType, HttpMethod httpMethod, BodyArgs argSpec, String suffix) {
-        return new MutatorSpec(validationFacetType, mutatorFacetType, httpMethod, argSpec, suffix);
+    public static MutatorSpec of(Rel rel, Class<? extends Facet> validationFacetType, Class<? extends Facet> mutatorFacetType, HttpMethod httpMethod, BodyArgs argSpec, String suffix) {
+        return new MutatorSpec(rel, validationFacetType, mutatorFacetType, httpMethod, argSpec, suffix);
     }
 
+    public final Rel rel;
     public final Class<? extends Facet> validationFacetType;
     public final Class<? extends Facet> mutatorFacetType;
     public final HttpMethod httpMethod;
     public final String suffix;
     public final BodyArgs arguments;
 
-    private MutatorSpec(Class<? extends Facet> validationFacetType, Class<? extends Facet> mutatorFacetType, HttpMethod httpMethod, BodyArgs bodyArgs, String suffix) {
+    private MutatorSpec(Rel rel, Class<? extends Facet> validationFacetType, Class<? extends Facet> mutatorFacetType, HttpMethod httpMethod, BodyArgs bodyArgs, String suffix) {
+        this.rel = rel;
         this.validationFacetType = validationFacetType;
         this.mutatorFacetType = mutatorFacetType;
         this.httpMethod = httpMethod;

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -27,6 +27,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 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.ReprRenderer;
@@ -114,7 +115,7 @@ public class ObjectActionReprRenderer ex
         } 
         JsonRepresentation arguments = mutatorArgs(mutatorSpec);
         JsonRepresentation detailsLink = 
-                linkToBuilder.linkToMember("invoke", memberType, objectMember, mutatorSpec.suffix)
+                linkToBuilder.linkToMember(Rel.INVOKE, memberType, objectMember, mutatorSpec.suffix)
                 .withHttpMethod(mutatorSpec.httpMethod)
                 .withArguments(arguments)
                 .build();
@@ -148,7 +149,7 @@ public class ObjectActionReprRenderer ex
 	        if(objectMember.isContributed()) {
 	            ObjectActionParameter actionParameter = objectMember.getParameters().get(i);
 	            if (actionParameter.getSpecification().isOfType(objectAdapter.getSpecification())) {
-	                return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, "object", objectAdapter).build();
+	                return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.OBJECT, objectAdapter).build();
 	            }
 	        }
 	        return NullNode.instance;
@@ -222,17 +223,15 @@ public class ObjectActionReprRenderer ex
     }
 
      private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
-         links.arrayAdd(TypeActionReprRenderer.newLinkToBuilder(resourceContext, "typeAction", objectAdapter.getSpecification(), objectMember).build());
+         links.arrayAdd(TypeActionReprRenderer.newLinkToBuilder(resourceContext, Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build());
      }
 
      private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
        if(objectMember.isContributed()) {
             ObjectAdapter serviceAdapter = contributingServiceAdapter();
-            JsonRepresentation contributedByLink = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, "contributedBy", serviceAdapter).build();
+            JsonRepresentation contributedByLink = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.CONTRIBUTED_BY, serviceAdapter).build();
             links.arrayAdd(contributedByLink);
         }
-
-       links.arrayAdd(DomainTypeReprRenderer.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).build());
     }
 
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAdapterLinkTo.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/ObjectAdapterLinkTo.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAdapterLinkTo.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectAdapterLinkTo.java Mon Oct 17 21:04:11 2011
@@ -4,6 +4,7 @@ import org.apache.isis.core.metamodel.ad
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 
 public interface ObjectAdapterLinkTo {
 
@@ -13,7 +14,7 @@ public interface ObjectAdapterLinkTo {
 
     LinkBuilder builder();
 
-    LinkBuilder linkToMember(String rel, MemberType memberType, ObjectMember objectMember, String... parts);
+    LinkBuilder linkToMember(Rel rel, MemberType memberType, ObjectMember objectMember, String... parts);
 
 
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -28,6 +28,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactory;
 import org.apache.isis.viewer.json.viewer.representations.RendererFactoryRegistry;
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
@@ -106,7 +107,7 @@ public class ObjectCollectionReprRendere
                 
                 JsonRepresentation arguments = mutatorArgs(mutatorSpec);
                 JsonRepresentation detailsLink = 
-                        linkToBuilder.linkToMember(mutator, memberType, objectMember, mutatorSpec.suffix)
+                        linkToBuilder.linkToMember(mutatorSpec.rel, memberType, objectMember, mutatorSpec.suffix)
                         .withHttpMethod(mutatorSpec.httpMethod)
                         .withArguments(arguments)
                         .build();
@@ -140,7 +141,7 @@ public class ObjectCollectionReprRendere
         List<JsonRepresentation> list = Lists.newArrayList();
         for (final ObjectAdapter elementAdapter : facet.iterable(valueAdapter)) {
 
-            LinkBuilder newBuilder = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, "object", elementAdapter);
+            LinkBuilder newBuilder = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.OBJECT, elementAdapter);
 
 			list.add(newBuilder.build());
         }
@@ -158,11 +159,10 @@ public class ObjectCollectionReprRendere
     }
 
     private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(TypeCollectionReprRenderer.newLinkToBuilder(resourceContext, "typeCollection", objectAdapter.getSpecification(), objectMember).build());
+        links.arrayAdd(TypeCollectionReprRenderer.newLinkToBuilder(resourceContext, Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build());
     }
 
     private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(DomainTypeReprRenderer.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).build());
     }
 
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -26,6 +26,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.applib.RepresentationType;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 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.ReprRenderer;
@@ -107,7 +108,7 @@ public class ObjectPropertyReprRenderer 
                 
                 JsonRepresentation arguments = mutatorArgs(mutatorSpec);
                 JsonRepresentation detailsLink = 
-                        linkToBuilder.linkToMember(mutator, memberType, objectMember, mutatorSpec.suffix)
+                        linkToBuilder.linkToMember(mutatorSpec.rel, memberType, objectMember, mutatorSpec.suffix)
                         .withHttpMethod(mutatorSpec.httpMethod)
                         .withArguments(arguments)
                         .build();
@@ -174,11 +175,10 @@ public class ObjectPropertyReprRenderer 
     }
 
     private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(TypePropertyReprRenderer.newLinkToBuilder(resourceContext, "typeProperty", objectAdapter.getSpecification(), objectMember).build());
+        links.arrayAdd(TypePropertyReprRenderer.newLinkToBuilder(resourceContext, Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build());
     }
 
     private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
-        links.arrayAdd(DomainTypeReprRenderer.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).build());
     }
 
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.java Mon Oct 17 21:04:11 2011
@@ -24,6 +24,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
 
@@ -68,7 +69,7 @@ public abstract class AbstractTypeFeatur
         } 
         
         representation.mapPut("self", 
-            LinkBuilder.newBuilder(getResourceContext(), "self", getRepresentationType(), "domainTypes/%s/%s/%s", 
+            LinkBuilder.newBuilder(getResourceContext(), Rel.SELF, getRepresentationType(), "domainTypes/%s/%s/%s", 
                     getObjectSpecification().getFullIdentifier(), getMemberType().getUrlPart(), ((ObjectMember)getObjectFeature()).getId()).build());
     }
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -22,6 +22,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
@@ -39,7 +40,7 @@ public class DomainTypeReprRenderer exte
         }
     }
 
-    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpec) {
+    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, Rel rel, ObjectSpecification objectSpec) {
         String typeFullName = objectSpec.getFullIdentifier();
         String url = "domainTypes/" + typeFullName;
         return LinkBuilder.newBuilder(resourceContext, rel, RepresentationType.DOMAIN_TYPE, url);
@@ -62,7 +63,7 @@ public class DomainTypeReprRenderer exte
 
         // self
         if(includesSelf) {
-            representation.mapPut("self", newLinkToBuilder(getResourceContext(), "self", objectSpecification).build());
+            representation.mapPut("self", newLinkToBuilder(getResourceContext(), Rel.SELF, objectSpecification).build());
         }
         
         

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypesReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypesReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypesReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypesReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -8,6 +8,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
@@ -48,7 +49,7 @@ public class DomainTypesReprRenderer ext
         JsonRepresentation specList = JsonRepresentation.newArray();
         for (ObjectSpecification objectSpec : specifications) {
             final LinkBuilder linkBuilder = 
-                    LinkBuilder.newBuilder(getResourceContext(), "domainType", RepresentationType.DOMAIN_TYPE, "domainTypes/%s", objectSpec.getFullIdentifier());
+                    LinkBuilder.newBuilder(getResourceContext(), Rel.DESCRIBEDBY, RepresentationType.DOMAIN_TYPE, "domainTypes/%s", objectSpec.getFullIdentifier());
             specList.arrayAdd(linkBuilder.build());
         }
         

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionParamReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionParamReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionParamReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionParamReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -24,6 +24,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
 
@@ -41,7 +42,7 @@ public class TypeActionParamReprRenderer
         }
     }
 
-    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpecification, ObjectActionParameter objectActionParameter) {
+    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, Rel rel, ObjectSpecification objectSpecification, ObjectActionParameter objectActionParameter) {
         String typeFullName = objectSpecification.getFullIdentifier();
         final ObjectAction objectAction = objectActionParameter.getAction();
         String actionId = objectAction.getId();
@@ -63,7 +64,7 @@ public class TypeActionParamReprRenderer
         // self
         if(includesSelf) {
             representation.mapPut("self", 
-                newLinkToBuilder(getResourceContext(), "self", getObjectSpecification(), getObjectFeature()).build());
+                newLinkToBuilder(getResourceContext(), Rel.SELF, getObjectSpecification(), getObjectFeature()).build());
         }
         
         // links and extensions

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -23,6 +23,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
 
@@ -40,7 +41,7 @@ public class TypeActionReprRenderer exte
         }
     }
 
-    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpecification, ObjectAction objectAction) {
+    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, Rel rel, ObjectSpecification objectSpecification, ObjectAction objectAction) {
         String typeFullName = objectSpecification.getFullIdentifier();
         String actionId = objectAction.getId();
         String url = "domainTypes/" + typeFullName + "/actions/" + actionId;

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -23,6 +23,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
 
@@ -40,7 +41,7 @@ public class TypeCollectionReprRenderer 
         }
     }
 
-    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpecification, OneToManyAssociation collection) {
+    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, Rel rel, ObjectSpecification objectSpecification, OneToManyAssociation collection) {
         String typeFullName = objectSpecification.getFullIdentifier();
         String collectionId = collection.getId();
         String url = "domainTypes/" + typeFullName + "/collections/" + collectionId;

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java?rev=1185378&r1=1185377&r2=1185378&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java Mon Oct 17 21:04:11 2011
@@ -23,6 +23,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.Rel;
 import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
 import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
 
@@ -40,7 +41,7 @@ public class TypePropertyReprRenderer ex
         }
     }
 
-    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpecification, OneToOneAssociation property) {
+    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, Rel rel, ObjectSpecification objectSpecification, OneToOneAssociation property) {
         String typeFullName = objectSpecification.getFullIdentifier();
         String propertyId = property.getId();
         String url = "domainTypes/" + typeFullName + "/properties/" + propertyId;