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/09/05 14:40:14 UTC

svn commit: r1165265 [1/2] - in /incubator/isis/trunk/framework/viewer/json: json-applib/src/main/java/org/apache/isis/viewer/json/applib/ json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/ json-applib/src/main/java/org/apache/i...

Author: danhaywood
Date: Mon Sep  5 12:40:11 2011
New Revision: 1165265

URL: http://svn.apache.org/viewvc?rev=1165265&view=rev
Log:
ISIS-109: creating some test infrastructure and helpers

Added:
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/LinksToSelf.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/
      - copied from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesRepresentation.java
      - copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ScalarValueRepresentation.java
      - copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ActionInvocationRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeRepresentation.java
      - copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java
      - copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeResource.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainObjectResourceTest.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/IsisWebServerRule.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/UserStoryTest.java
      - copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/ResourceRepresentationTest.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/
      - copied from r1165222, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/
      - copied from r1165222, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/reptypes/
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java
      - copied, changed from r1165222, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/reptypes/RepresentationTypeResourceServerside.java
Modified:
    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/RestfulClient.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionInvocationRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionPromptRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/CollectionDetailsRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectResource.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesResource.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/PropertyDetailsRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ServicesRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeResource.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/HttpStatusCodeTest.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getBigInteger.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getDouble.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_putXxx.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/ResourceRepresentationTest.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/JsonApplication.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/ResourceContext.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/BodyArgs.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberRepType.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.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/PropertyRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/RepresentationTypeResourceServerside.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objectlist/DomainObjectListRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/objects/
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/reptypes/
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/services/DomainServiceListRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/services/DomainServicesResourceServerside.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserRepBuilder.java

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=1165265&r1=1165264&r2=1165265&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 Sep  5 12:40:11 2011
@@ -5,7 +5,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringReader;
-import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.Collections;
@@ -32,8 +31,6 @@ import org.jdom.input.SAXBuilder;
 import org.jdom.output.XMLOutputter;
 import org.jdom.xpath.XPath;
 
-import com.google.common.base.Splitter;
-import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 
 

Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/LinksToSelf.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/LinksToSelf.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/LinksToSelf.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/LinksToSelf.java Mon Sep  5 12:40:11 2011
@@ -0,0 +1,26 @@
+/*
+ *  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.json.applib;
+
+import org.apache.isis.viewer.json.applib.blocks.Link;
+
+public interface LinksToSelf {
+
+    public Link getSelf();
+}

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulClient.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulClient.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulClient.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulClient.java Mon Sep  5 12:40:11 2011
@@ -24,8 +24,8 @@ import javax.ws.rs.core.Response;
 
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.isis.viewer.json.applib.blocks.Link;
-import org.apache.isis.viewer.json.applib.domain.DomainObjectResource;
-import org.apache.isis.viewer.json.applib.domain.DomainServicesResource;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectResource;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainServicesResource;
 import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
 import org.apache.isis.viewer.json.applib.types.TypeResource;
 import org.apache.isis.viewer.json.applib.user.UserResource;
@@ -65,7 +65,7 @@ public class RestfulClient {
         return homePageResource;
     }
 
-    public DomainServicesResource getServicesResource() {
+    public DomainServicesResource getDomainServicesResource() {
         return servicesResource;
     }
 

Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesRepresentation.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesRepresentation.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesRepresentation.java Mon Sep  5 12:40:11 2011
@@ -0,0 +1,18 @@
+package org.apache.isis.viewer.json.applib.capabilities;
+
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
+import org.codehaus.jackson.JsonNode;
+
+public class CapabilitiesRepresentation extends JsonRepresentation implements LinksToSelf {
+
+    public CapabilitiesRepresentation(JsonNode jsonNode) {
+        super(jsonNode);
+    }
+
+    public Link getSelf() {
+        return getLink("self");
+    }
+
+}

Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java Mon Sep  5 12:40:11 2011
@@ -0,0 +1,37 @@
+/*
+ *  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.json.applib.capabilities;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.jboss.resteasy.annotations.ClientResponseType;
+
+@Path("/capabilities")
+public interface CapabilitiesResource {
+
+    @GET
+    @Produces({ MediaType.APPLICATION_JSON })
+    @ClientResponseType(entityType=String.class)
+    public Response capabilities();
+
+}
\ No newline at end of file

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionPromptRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionPromptRepresentation.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionPromptRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ActionPromptRepresentation.java Mon Sep  5 12:40:11 2011
@@ -1,13 +1,19 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.codehaus.jackson.JsonNode;
 
 
-public class ActionPromptRepresentation extends JsonRepresentation {
+public class ActionPromptRepresentation extends JsonRepresentation implements LinksToSelf {
 
     public ActionPromptRepresentation(JsonNode jsonNode) {
         super(jsonNode);
     }
+    
+    public Link getSelf() {
+        return getLink("self");
+    }
 
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/CollectionDetailsRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/CollectionDetailsRepresentation.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/CollectionDetailsRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/CollectionDetailsRepresentation.java Mon Sep  5 12:40:11 2011
@@ -1,13 +1,20 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.codehaus.jackson.JsonNode;
 
 
-public class CollectionDetailsRepresentation extends JsonRepresentation {
+public class CollectionDetailsRepresentation extends JsonRepresentation implements LinksToSelf {
 
     public CollectionDetailsRepresentation(JsonNode jsonNode) {
         super(jsonNode);
     }
+    
+    public Link getSelf() {
+        return getLink("self");
+    }
+
 
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java Mon Sep  5 12:40:11 2011
@@ -1,15 +1,33 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.codehaus.jackson.JsonNode;
 
 
-public class DomainObjectRepresentation extends JsonRepresentation {
+public class DomainObjectRepresentation extends JsonRepresentation implements LinksToSelf {
 
     public DomainObjectRepresentation(JsonNode jsonNode) {
         super(jsonNode);
     }
 
+    public Link getSelf() {
+        return getLink("self");
+    }
+
+    public Link getDomainType() {
+        return getLink("domainType");
+    }
+
+    public String getOid() {
+        return getString("oid");
+    }
+
+    public String getTitle() {
+        return getString("title");
+    }
+    
     /**
      * Requires xom:xom:1.1 (LGPL) to be added as a dependency.
      */
@@ -24,4 +42,5 @@ public class DomainObjectRepresentation 
         return xpath("/*[memberType='action']");
     }
 
+
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectResource.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectResource.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectResource.java Mon Sep  5 12:40:11 2011
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
 
 import java.io.InputStream;
 import java.util.List;

Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesRepresentation.java (from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesRepresentation.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesRepresentation.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesRepresentation.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesRepresentation.java&r1=1165222&r2=1165265&rev=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ServicesRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesRepresentation.java Mon Sep  5 12:40:11 2011
@@ -1,20 +1,17 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
 import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.codehaus.jackson.JsonNode;
 
 
-public class ServicesRepresentation extends JsonRepresentation {
+public class DomainServicesRepresentation extends JsonRepresentation implements LinksToSelf {
 
-    public ServicesRepresentation(JsonNode jsonNode) {
+    public DomainServicesRepresentation(JsonNode jsonNode) {
         super(jsonNode);
     }
 
-    public Link getRepresentationType() {
-        return getLink("representationType");
-    }
-
     public Link getSelf() {
         return getLink("self");
     }

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesResource.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesResource.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServicesResource.java Mon Sep  5 12:40:11 2011
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/PropertyDetailsRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/PropertyDetailsRepresentation.java?rev=1165265&r1=1165222&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/PropertyDetailsRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/PropertyDetailsRepresentation.java Mon Sep  5 12:40:11 2011
@@ -1,13 +1,20 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.codehaus.jackson.JsonNode;
 
 
-public class PropertyDetailsRepresentation extends JsonRepresentation {
+public class PropertyDetailsRepresentation extends JsonRepresentation implements LinksToSelf {
 
     public PropertyDetailsRepresentation(JsonNode jsonNode) {
         super(jsonNode);
     }
+    
+    public Link getSelf() {
+        return getLink("self");
+    }
+
 
 }

Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ScalarValueRepresentation.java (from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ActionInvocationRepresentation.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ScalarValueRepresentation.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ScalarValueRepresentation.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ActionInvocationRepresentation.java&r1=1165222&r2=1165265&rev=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domain/ActionInvocationRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/ScalarValueRepresentation.java Mon Sep  5 12:40:11 2011
@@ -1,13 +1,19 @@
-package org.apache.isis.viewer.json.applib.domain;
+package org.apache.isis.viewer.json.applib.domainobjects;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.codehaus.jackson.JsonNode;
 
 
-public class ActionInvocationRepresentation extends JsonRepresentation {
+public class ScalarValueRepresentation extends JsonRepresentation implements LinksToSelf {
 
-    public ActionInvocationRepresentation(JsonNode jsonNode) {
+    public ScalarValueRepresentation(JsonNode jsonNode) {
         super(jsonNode);
     }
+    
+    public Link getSelf() {
+        return getLink("self");
+    }
 
 }

Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeRepresentation.java (from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeRepresentation.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeRepresentation.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeRepresentation.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeRepresentation.java&r1=1165222&r2=1165265&rev=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeRepresentation.java Mon Sep  5 12:40:11 2011
@@ -1,12 +1,13 @@
-package org.apache.isis.viewer.json.applib.reptypes;
+package org.apache.isis.viewer.json.applib.domaintypes;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
 import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.codehaus.jackson.JsonNode;
 
-public class RepresentationTypeRepresentation extends JsonRepresentation {
+public class DomainTypeRepresentation extends JsonRepresentation implements LinksToSelf {
 
-    public RepresentationTypeRepresentation(JsonNode jsonNode) {
+    public DomainTypeRepresentation(JsonNode jsonNode) {
         super(jsonNode);
     }
 

Copied: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java (from r1165222, incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeResource.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java?p2=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java&p1=incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeResource.java&r1=1165222&r2=1165265&rev=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/reptypes/RepresentationTypeResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java Mon Sep  5 12:40:11 2011
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.json.applib.reptypes;
+package org.apache.isis.viewer.json.applib.domaintypes;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -27,7 +27,7 @@ import javax.ws.rs.core.Response;
 import org.jboss.resteasy.annotations.ClientResponseType;
 
 @Path("/representationTypes")
-public interface RepresentationTypeResource {
+public interface DomainTypeResource {
 
     @GET
     @Path("/{representationTypeName}")

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageRepresentation.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageRepresentation.java Mon Sep  5 12:40:11 2011
@@ -1,18 +1,16 @@
 package org.apache.isis.viewer.json.applib.homepage;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
 import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.codehaus.jackson.JsonNode;
 
-public class HomePageRepresentation extends JsonRepresentation {
+public class HomePageRepresentation extends JsonRepresentation implements LinksToSelf {
 
     public HomePageRepresentation(JsonNode jsonNode) {
         super(jsonNode);
     }
 
-    public Link getRepresentationType() {
-        return getLink("representationType");
-    }
     public Link getSelf() {
         return getLink("self");
     }
@@ -22,11 +20,13 @@ public class HomePageRepresentation exte
     public Link getServices() {
         return getLink("services");
     }
+    public Link getCapabilities() {
+        return getLink("capabilities");
+    }
 
     public JsonRepresentation getLinks() {
-        return getArray("services");
+        return getArray("links");
     }
-
     public JsonRepresentation getMetadata() {
         return getArray("metadata");
     }

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserRepresentation.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserRepresentation.java Mon Sep  5 12:40:11 2011
@@ -1,18 +1,19 @@
 package org.apache.isis.viewer.json.applib.user;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
 import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.codehaus.jackson.JsonNode;
 
 
-public class UserRepresentation extends JsonRepresentation {
+public class UserRepresentation extends JsonRepresentation implements LinksToSelf {
 
     public UserRepresentation(JsonNode jsonNode) {
         super(jsonNode);
     }
     
-    public Link getRepresentationType() {
-        return getLink("representationType");
+    public Link getSelf() {
+        return getLink("self");
     }
 
     public String getUserName() {

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/HttpStatusCodeTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/HttpStatusCodeTest.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/HttpStatusCodeTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/HttpStatusCodeTest.java Mon Sep  5 12:40:11 2011
@@ -5,7 +5,6 @@ import static org.junit.Assert.assertTha
 
 import javax.ws.rs.core.Response.Status.Family;
 
-import org.apache.isis.viewer.json.applib.HttpStatusCode;
 import org.junit.Test;
 
 public class HttpStatusCodeTest {

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getBigInteger.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getBigInteger.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getBigInteger.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getBigInteger.java Mon Sep  5 12:40:11 2011
@@ -25,7 +25,6 @@ import static org.junit.Assert.assertTha
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
-import java.math.BigDecimal;
 import java.math.BigInteger;
 
 import org.codehaus.jackson.JsonParseException;

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getDouble.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getDouble.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getDouble.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_getDouble.java Mon Sep  5 12:40:11 2011
@@ -25,7 +25,6 @@ import static org.junit.Assert.assertTha
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
-import java.math.BigDecimal;
 
 import org.codehaus.jackson.JsonParseException;
 import org.codehaus.jackson.map.JsonMappingException;

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_putXxx.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_putXxx.java?rev=1165265&r1=1165264&r2=1165265&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_putXxx.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/JsonRepresentationTest_putXxx.java Mon Sep  5 12:40:11 2011
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.viewer.json.applib;
 
-import static org.hamcrest.CoreMatchers.*;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 

Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainObjectResourceTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainObjectResourceTest.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainObjectResourceTest.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainObjectResourceTest.java Mon Sep  5 12:40:11 2011
@@ -0,0 +1,263 @@
+package org.apache.isis.viewer.json.tck;
+
+import static org.apache.isis.core.commons.matchers.IsisMatchers.matches;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isLink;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status.Family;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.tck.dom.scalars.ApplibValuedEntity;
+import org.apache.isis.tck.objstore.dflt.scalars.ApplibValuedEntityRepositoryDefault;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.blocks.Link;
+import org.apache.isis.viewer.json.applib.blocks.Method;
+import org.apache.isis.viewer.json.applib.domainobjects.ActionPromptRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectResource;
+import org.apache.isis.viewer.json.applib.domainobjects.PropertyDetailsRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.ScalarValueRepresentation;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+
+
+public class DomainObjectResourceTest {
+
+    @Rule
+    public IsisWebServerRule webServerRule = new IsisWebServerRule();
+    
+    protected RestfulClient client;
+
+    @Before
+    public void setUp() throws Exception {
+        WebServer webServer = webServerRule.getWebServer();
+        client = new RestfulClient(webServer.getBase());
+    }
+
+
+    @Ignore("to get working again")
+    @Test
+    public void returnsDomainObjectRepresentation() throws Exception {
+        
+        // given
+        DomainObjectResource domainObjectResource = client.getDomainObjectResource();
+        
+        // when
+        Response domainObjectResp = domainObjectResource.object("OID:1");
+        RestfulResponse<DomainObjectRepresentation> domainObjectJsonResp = RestfulResponse.of(domainObjectResp, DomainObjectRepresentation.class);
+        assertThat(domainObjectJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+        
+        // then 
+        DomainObjectRepresentation domainObjectRepr = domainObjectJsonResp.getEntity();
+
+        Link self = domainObjectRepr.getSelf();
+        assertThat(self, 
+                isLink().rel("object").href(matches(".+objects/OID:1")).method(Method.GET));
+        assertThat(domainObjectRepr.getDomainType(), 
+                isLink().rel("type").href(matches(".+" + ApplibValuedEntityRepositoryDefault.class.getName() + ".+")).method(Method.GET));
+        
+        assertThat(domainObjectRepr.getTitle(), is("ApplibValues"));
+        assertThat(domainObjectRepr.getOid(), is("OID:1"));
+
+        // _self.icon
+        Link selfIcon = domainObjectRepr.getLink("_self.icon");
+        // TODO: shouldn't really be present since no icon available; or should point to a default, perhaps
+        assertThat(selfIcon, isLink().rel("icon").href(matches(".+" + "/images/" + "null\\.png")).method(Method.GET));
+
+        // properties
+        JsonRepresentation properties = domainObjectRepr.getProperties();
+        assertThat(properties.mapSize(), is(1));
+        
+        // id property
+        JsonRepresentation idProperty = properties.getRepresentation("id");
+        assertThat(idProperty.getString("memberType"), is("property"));
+        assertThat(idProperty.getString("propertyId"), is("id"));
+        assertThat(idProperty.getString("value"), is(org.apache.isis.tck.objstore.dflt.scalars.ApplibValuedEntityRepositoryDefault.class.getName()));
+        assertThat(idProperty.getString("disabledReason"), is(not(nullValue())));
+
+        Link idPropertyType = idProperty.getLink("type");
+        assertThat(idPropertyType, isLink().rel("type").href(matches(".+vnd\\.string\\+json")).method(Method.GET));
+
+        Link idPropertyDetails = idProperty.getLink("details");
+        assertThat(idPropertyDetails, isLink().rel("property").href(self.getHref() + "/properties/id").method(Method.GET));
+
+        // actions
+        JsonRepresentation actions = domainObjectRepr.getActions();
+        assertThat(actions.mapSize(), is(2));
+
+        JsonRepresentation listAction = actions.getRepresentation("list");
+        assertThat(listAction.getString("memberType"), is("action"));
+        assertThat(listAction.getString("actionId"), is("list"));
+        assertThat(listAction.getString("actionType"), is("USER"));
+        assertThat(listAction.getInt("numParameters"), is(0));
+
+        Link listActionType = listAction.getLink("type");
+        assertThat(listActionType.getRel(), is("type"));
+        assertThat(listActionType.getHref(), matches(".+vnd\\.list\\+json"));
+        assertThat(listActionType.getMethod(), is(Method.GET));
+
+        Link listActionDetails = listAction.getLink("details");
+        assertThat(listActionDetails.getRel(), is("action"));
+        assertThat(listActionDetails.getHref(), is(self.getHref() + "/actions/list"));
+        assertThat(listActionDetails.getMethod(), is(Method.GET));
+
+        JsonRepresentation newEntityAction = actions.getRepresentation("newEntity");
+        assertThat(newEntityAction.getString("memberType"), is("action"));
+        assertThat(newEntityAction.getString("actionType"), is("USER"));
+        assertThat(newEntityAction.getInt("numParameters"), is(0));
+
+        Link newEntityActionType = newEntityAction.getLink("type");
+        assertThat(newEntityActionType.getRel(), is("type"));
+        assertThat(newEntityActionType.getHref(), matches(".+vnd\\." +
+                ApplibValuedEntity.class.getName() +
+        		"\\+json"));
+        assertThat(newEntityActionType.getMethod(), is(Method.GET));
+
+        Link newEntityActionDetails = newEntityAction.getLink("details");
+        assertThat(newEntityActionDetails.getRel(), is("action"));
+        assertThat(newEntityActionDetails.getHref(), is(self.getHref() + "/actions/newEntity"));
+        assertThat(newEntityActionDetails.getMethod(), is(Method.GET));
+    }
+
+    @Ignore("to get working again")
+    @Test
+    public void propertyDetails() throws Exception {
+        // given
+        DomainObjectResource domainObjectResource = client.getDomainObjectResource();
+        
+        // when
+        Response idPropertyResp = domainObjectResource.propertyDetails("OID:1", "id");
+        RestfulResponse<PropertyDetailsRepresentation> idPropertyJsonResp = RestfulResponse.of(idPropertyResp, PropertyDetailsRepresentation.class);
+        assertThat(idPropertyJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+        
+        // then 
+        PropertyDetailsRepresentation propertyDetailsRepr = idPropertyJsonResp.getEntity();
+
+        // _self.link
+        Link selfLink = propertyDetailsRepr.getLink("_self.link");
+        assertThat(selfLink.getRel(), is("member"));
+        assertThat(selfLink.getHref(), matches(".+objects/OID:1/properties/id"));
+        assertThat(selfLink.getMethod(), is(Method.GET));
+
+        // _self.object
+        Link selfObject = propertyDetailsRepr.getLink("_self.object");
+        assertThat(selfObject.getRel(), is("object"));
+        assertThat(selfObject.getHref(), matches(".+objects/OID:1"));
+        assertThat(selfObject.getMethod(), is(Method.GET));
+
+        // type
+        Link type = propertyDetailsRepr.getLink("type");
+        assertThat(type.getRel(), is("type"));
+        assertThat(type.getHref(), matches(".+vnd\\.string\\+json"));
+        assertThat(type.getMethod(), is(Method.GET));
+
+        assertThat(propertyDetailsRepr.getString("memberType"), is("property"));
+        assertThat(propertyDetailsRepr.getString("value"), is(org.apache.isis.tck.objstore.dflt.scalars.ApplibValuedEntityRepositoryDefault.class.getName()));
+        assertThat(propertyDetailsRepr.getString("disabledReason"), is(not(nullValue())));
+    }
+
+    
+    @Ignore("to get working again")
+    @Test
+    public void actionPrompt() throws Exception {
+        // given
+        DomainObjectResource domainObjectResource = client.getDomainObjectResource();
+        
+        // when
+        Response actionPromptResp = domainObjectResource.actionPrompt("OID:1", "list");
+        RestfulResponse<ActionPromptRepresentation> actionPromptJsonResp = RestfulResponse.of(actionPromptResp, ActionPromptRepresentation.class);
+        assertThat(actionPromptJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+        
+        // then 
+        ActionPromptRepresentation actionPromptRepr = actionPromptJsonResp.getEntity();
+
+        // _self.link
+        Link selfLink = actionPromptRepr.getLink("_self.link");
+        assertThat(selfLink.getRel(), is("member"));
+        assertThat(selfLink.getHref(), matches(".+objects/OID:1/actions/list"));
+        assertThat(selfLink.getMethod(), is(Method.GET));
+
+        // _self.object
+        Link selfObject = actionPromptRepr.getLink("_self.object");
+        assertThat(selfObject.getRel(), is("object"));
+        assertThat(selfObject.getHref(), matches(".+objects/OID:1"));
+        assertThat(selfObject.getMethod(), is(Method.GET));
+
+        // type
+        Link type = actionPromptRepr.getLink("type");
+        assertThat(type.getRel(), is("type"));
+        assertThat(type.getHref(), matches(".+vnd\\.list\\+json"));
+        assertThat(type.getMethod(), is(Method.GET));
+
+        assertThat(actionPromptRepr.getString("memberType"), is("action"));
+        assertThat(actionPromptRepr.getString("actionType"), is("USER"));
+        assertThat(actionPromptRepr.getInt("numParameters"), is(0));
+        assertThat(actionPromptRepr.getArray("parameters").arraySize(), is(0));
+        
+        Link invokeLink = actionPromptRepr.getLink("invoke");
+        assertThat(invokeLink.getRel(), is("invoke"));
+        assertThat(invokeLink.getHref(), matches(".+objects/OID:1/actions/list/invoke"));
+        assertThat(invokeLink.getMethod(), is(Method.POST));
+        assertThat(invokeLink.getArguments(), is(not(nullValue())));
+        assertThat(invokeLink.getArguments().isArray(), is(true));
+        assertThat(invokeLink.getArguments().arraySize(), is(0));
+    }
+
+    @Ignore("TODO")
+    @Test
+    public void collectionDetails() throws Exception {
+        fail();
+    }
+
+    
+    @Ignore("to get working again")
+    @Test
+    public void actionPostInvoke_returningList() throws Exception {
+        
+        // given
+        DomainObjectResource domainObjectResource = client.getDomainObjectResource();
+        
+        JsonRepresentation body = JsonRepresentation.newArray();
+        
+        // when
+        Response actionInvokeResp = domainObjectResource.invokeAction("OID:1", "list", body.asInputStream());
+        RestfulResponse<ScalarValueRepresentation> actionInvokeJsonResp = RestfulResponse.of(actionInvokeResp, ScalarValueRepresentation.class);
+        assertThat(actionInvokeJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+        
+        // then 
+        ScalarValueRepresentation actionInvokeRepr = actionInvokeJsonResp.getEntity();
+        assertThat(actionInvokeRepr.isArray(), is(true));
+        assertThat(actionInvokeRepr.arraySize(), is(5));
+        
+        JsonRepresentation domainObjectRefRepr = actionInvokeRepr.elementAt(0);
+
+        assertThat(domainObjectRefRepr, is(not(nullValue())));
+        assertThat(domainObjectRefRepr.getString("title"), is("Untitled Applib Values Entity")); // TODO
+        
+        Link domainObjectLink = domainObjectRefRepr.getLink("link");
+        assertThat(domainObjectLink.getRel(), is("object"));
+        assertThat(domainObjectLink.getHref(), matches("http://localhost:\\d+/objects/OID:7"));
+        
+        Link domainObjectTypeLink = domainObjectRefRepr.getLink("type");
+        assertThat(domainObjectTypeLink.getRel(), is("type"));
+        assertThat(domainObjectTypeLink.getHref(), matches("http://localhost:\\d+/types/application/vnd." +
+        		org.apache.isis.tck.dom.scalars.ApplibValuedEntity.class.getName() +
+        		"\\+json"));
+
+        Link domainObjectIconLink = domainObjectRefRepr.getLink("icon");
+        assertThat(domainObjectIconLink.getRel(), is("icon"));
+        assertThat(domainObjectIconLink.getHref(), matches("http://localhost:\\d+/images/null.png")); // TODO
+    }
+
+}
+    
\ No newline at end of file

Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java Mon Sep  5 12:40:11 2011
@@ -0,0 +1,119 @@
+package org.apache.isis.viewer.json.tck;
+
+import static org.apache.isis.core.commons.matchers.IsisMatchers.greaterThan;
+import static org.apache.isis.core.commons.matchers.IsisMatchers.matches;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isArray;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isFollowableLinkToSelf;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isLink;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isMap;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status.Family;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.blocks.Link;
+import org.apache.isis.viewer.json.applib.blocks.Method;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainServicesRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainServicesResource;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+
+
+public class DomainServiceResourceTest {
+
+    @Rule
+    public IsisWebServerRule webServerRule = new IsisWebServerRule();
+    
+    private RestfulClient client;
+    private DomainServicesResource resource;
+
+    @Before
+    public void setUp() throws Exception {
+        WebServer webServer = webServerRule.getWebServer();
+        client = new RestfulClient(webServer.getBase());
+        
+        resource = client.getDomainServicesResource();
+    }
+
+
+    @Ignore("to get working again")
+    @Test
+    public void returnsServicesRepresentation() throws Exception {
+        
+
+        // when
+        Response servicesResp = resource.services();
+        RestfulResponse<DomainServicesRepresentation> servicesJsonResp = RestfulResponse.of(servicesResp, DomainServicesRepresentation.class);
+        assertThat(servicesJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+        
+        // then
+        DomainServicesRepresentation servicesRepr = servicesJsonResp.getEntity();
+
+        assertThat(servicesRepr, isMap());
+
+        assertThat(servicesRepr.getSelf(), isLink().method(Method.GET));
+
+        assertThat(servicesRepr.getString("title"), is("ApplibValues"));
+        
+        JsonRepresentation serviceValues = servicesRepr.xpath("/value/e[rel='service']");
+        assertThat(serviceValues, isArray());
+        assertThat(serviceValues.arraySize(), is(greaterThan(0)));
+
+        Link serviceLink = serviceValues.elementAt(0).asLink();
+        assertThat(serviceLink, isLink().rel("service").href(matches("http://localhost:\\d+/services/.*$")).method(Method.GET));
+    }
+
+
+
+    @org.junit.Ignore("to get working")
+    @Test
+    public void linksToSelf() throws Exception {
+        // given
+        DomainServicesRepresentation servicesRepr = givenRepresentation();
+
+        // when, then
+        assertThat(servicesRepr, isFollowableLinkToSelf(client));
+    }
+
+
+    @Ignore("to get working again")
+    @Test
+    public void linksToDomainServiceResources() throws Exception {
+        
+        // given
+        DomainServicesRepresentation servicesRepr = givenRepresentation();
+
+        JsonRepresentation repoRepr = servicesRepr.elementAt(0);
+        Link repoObjLink = repoRepr.getLink("link");
+
+        // and when
+        Response repoFollowResp = client.follow(repoObjLink);
+        RestfulResponse<DomainObjectRepresentation> repoFollowJsonResp = RestfulResponse.of(repoFollowResp, DomainObjectRepresentation.class);
+        
+        // then
+        DomainObjectRepresentation domainObjectRepr = repoFollowJsonResp.getEntity();
+        Link domainObjectReprLink = domainObjectRepr.getLink("_self.link");
+        assertThat(domainObjectReprLink, is(repoObjLink));
+    }
+
+
+    private DomainServicesRepresentation givenRepresentation() throws JsonParseException, JsonMappingException, IOException {
+        return RepresentationMatchers.entityOf(resource.services(), DomainServicesRepresentation.class);
+    }
+
+
+}
+    
\ No newline at end of file

Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java Mon Sep  5 12:40:11 2011
@@ -0,0 +1,103 @@
+package org.apache.isis.viewer.json.tck;
+
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.entityOf;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isLink;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isFollowableLinkToSelf;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status.Family;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.viewer.json.applib.HttpStatusCode;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.blocks.Method;
+import org.apache.isis.viewer.json.applib.homepage.HomePageRepresentation;
+import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+
+public class HomePageResourceTest {
+
+    @Rule
+    public IsisWebServerRule webServerRule = new IsisWebServerRule();
+    
+    private RestfulClient client;
+    private HomePageResource resource;
+
+    @Before
+    public void setUp() throws Exception {
+        WebServer webServer = webServerRule.getWebServer();
+        client = new RestfulClient(webServer.getBase());
+        
+        resource = client.getHomePageResource();
+    }
+
+    @org.junit.Ignore("to get working")
+    @Test
+    public void returnsHomePageRepresentation() throws Exception {
+
+        // given
+        Response resourcesResp = resource.resources();
+        
+        // when
+        RestfulResponse<HomePageRepresentation> homePageJsonResp = RestfulResponse.of(resourcesResp, HomePageRepresentation.class);
+        assertThat(homePageJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
+        
+        // then
+        assertThat(homePageJsonResp.getStatus(), is(HttpStatusCode.OK));
+        
+        HomePageRepresentation homePageRepr = homePageJsonResp.getEntity();
+        assertThat(homePageRepr, is(not(nullValue())));
+        assertThat(homePageRepr.isMap(), is(true));
+        
+        assertThat(homePageRepr.getSelf(), isLink(client).method(Method.GET));
+        assertThat(homePageRepr.getUser(), isLink(client).method(Method.GET));
+        assertThat(homePageRepr.getServices(), isLink(client).method(Method.GET));
+        assertThat(homePageRepr.getCapabilities(), isLink(client).method(Method.GET));
+        
+        assertThat(homePageRepr.getLinks(), is(not(nullValue())));
+        assertThat(homePageRepr.getMetadata(), is(not(nullValue())));
+    }
+
+    @Test
+    public void linksToSelf() throws Exception {
+        // given
+        HomePageRepresentation homePageRepr = givenRepresentation();
+
+        // when, then
+        assertThat(homePageRepr, isFollowableLinkToSelf(client));
+    }
+    
+    @org.junit.Ignore("to get working")
+    @Test
+    public void links() throws Exception {
+        
+        HomePageRepresentation homePageRepr = givenRepresentation();
+
+        // when, then
+        assertThat(homePageRepr.getServices(), isLink(client).returning(HttpStatusCode.OK));
+        assertThat(homePageRepr.getUser(), isLink(client).returning(HttpStatusCode.OK));
+        assertThat(homePageRepr.getCapabilities(), isLink(client).returning(HttpStatusCode.OK));
+    }
+
+    private HomePageRepresentation givenRepresentation() throws JsonParseException, JsonMappingException, IOException {
+        return entityOf(resource.resources(), HomePageRepresentation.class);
+    }
+
+    //
+}
+
+
+    
\ No newline at end of file

Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/IsisWebServerRule.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/IsisWebServerRule.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/IsisWebServerRule.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/IsisWebServerRule.java Mon Sep  5 12:40:11 2011
@@ -0,0 +1,28 @@
+package org.apache.isis.viewer.json.tck;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.junit.rules.MethodRule;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.Statement;
+
+public class IsisWebServerRule implements MethodRule {
+
+    private static ThreadLocal<WebServer> WEBSERVER = new ThreadLocal<WebServer>() {
+        protected WebServer initialValue() {
+            WebServer webServer = new WebServer();
+            webServer.run(39393);
+            return webServer;
+        };
+    }; 
+    
+    @Override
+    public Statement apply(Statement base, FrameworkMethod method, Object target) {
+        getWebServer(); // creates and starts running if required
+        return base;
+    }
+    
+    public WebServer getWebServer() {
+        return WEBSERVER.get();
+    }
+
+}

Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java?rev=1165265&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java Mon Sep  5 12:40:11 2011
@@ -0,0 +1,248 @@
+package org.apache.isis.viewer.json.tck;
+
+import java.io.IOException;
+
+import javax.ws.rs.core.Response;
+
+import org.apache.isis.viewer.json.applib.HttpStatusCode;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.LinksToSelf;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.blocks.Link;
+import org.apache.isis.viewer.json.applib.blocks.Method;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
+import org.junit.Assert;
+
+
+public class RepresentationMatchers {
+
+    public static <T extends JsonRepresentation> T entityOf(Response resp, Class<T> representationType) throws JsonParseException, JsonMappingException, IOException {
+        RestfulResponse<T> jsonResp = RestfulResponse.of(resp, representationType);
+        return jsonResp.getEntity();
+    }
+
+
+    public static <T extends JsonRepresentation> Matcher<T> isMap() {
+        return new TypeSafeMatcher<T>() {
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("map");
+            }
+
+            @Override
+            public boolean matchesSafely(T item) {
+                return item != null && item.isMap();
+            }
+        };
+    }
+
+    public static <T extends JsonRepresentation> Matcher<T> isArray() {
+        return new TypeSafeMatcher<T>() {
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("array");
+            }
+
+            @Override
+            public boolean matchesSafely(T item) {
+                return item != null && item.isArray();
+            }
+        };
+    }
+
+    public static Matcher<Link> isLink(final Method method) {
+        return new TypeSafeMatcher<Link>() {
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("link with method " + method.name());
+            }
+
+            @Override
+            public boolean matchesSafely(Link item) {
+                return item != null && item.getMethod() == method;
+            }
+        };
+    }
+
+    public static <T extends JsonRepresentation> Matcher<T> isFollowableLinkToSelf(final RestfulClient client) {
+        return new TypeSafeMatcher<T>() {
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("links to self");
+            }
+
+            @Override
+            public boolean matchesSafely(T item) {
+                LinksToSelf initialRepr = (LinksToSelf) item; // no easy way to do this with Hamcrest
+                // when
+                Response servicesResp;
+                try {
+                    servicesResp = client.follow(initialRepr.getSelf());
+                    RestfulResponse<T> followedResp = RestfulResponse.of(servicesResp, asT(item));
+                    
+                    // then
+                    T repr2 = followedResp.getEntity();
+                    LinksToSelf repr2AsLinksToSelf = (LinksToSelf)repr2;
+                    return initialRepr.getSelf().equals(repr2AsLinksToSelf.getSelf());
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        };
+    }
+
+    @SuppressWarnings("unchecked")
+    private static <T> Class<T> asT(T initialRepr) {
+        return (Class<T>) initialRepr.getClass();
+    }
+    
+
+    public static <T> void assertThat(T actual, AbstractMatcherBuilder<T> matcherBuilder) {
+        Assert.assertThat(actual, matcherBuilder.build());
+    }
+
+    public static LinkMatcherBuilder isLink(RestfulClient client) {
+        return new LinkMatcherBuilder(client);
+    }
+
+    public static LinkMatcherBuilder isLink() {
+        return new LinkMatcherBuilder(null);
+    }
+
+
+    public static abstract class AbstractMatcherBuilder<T> {
+        protected RestfulClient client;
+
+        public AbstractMatcherBuilder(RestfulClient client) {
+            this.client = client;
+        }
+        
+        public abstract Matcher<T> build();
+    }
+
+    public static class LinkMatcherBuilder extends AbstractMatcherBuilder<Link> {
+        private HttpStatusCode statusCode;
+        private Method method;
+        private String rel;
+        private String href;
+        private Matcher<String> hrefMatcher;
+
+        private LinkMatcherBuilder(RestfulClient client) {
+            super(client);
+        }
+
+        public LinkMatcherBuilder rel(String rel) {
+            this.rel = rel;
+            return this;
+        }
+
+        public LinkMatcherBuilder href(String href) {
+            this.href = href;
+            return this;
+        }
+
+        public LinkMatcherBuilder href(Matcher<String> methodMatcher) {
+            this.hrefMatcher = methodMatcher;
+            return this;
+        }
+
+        public LinkMatcherBuilder method(Method method) {
+            this.method = method;
+            return this;
+        }
+
+
+        public LinkMatcherBuilder returning(HttpStatusCode statusCode) {
+            this.statusCode = statusCode;
+            return this;
+        }
+
+        @Override
+        public Matcher<Link> build() {
+            
+            return new TypeSafeMatcher<Link>() {
+
+                @Override
+                public void describeTo(Description description) {
+                    description.appendText("a link ");
+                    if(rel != null) {
+                        description.appendText(" with rel ").appendText(rel);
+                    }
+                    if(href != null) {
+                        description.appendText(" with href ").appendText(href);
+                    }
+                    if(hrefMatcher != null) {
+                        description.appendText(" with href ");
+                        hrefMatcher.describeTo(description);
+                    }
+                    if(method != null) {
+                        description.appendText(" with method ").appendValue(method);
+                    }
+                    
+                    // trigger link being followed
+                    if(statusCode != null) {
+                        if(client == null) {
+                            description.appendText(" !!! provide client in matcher's constructor !!!");
+                        }
+                        description.appendText(" that when followed");
+                    }
+                    
+                    // assertions on response
+                    if(statusCode != null) {
+                        description.appendText(" returns ").appendValue(statusCode);
+                    }
+                }
+
+                @Override
+                public boolean matchesSafely(Link link) {
+                    if(rel != null && !rel.equals(link.getRel())) {
+                        return false;
+                    }
+                    if(href != null && !href.equals(link.getHref())) {
+                        return false;
+                    }
+                    if(hrefMatcher != null && !hrefMatcher.matches(link.getHref())) {
+                        return false;
+                    }
+                    if(method != null && !method.equals(link.getMethod())) {
+                        return false;
+                    }
+
+                    // follow link if criteria require it
+                    Response linkedResp = null;
+                    if(statusCode != null) {
+                        if(client == null) {
+                            return false;
+                        }
+                        try {
+                            linkedResp = client.follow(link);
+                        } catch (Exception e) {
+                            throw new RuntimeException(e);
+                        }
+                    }
+
+                    // assertions based on provided criteria
+                    if(statusCode != null) {
+                        RestfulResponse<JsonRepresentation> jsonResp = RestfulResponse.of(linkedResp, JsonRepresentation.class);
+                        if(jsonResp.getStatus() != statusCode) {
+                            return false;
+                        }
+                    }
+                    
+                    return true;
+                }
+            };
+        }
+    }
+
+}
+    
\ No newline at end of file