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/27 18:41:20 UTC

svn commit: r1176463 - in /incubator/isis/trunk/framework: tck/tck-dom/src/main/java/org/apache/isis/tck/dom/ viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/ viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/ap...

Author: danhaywood
Date: Tue Sep 27 16:41:19 2011
New Revision: 1176463

URL: http://svn.apache.org/viewvc?rev=1176463&view=rev
Log:
ISIS-109: messing around with media types

Added:
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulMediaType.java
Modified:
    incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/AbstractEntityRepository.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RepresentationType.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulResponse.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/DomainObjectResource.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServiceResource.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageResource.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserResource.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/AnyResourceTest_exceptionHandling.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_services.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/UserResourceTest.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/resources/ResourceAbstract.java
    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/ActionSemantics.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/DomainResourceAbstract.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceServerside.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceServerside.java

Modified: incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/AbstractEntityRepository.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/AbstractEntityRepository.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/AbstractEntityRepository.java (original)
+++ incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/AbstractEntityRepository.java Tue Sep 27 16:41:19 2011
@@ -22,6 +22,7 @@ package org.apache.isis.tck.dom;
 import java.util.List;
 
 import org.apache.isis.applib.AbstractFactoryAndRepository;
+import org.apache.isis.applib.annotation.QueryOnly;
 
 public abstract class AbstractEntityRepository<T> extends AbstractFactoryAndRepository {
     
@@ -32,7 +33,7 @@ public abstract class AbstractEntityRepo
         this.cls = cls;
     }
 
-
+    @QueryOnly
     public List<T> list() {
         return allInstances(cls);
     }

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RepresentationType.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RepresentationType.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RepresentationType.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RepresentationType.java Tue Sep 27 16:41:19 2011
@@ -1,33 +1,43 @@
 package org.apache.isis.viewer.json.applib;
 
+import javax.ws.rs.core.MediaType;
+
 import org.apache.isis.viewer.json.applib.util.Enums;
 
 public enum RepresentationType {
     
-    HOME_PAGE,
-    USER,
-    CAPABILITIES,
-    LIST,
-    SCALAR_VALUE,
-    DOMAIN_OBJECT,
-    OBJECT_PROPERTY,
-    OBJECT_COLLECTION,
-    OBJECT_ACTION,
-    DOMAIN_TYPE,
-    DOMAIN_TYPE_PROPERTY,
-    DOMAIN_TYPE_COLLECTION,
-    DOMAIN_TYPE_ACTION,
-    DOMAIN_TYPE_ACTION_PARAMETER, 
-    ERROR;
+    HOME_PAGE(RestfulMediaType.APPLICATION_JSON_HOME_PAGE),
+    USER(RestfulMediaType.APPLICATION_JSON_USER),
+    CAPABILITIES(RestfulMediaType.APPLICATION_JSON_CAPABILITIES),
+    LIST(RestfulMediaType.APPLICATION_JSON_LIST),
+    SCALAR_VALUE(RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE),
+    DOMAIN_OBJECT(RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT),
+    OBJECT_PROPERTY(RestfulMediaType.APPLICATION_JSON_OBJECT_PROPERTY),
+    OBJECT_COLLECTION(RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION),
+    OBJECT_ACTION(RestfulMediaType.APPLICATION_JSON_OBJECT_ACTION),
+    DOMAIN_TYPES(RestfulMediaType.APPLICATION_JSON_DOMAIN_TYPES),
+    DOMAIN_TYPE(RestfulMediaType.APPLICATION_JSON_DOMAIN_TYPE),
+    TYPE_PROPERTY(RestfulMediaType.APPLICATION_JSON_TYPE_PROPERTY),
+    TYPE_COLLECTION(RestfulMediaType.APPLICATION_JSON_TYPE_COLLECTION),
+    TYPE_ACTION(RestfulMediaType.APPLICATION_JSON_TYPE_ACTION),
+    TYPE_ACTION_PARAMETER(RestfulMediaType.APPLICATION_JSON_TYPE_ACTION_PARAMETER), 
+    ERROR(RestfulMediaType.APPLICATION_JSON_ERROR);
     
     private String name;
-    private RepresentationType() {
+    private MediaType mediaType;
+    private RepresentationType(String mediaTypeStr) {
         this.name = Enums.enumToCamelCase(this);
+        this.mediaType = MediaType.valueOf(mediaTypeStr);
     }
+
     public String getName() {
         return name;
     }
     
+    public final MediaType getMediaType() {
+        return mediaType;
+    }
+    
     public static RepresentationType lookup(String value) {
         for(RepresentationType representationType: values()) {
             if (representationType.getName().equals(value)) {

Added: 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=1176463&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulMediaType.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulMediaType.java Tue Sep 27 16:41:19 2011
@@ -0,0 +1,34 @@
+package org.apache.isis.viewer.json.applib;
+
+import javax.ws.rs.core.MediaType;
+
+/**
+ * Values per the profile parameter
+ * 
+ * @see http://buzzword.org.uk/2009/draft-inkster-profile-parameter-00.html
+ */
+public final class RestfulMediaType {
+    
+    
+    private RestfulMediaType(){}
+
+    private static final String BASE = MediaType.APPLICATION_JSON + ";profile=http://restfulobjects.org/profiles/";
+    
+    public final static String APPLICATION_JSON_HOME_PAGE = BASE + "homepage";
+    public final static String APPLICATION_JSON_USER = BASE + "user";
+    public final static String APPLICATION_JSON_CAPABILITIES = BASE + "capabilities";
+    public final static String APPLICATION_JSON_LIST = BASE + "list";
+    public final static String APPLICATION_JSON_SCALAR_VALUE = BASE + "scalarvalue";
+    public final static String APPLICATION_JSON_DOMAIN_OBJECT = BASE + "domainobject";
+    public final static String APPLICATION_JSON_OBJECT_PROPERTY = BASE + "objectproperty";
+    public final static String APPLICATION_JSON_OBJECT_COLLECTION = BASE + "objectcollection";
+    public final static String APPLICATION_JSON_OBJECT_ACTION = BASE + "objectaction";
+    public final static String APPLICATION_JSON_DOMAIN_TYPES = BASE + "domaintypes";
+    public final static String APPLICATION_JSON_DOMAIN_TYPE = BASE + "domaintype";
+    public final static String APPLICATION_JSON_TYPE_PROPERTY = BASE + "typeproperty";
+    public final static String APPLICATION_JSON_TYPE_COLLECTION = BASE + "typecollection";
+    public final static String APPLICATION_JSON_TYPE_ACTION = BASE + "typeaction";
+    public final static String APPLICATION_JSON_TYPE_ACTION_PARAMETER = BASE + "typeactionparameter"; 
+    public final static String APPLICATION_JSON_ERROR = BASE + "error";
+
+}

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulResponse.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulResponse.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulResponse.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulResponse.java Tue Sep 27 16:41:19 2011
@@ -223,7 +223,6 @@ public class RestfulResponse<T> {
         public final static Header<Date> LAST_MODIFIED = new Header<Date>("Last-Modified", Parser.forDates());
         public final static Header<CacheControl> CACHE_CONTROL = new Header<CacheControl>("Cache-Control", Parser.forCacheControl());
         public final static Header<MediaType> CONTENT_TYPE = new Header<MediaType>("Content-Type", Parser.forMediaType());
-        public final static Header<RepresentationType> X_REPRESENTATION_TYPE = new Header<RepresentationType>("X-Representation-Type", Parser.forRepresentationType());
         
         private final String name;
         private final Parser<X> parser;

Modified: 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=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/capabilities/CapabilitiesResource.java Tue Sep 27 16:41:19 2011
@@ -24,13 +24,14 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.jboss.resteasy.annotations.ClientResponseType;
 
 @Path("/capabilities")
 public interface CapabilitiesResource {
 
     @GET
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_CAPABILITIES })
     @ClientResponseType(entityType=String.class)
     public Response capabilities();
 

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=1176463&r1=1176462&r2=1176463&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 Tue Sep 27 16:41:19 2011
@@ -32,6 +32,7 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.jboss.resteasy.annotations.ClientResponseType;
 
 @Path("/objects")
@@ -43,14 +44,14 @@ public interface DomainObjectResource {
 
     @GET
     @Path("/{oid}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response object(@PathParam("oid") final String oidStr);
 
     @PUT
     @Path("/{oid}")
-    @Consumes({ MediaType.APPLICATION_JSON })
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON })
+    @Produces({ RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response object(
         @PathParam("oid") final String oidStr, 
@@ -63,7 +64,7 @@ public interface DomainObjectResource {
 
     @GET
     @Path("/{oid}/properties/{propertyId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response propertyDetails(
         @PathParam("oid") final String oidStr,
@@ -71,8 +72,8 @@ public interface DomainObjectResource {
 
     @PUT
     @Path("/{oid}/properties/{propertyId}")
-    @Produces({ MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response modifyProperty(
         @PathParam("oid") final String oidStr,
@@ -81,7 +82,7 @@ public interface DomainObjectResource {
 
     @DELETE
     @Path("/{oid}/properties/{propertyId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response clearProperty(
         @PathParam("oid") final String oidStr, 
@@ -95,7 +96,7 @@ public interface DomainObjectResource {
 
     @GET
     @Path("/{oid}/collections/{collectionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response accessCollection(
         @PathParam("oid") final String oidStr,
@@ -104,7 +105,7 @@ public interface DomainObjectResource {
     @PUT
     @Path("/{oid}/collections/{collectionId}")
     @Consumes({ MediaType.APPLICATION_JSON })
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response addToSet(
         @PathParam("oid") final String oidStr,
         @PathParam("collectionId") final String collectionId,
@@ -112,8 +113,8 @@ public interface DomainObjectResource {
 
     @POST
     @Path("/{oid}/collections/{collectionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response addToList(
         @PathParam("oid") final String oidStr,
@@ -122,8 +123,8 @@ public interface DomainObjectResource {
  
     @DELETE
     @Path("/{oid}/collections/{collectionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response removeFromCollection(
         @PathParam("oid") final String oidStr,
@@ -137,7 +138,7 @@ public interface DomainObjectResource {
 
     @GET
     @Path("/{oid}/actions/{actionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_ACTION, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response actionPrompt(
         @PathParam("oid") final String oidStr, 
@@ -149,7 +150,7 @@ public interface DomainObjectResource {
 
     @GET
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response invokeActionQueryOnly(
         @PathParam("oid") final String oidStr, 
@@ -158,8 +159,8 @@ public interface DomainObjectResource {
 
     @PUT
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response invokeActionIdempotent(
         @PathParam("oid") final String oidStr, 
@@ -168,8 +169,8 @@ public interface DomainObjectResource {
     
     @POST
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response invokeAction(
         @PathParam("oid") final String oidStr, 

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServiceResource.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/DomainServiceResource.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServiceResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServiceResource.java Tue Sep 27 16:41:19 2011
@@ -31,6 +31,7 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.jboss.resteasy.annotations.ClientResponseType;
 
 @Path("/services")
@@ -38,7 +39,7 @@ public interface DomainServiceResource {
 
     @GET
     @Path("/")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response services();
 
@@ -48,18 +49,29 @@ public interface DomainServiceResource {
 
     @GET
     @Path("/{serviceId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response service(@PathParam("serviceId") final String serviceId);
     
+
+    ////////////////////////////////////////////////////////////
+    // domain service property
+    ////////////////////////////////////////////////////////////
     
+    @GET
+    @Path("/{serviceId}/properties/{propertyId}")
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_JSON_ERROR })
+    public Response propertyDetails(
+        @PathParam("serviceId") final String serviceId,
+        @PathParam("propertyId") final String propertyId);
+
     ////////////////////////////////////////////////////////////
     // domain service action
     ////////////////////////////////////////////////////////////
     
     @GET
     @Path("/{serviceId}/actions/{actionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_ACTION, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response actionPrompt(
         @PathParam("serviceId") final String serviceId, 
@@ -72,7 +84,7 @@ public interface DomainServiceResource {
 
     @GET
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response serviceInvokeActionQueryOnly(
         @PathParam("oid") final String oidStr, 
@@ -81,8 +93,8 @@ public interface DomainServiceResource {
 
     @PUT
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response serviceInvokeActionIdempotent(
         @PathParam("oid") final String oidStr, 
@@ -91,8 +103,8 @@ public interface DomainServiceResource {
 
     @POST
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     @ClientResponseType(entityType=String.class)
     public Response serviceInvokeAction(
         @PathParam("oid") final String oidStr, 

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.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?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domaintypes/DomainTypeResource.java Tue Sep 27 16:41:19 2011
@@ -25,6 +25,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.jboss.resteasy.annotations.ClientResponseType;
 
 @Path("/domainTypes")
@@ -32,40 +33,40 @@ public interface DomainTypeResource {
 
     @GET
     @Path("/")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_TYPES })
     @ClientResponseType(entityType=String.class)
     public abstract Response domainTypes();
 
     @GET
     @Path("/{domainType}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_TYPE })
     @ClientResponseType(entityType=String.class)
     public abstract Response domainType(@PathParam("domainType") final String domainType);
 
     @GET
     @Path("/{domainType}/properties/{propertyId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_PROPERTY })
     @ClientResponseType(entityType=String.class)
     public abstract Response typeProperty(@PathParam("domainType") final String domainType,
         @PathParam("propertyId") final String propertyId);
 
     @GET
     @Path("/{domainType}/collections/{collectionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_COLLECTION })
     @ClientResponseType(entityType=String.class)
     public abstract Response typeCollection(@PathParam("domainType") final String domainType,
         @PathParam("collectionId") final String collectionId);
 
     @GET
     @Path("/{domainType}/actions/{actionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_ACTION })
     @ClientResponseType(entityType=String.class)
     public abstract Response typeAction(@PathParam("domainType") final String domainType,
         @PathParam("actionId") final String actionId);
 
     @GET
     @Path("/{domainType}/actions/{actionId}/params/{paramNum}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_ACTION_PARAMETER })
     @ClientResponseType(entityType=String.class)
     public abstract Response typeActionParam(@PathParam("domainType") final String domainType,
         @PathParam("actionId") final String actionId, @PathParam("paramNum") final String paramName);

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageResource.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/HomePageResource.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/homepage/HomePageResource.java Tue Sep 27 16:41:19 2011
@@ -24,13 +24,14 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.jboss.resteasy.annotations.ClientResponseType;
 
 @Path("/")
 public interface HomePageResource {
 
     @GET
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_HOME_PAGE })
     @ClientResponseType(entityType=String.class)
     public Response resources();
 

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserResource.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/UserResource.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserResource.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/user/UserResource.java Tue Sep 27 16:41:19 2011
@@ -24,13 +24,14 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.jboss.resteasy.annotations.ClientResponseType;
 
 @Path("/user")
 public interface UserResource {
 
     @GET
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_USER })
     @ClientResponseType(entityType=String.class)
     public Response user();
 

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest.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.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest.java Tue Sep 27 16:41:19 2011
@@ -7,12 +7,11 @@ import org.junit.Test;
 
 public class RepresentationTypeTest {
 
-
     @Test
     public void converts() {
         assertThat(RepresentationType.CAPABILITIES.getName(), is("capabilities"));
         assertThat(RepresentationType.HOME_PAGE.getName(), is("homePage"));
-        assertThat(RepresentationType.DOMAIN_TYPE_ACTION_PARAMETER.getName(), is("domainTypeActionParameter"));
+        assertThat(RepresentationType.TYPE_ACTION_PARAMETER.getName(), is("typeActionParameter"));
     }
 
 

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/AnyResourceTest_exceptionHandling.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/AnyResourceTest_exceptionHandling.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/AnyResourceTest_exceptionHandling.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/AnyResourceTest_exceptionHandling.java Tue Sep 27 16:41:19 2011
@@ -44,7 +44,7 @@ public class AnyResourceTest_exceptionHa
         
         // then
         assertThat(jsonResp.getStatus(), is(HttpStatusCode.OK));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.X_REPRESENTATION_TYPE), is(RepresentationType.HOME_PAGE));
+        assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(RepresentationType.HOME_PAGE.getMediaType()));
     }
 
     @Test
@@ -59,7 +59,7 @@ public class AnyResourceTest_exceptionHa
         
         // then
         assertThat(jsonResp.getStatus(), is(HttpStatusCode.OK));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.X_REPRESENTATION_TYPE), is(RepresentationType.HOME_PAGE));
+        assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(RepresentationType.HOME_PAGE.getMediaType()));
     }
 
     

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java Tue Sep 27 16:41:19 2011
@@ -13,7 +13,6 @@ import static org.junit.Assert.assertTha
 
 import java.io.IOException;
 
-import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.apache.isis.runtimes.dflt.webserver.WebServer;
@@ -64,9 +63,8 @@ public class DomainServiceResourceTest_s
         
         // then
         assertThat(jsonResp.getStatus(), is(HttpStatusCode.OK));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(MediaType.APPLICATION_JSON_TYPE));
+        assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(RepresentationType.DOMAIN_OBJECT.getMediaType()));
         assertThat(jsonResp.getHeader(RestfulResponse.Header.CACHE_CONTROL).getMaxAge(), is(24*60*60));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.X_REPRESENTATION_TYPE), is(RepresentationType.DOMAIN_OBJECT));
 
         DomainObjectRepresentation repr = jsonResp.getEntity();
 

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_services.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_services.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_services.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_services.java Tue Sep 27 16:41:19 2011
@@ -10,7 +10,6 @@ import static org.junit.Assert.assertTha
 
 import java.io.IOException;
 
-import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status.Family;
 
@@ -57,9 +56,8 @@ public class DomainServiceResourceTest_s
         
         // then
         assertThat(jsonResp.getStatus(), is(HttpStatusCode.OK));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(MediaType.APPLICATION_JSON_TYPE));
+        assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(RepresentationType.LIST.getMediaType()));
         assertThat(jsonResp.getHeader(RestfulResponse.Header.CACHE_CONTROL).getMaxAge(), is(24*60*60));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.X_REPRESENTATION_TYPE), is(RepresentationType.LIST));
 
         DomainServicesRepresentation repr = jsonResp.getEntity();
 

Modified: 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=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/HomePageResourceTest.java Tue Sep 27 16:41:19 2011
@@ -13,7 +13,6 @@ import static org.junit.Assert.assertTha
 
 import java.io.IOException;
 
-import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status.Family;
 
@@ -60,9 +59,8 @@ public class HomePageResourceTest {
         
         // then
         assertThat(jsonResp.getStatus(), is(HttpStatusCode.OK));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(MediaType.APPLICATION_JSON_TYPE));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.CACHE_CONTROL).getMaxAge(), is(86400));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.X_REPRESENTATION_TYPE), is(RepresentationType.HOME_PAGE));
+        assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(RepresentationType.HOME_PAGE.getMediaType()));
+        assertThat(jsonResp.getHeader(RestfulResponse.Header.CACHE_CONTROL).getMaxAge(), is(24*60*60));
         
         HomePageRepresentation repr = jsonResp.getEntity();
         assertThat(repr, is(not(nullValue())));

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/UserResourceTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/UserResourceTest.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/UserResourceTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/UserResourceTest.java Tue Sep 27 16:41:19 2011
@@ -13,7 +13,6 @@ import static org.junit.Assert.assertTha
 
 import java.io.IOException;
 
-import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status.Family;
 
@@ -60,9 +59,8 @@ public class UserResourceTest {
         
         // then
         assertThat(jsonResp.getStatus(), is(HttpStatusCode.OK));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(MediaType.APPLICATION_JSON_TYPE));
+        assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(RepresentationType.USER.getMediaType()));
         assertThat(jsonResp.getHeader(RestfulResponse.Header.CACHE_CONTROL).getMaxAge(), is(3600));
-        assertThat(jsonResp.getHeader(RestfulResponse.Header.X_REPRESENTATION_TYPE), is(RepresentationType.USER));
         
         UserRepresentation repr = jsonResp.getEntity();
         assertThat(repr, is(not(nullValue())));

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/ResourceContext.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/ResourceContext.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/ResourceContext.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/ResourceContext.java Tue Sep 27 16:41:19 2011
@@ -18,9 +18,12 @@
  */
 package org.apache.isis.viewer.json.viewer;
 
+import java.util.List;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Request;
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.UriInfo;
@@ -51,6 +54,8 @@ public class ResourceContext {
             final Localization localization, 
             final AuthenticationSession authenticationSession, 
             final ObjectAdapterLookup objectAdapterLookup) {
+        
+
         this.httpHeaders = httpHeaders;
         this.uriInfo = uriInfo;
         this.request = request;
@@ -61,6 +66,8 @@ public class ResourceContext {
         this.localization = localization;
         this.authenticationSession = authenticationSession;
         this.objectAdapterLookup = objectAdapterLookup;
+        
+        List<MediaType> clientMediaTypes = getHttpHeaders().getAcceptableMediaTypes();
     }
 
     public HttpHeaders getHttpHeaders() {
@@ -109,4 +116,5 @@ public class ResourceContext {
     }
 
 
+
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.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/ResourceAbstract.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java Tue Sep 27 16:41:19 2011
@@ -37,10 +37,8 @@ import javax.ws.rs.core.UriInfo;
 import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterLookup;
 import org.apache.isis.core.metamodel.adapter.oid.stringable.OidStringifier;
 import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.services.ServiceUtil;
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -51,22 +49,17 @@ import org.apache.isis.runtimes.dflt.run
 import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
-import org.apache.isis.viewer.json.applib.RestfulResponse;
 import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.json.applib.util.JsonMapper;
 import org.apache.isis.viewer.json.viewer.JsonApplicationException;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.AbstractRepresentationBuilder;
 import org.apache.isis.viewer.json.viewer.representations.RepBuilder;
-import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract.Caching;
-import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainObjectListRepBuilder;
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainObjectRepBuilder;
 import org.apache.isis.viewer.json.viewer.util.OidUtils;
 import org.apache.isis.viewer.json.viewer.util.UrlDecoderUtils;
-import org.apache.isis.viewer.json.viewer.util.UrlParserUtils;
 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
-import org.jboss.resteasy.util.HttpHeaderNames;
 
 import com.google.common.base.Function;
 import com.google.common.base.Functions;
@@ -124,28 +117,10 @@ public abstract class ResourceAbstract {
 
     private ResourceContext resourceContext;
 
-    // TODO: make parameterizable
-    private boolean strictChecking = false;
-
-
     protected void init() {
         this.resourceContext =
             new ResourceContext(httpHeaders, uriInfo, request, httpServletRequest, httpServletResponse, securityContext, 
                     getOidStringifier(), getLocalization(), getAuthenticationSession(), getAdapterManager());
-        checkAcceptHeader();
-    }
-
-    private void checkAcceptHeader() {
-        if(!strictChecking) {
-            return;
-        }
-        List<MediaType> clientMediaTypes = getResourceContext().getHttpHeaders().getAcceptableMediaTypes();
-        if(!clientMediaTypes.contains(MediaType.APPLICATION_JSON_TYPE)) {
-            throw JsonApplicationException.create(
-                    HttpStatusCode.NOT_ACCEPTABLE, 
-                    "Client %s header %s does not include %s", 
-                    HttpHeaderNames.ACCEPT, clientMediaTypes, MediaType.APPLICATION_JSON_TYPE); 
-        }
     }
 
     protected ResourceContext getResourceContext() {
@@ -165,7 +140,6 @@ public abstract class ResourceAbstract {
 	protected String jsonFor(
 			final Collection<ObjectAdapter> collectionAdapters) {
 	    
-	    
 		return jsonFor(Lists.newArrayList(
             Collections2.transform(collectionAdapters, toObjectSelfRepresentation())));
 	}
@@ -248,19 +222,19 @@ public abstract class ResourceAbstract {
         return responseOf(HttpStatusCode.NO_CONTENT).lastModified(version.getTime());
     }
 
-    public static ResponseBuilder responseOfOk(RepresentationType representationType, String representation, Caching caching) {
+    public static ResponseBuilder responseOfOk(RepresentationType representationType, Caching caching, String representation) {
         return responseOf(HttpStatusCode.OK)
-                .header(RestfulResponse.Header.X_REPRESENTATION_TYPE.getName(), representationType.getName())
+                .type(representationType.getMediaType())
                 .cacheControl(caching.getCacheControl())
                 .entity(representation);
     }
 
-    public static ResponseBuilder responseOfOk(RepresentationType representationType, JsonRepresentation representation, Caching caching) {
-        return responseOfOk(representationType, jsonFor(representation), caching);
+    public static ResponseBuilder responseOfOk(RepresentationType representationType, Caching caching, JsonRepresentation representation) {
+        return responseOfOk(representationType, caching, jsonFor(representation));
     }
 
-    public static ResponseBuilder responseOfOk(RepresentationType representationType, RepBuilder representationBuilder, Caching caching) {
-        return responseOfOk(representationType, representationBuilder.build(), caching);
+    public static ResponseBuilder responseOfOk(RepresentationType representationType, Caching caching, RepBuilder representationBuilder) {
+        return responseOfOk(representationType, caching, representationBuilder.build());
     }
 
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.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/capabilities/CapabilitiesResourceServerside.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java Tue Sep 27 16:41:19 2011
@@ -26,6 +26,7 @@ import javax.ws.rs.core.Response;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.apache.isis.viewer.json.applib.capabilities.CapabilitiesResource;
 import org.apache.isis.viewer.json.viewer.representations.LinkToBuilder;
 import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
@@ -39,7 +40,7 @@ public class CapabilitiesResourceServers
 
 
     @GET
-    @Produces(MediaType.APPLICATION_JSON)
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_CAPABILITIES})
     public Response capabilities() {
         init();
 
@@ -63,7 +64,7 @@ public class CapabilitiesResourceServers
         representation.mapPut("links", JsonRepresentation.newArray());
         representation.mapPut("extensions", JsonRepresentation.newMap());
         
-        return responseOfOk(RepresentationType.CAPABILITIES, representation, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.CAPABILITIES, Caching.ONE_DAY, representation).build();
     }
 
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionSemantics.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/ActionSemantics.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionSemantics.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionSemantics.java Tue Sep 27 16:41:19 2011
@@ -3,7 +3,9 @@ package org.apache.isis.viewer.json.view
 import org.apache.isis.core.metamodel.facets.actions.idempotent.IdempotentFacet;
 import org.apache.isis.core.metamodel.facets.actions.queryonly.QueryOnlyFacet;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.viewer.json.applib.util.Enums;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.util.StringUtil;
 
 public enum ActionSemantics {
 
@@ -12,8 +14,10 @@ public enum ActionSemantics {
     SIDE_EFFECTS("invoke");
     
     private final String invokeKey;
+    private final String name;
     private ActionSemantics(String invokeKey) {
         this.invokeKey = invokeKey;
+        this.name = Enums.enumToCamelCase(this);
     }
     
     public String getInvokeKey() {
@@ -28,6 +32,10 @@ public enum ActionSemantics {
         return this == IDEMPOTENT;
     }
 
+    public String getName() {
+        return name;
+    }
+    
     public static ActionSemantics determine(ResourceContext resourceContext, ObjectAction action) {
         if(action.containsFacet(QueryOnlyFacet.class)) {
             return QUERY_ONLY;

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java Tue Sep 27 16:41:19 2011
@@ -16,9 +16,7 @@
  */
 package org.apache.isis.viewer.json.viewer.resources.domainobjects;
 
-import java.io.IOException;
 import java.io.InputStream;
-import java.util.List;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
@@ -35,16 +33,14 @@ import javax.ws.rs.core.Response;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectResource;
 import org.apache.isis.viewer.json.viewer.JsonApplicationException;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
-import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract.Caching;
-import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainResourceAbstract.Intent;
 
 @Path("/objects")
 public class DomainObjectResourceServerside extends DomainResourceAbstract implements
@@ -56,7 +52,7 @@ public class DomainObjectResourceServers
     
     @GET
     @Path("/{oid}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response object(
             @PathParam("oid") final String oidStr) {
         init();
@@ -69,7 +65,7 @@ public class DomainObjectResourceServers
     @PUT
     @Path("/{oid}")
     @Consumes({ MediaType.APPLICATION_JSON })
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response object(
         @PathParam("oid") final String oidStr, 
         final InputStream arguments) {
@@ -86,7 +82,7 @@ public class DomainObjectResourceServers
 
     @GET
     @Path("/{oid}/properties/{propertyId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response propertyDetails(
             @PathParam("oid") final String oidStr,
             @PathParam("propertyId") final String propertyId) {
@@ -100,12 +96,12 @@ public class DomainObjectResourceServers
         final ObjectPropertyRepBuilder builder = ObjectPropertyRepBuilder.newBuilder(
                 resourceContext, objectAdapter, property);
         
-        return responseOfOk(RepresentationType.OBJECT_PROPERTY, builder, Caching.NONE).build();
+        return responseOfOk(RepresentationType.OBJECT_PROPERTY, Caching.NONE, builder).build();
     }
 
     @PUT
     @Path("/{oid}/properties/{propertyId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response modifyProperty(
             @PathParam("oid") final String oidStr,
             @PathParam("propertyId") final String propertyId,
@@ -136,7 +132,7 @@ public class DomainObjectResourceServers
 
     @DELETE
     @Path("/{oid}/properties/{propertyId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response clearProperty(
             @PathParam("oid") final String oidStr,
             @PathParam("propertyId") final String propertyId) {
@@ -164,7 +160,7 @@ public class DomainObjectResourceServers
 
     @GET
     @Path("/{oid}/collections/{collectionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response accessCollection(
         @PathParam("oid") final String oidStr,
         @PathParam("collectionId") final String collectionId) {
@@ -184,7 +180,7 @@ public class DomainObjectResourceServers
 
     @PUT
     @Path("/{oid}/collections/{collectionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response addToSet(
             @PathParam("oid") final String oidStr,
             @PathParam("collectionId") final String collectionId,
@@ -219,7 +215,7 @@ public class DomainObjectResourceServers
 
     @POST
     @Path("/{oid}/collections/{collectionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response addToList(
             @PathParam("oid") final String oidStr,
             @PathParam("collectionId") final String collectionId,
@@ -254,7 +250,7 @@ public class DomainObjectResourceServers
 
     @DELETE
     @Path("/{oid}/collections/{collectionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response removeFromCollection(
         @PathParam("oid") final String oidStr,
         @PathParam("collectionId") final String collectionId,
@@ -286,7 +282,7 @@ public class DomainObjectResourceServers
 
     @GET
     @Path("/{oid}/actions/{actionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_ACTION, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response actionPrompt(
             @PathParam("oid") final String oidStr,
             @PathParam("actionId") final String actionId) {
@@ -304,7 +300,7 @@ public class DomainObjectResourceServers
 
     @GET
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response invokeActionQueryOnly(
             @PathParam("oid") final String oidStr,
             @PathParam("actionId") final String actionId,
@@ -318,7 +314,7 @@ public class DomainObjectResourceServers
 
     @PUT
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response invokeActionIdempotent(
             @PathParam("oid") final String oidStr,
             @PathParam("actionId") final String actionId,
@@ -332,7 +328,7 @@ public class DomainObjectResourceServers
 
     @POST
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response invokeAction(
             @PathParam("oid") final String oidStr,
             @PathParam("actionId") final String actionId,

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceAbstract.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/DomainResourceAbstract.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainResourceAbstract.java Tue Sep 27 16:41:19 2011
@@ -70,7 +70,7 @@ public abstract class DomainResourceAbst
                         .withAdapter(objectAdapter);
 
         ResponseBuilder respBuilder = 
-                responseOfOk(RepresentationType.DOMAIN_OBJECT, repBuilder, Caching.NONE);
+                responseOfOk(RepresentationType.DOMAIN_OBJECT, Caching.NONE, repBuilder);
 
         Version version = objectAdapter.getVersion();
         if (version != null && version.getTime() != null) {
@@ -94,7 +94,7 @@ public abstract class DomainResourceAbst
                 .withSelf()
                 .withMutatorsIfEnabled();
         
-        return responseOfOk(RepresentationType.OBJECT_ACTION, repBuilder, Caching.NONE)
+        return responseOfOk(RepresentationType.OBJECT_ACTION, Caching.NONE, repBuilder)
                 .build();
     }
 
@@ -187,7 +187,8 @@ public abstract class DomainResourceAbst
     protected Response invokeActionUsingAdapters(
         final ObjectAdapter objectAdapter,
         final ObjectAction action,
-        final List<ObjectAdapter> argAdapters, JsonRepresentation representationWithSelf) {
+        final List<ObjectAdapter> argAdapters, 
+        final JsonRepresentation representationWithSelf) {
         
         // validate
         List<ObjectActionParameter> parameters = action.getParameters();
@@ -222,13 +223,13 @@ public abstract class DomainResourceAbst
             final Collection<ObjectAdapter> collectionAdapters = collectionFacet
                     .collection(returnedAdapter);
             DomainObjectListRepBuilder repBuilder = DomainObjectListRepBuilder.newBuilder(getResourceContext(), representationWithSelf).withAdapters(collectionAdapters);
-            return responseOfOk(RepresentationType.LIST, repBuilder, Caching.NONE).build();
+            return responseOfOk(RepresentationType.LIST, Caching.NONE, repBuilder).build();
         }
 
         final EncodableFacet encodableFacet = returnedAdapter.getSpecification().getFacet(EncodableFacet.class);
         if(encodableFacet != null) {
             ScalarRepBuilder repBuilder = ScalarRepBuilder.newBuilder(getResourceContext(), representationWithSelf).withAdapter(objectAdapter);
-            return responseOfOk(RepresentationType.SCALAR_VALUE, repBuilder, Caching.NONE).build();
+            return responseOfOk(RepresentationType.SCALAR_VALUE, Caching.NONE, repBuilder).build();
         }
 
         return object(returnedAdapter);

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceServerside.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceServerside.java Tue Sep 27 16:41:19 2011
@@ -31,16 +31,12 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
-import org.apache.isis.viewer.json.applib.RestfulResponse;
-import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.apache.isis.viewer.json.applib.domainobjects.DomainServiceResource;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.AbstractRepresentationBuilder;
-import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract.Caching;
-import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainResourceAbstract.Intent;
 
 @Path("/services")
 public class DomainServiceResourceServerside extends DomainResourceAbstract implements
@@ -49,7 +45,7 @@ public class DomainServiceResourceServer
     @Override
     @GET
     @Path("/")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response services() {
         init();
 
@@ -62,7 +58,7 @@ public class DomainServiceResourceServer
                     .withSelf("services")
                     .withAdapters(serviceAdapters);
         
-        return responseOfOk(RepresentationType.LIST, builder, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.LIST, Caching.ONE_DAY, builder).build();
     }
 
     ////////////////////////////////////////////////////////////
@@ -71,7 +67,7 @@ public class DomainServiceResourceServer
 
     @GET
     @Path("/{serviceId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
     @Override
     public Response service(
             @PathParam("serviceId") String serviceId) {
@@ -85,7 +81,7 @@ public class DomainServiceResourceServer
                     .usingLinkToBuilder(new DomainServiceLinkToBuilder())
                     .withAdapter(serviceAdapter);
         
-        return responseOfOk(RepresentationType.DOMAIN_OBJECT, builder, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.DOMAIN_OBJECT, Caching.ONE_DAY, builder).build();
     }
 
 
@@ -95,7 +91,7 @@ public class DomainServiceResourceServer
 
     @GET
     @Path("/{serviceId}/properties/{propertyId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response propertyDetails(
             @PathParam("serviceId") final String serviceId,
             @PathParam("propertyId") final String propertyId) {
@@ -109,7 +105,7 @@ public class DomainServiceResourceServer
         final ObjectPropertyRepBuilder builder = ObjectPropertyRepBuilder.newBuilder(
                 resourceContext, serviceAdapter, property);
 
-        return responseOfOk(RepresentationType.OBJECT_PROPERTY, builder, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.OBJECT_PROPERTY, Caching.ONE_DAY, builder).build();
     }
 
 
@@ -120,7 +116,7 @@ public class DomainServiceResourceServer
     
     @GET
     @Path("/{serviceId}/actions/{actionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_ACTION, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response actionPrompt(
             @PathParam("serviceId") final String serviceId, 
             @PathParam("actionId") final String actionId) {
@@ -138,7 +134,7 @@ public class DomainServiceResourceServer
 
     @GET
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response serviceInvokeActionQueryOnly(
             @PathParam("oid") final String oidStr, 
             @PathParam("actionId") final String actionId,
@@ -151,8 +147,8 @@ public class DomainServiceResourceServer
 
     @PUT
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response serviceInvokeActionIdempotent(
             @PathParam("oid") final String oidStr, 
             @PathParam("actionId") final String actionId,
@@ -165,8 +161,8 @@ public class DomainServiceResourceServer
 
     @POST
     @Path("/{oid}/actions/{actionId}/invoke")
-    @Produces({ MediaType.APPLICATION_JSON })
     @Consumes({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
     public Response serviceInvokeAction(
             @PathParam("oid") final String oidStr, 
             @PathParam("actionId") final String actionId,

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.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/ObjectActionRepBuilder.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java Tue Sep 27 16:41:19 2011
@@ -190,7 +190,7 @@ public class ObjectActionRepBuilder exte
         extensions.mapPut("actionType", objectMember.getType().name().toLowerCase());
         
         final ActionSemantics semantics = ActionSemantics.determine(resourceContext, objectMember);
-        extensions.mapPut("actionSemantics", semantics.name().toLowerCase());
+        extensions.mapPut("actionSemantics", semantics.getName());
     }
 
      private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java Tue Sep 27 16:41:19 2011
@@ -30,6 +30,7 @@ import javax.ws.rs.core.Response;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.apache.isis.viewer.json.applib.domaintypes.DomainTypeResource;
 import org.apache.isis.viewer.json.viewer.representations.LinkToBuilder;
 import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
@@ -44,7 +45,7 @@ public class DomainTypeResourceServersid
 
     @GET
     @Path("/")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_TYPES })
     public Response domainTypes() {
         init();
 
@@ -60,25 +61,25 @@ public class DomainTypeResourceServersid
         
         representation.mapPut("domainTypes", specList);
         
-        return responseOfOk(RepresentationType.DOMAIN_TYPE, representation, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.DOMAIN_TYPE, Caching.ONE_DAY, representation).build();
     }
 
     
     @GET
     @Path("/{domainType}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_TYPE })
     public Response domainType(@PathParam("domainType") final String domainType){
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
         representation.mapPut("self", LinkToBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s", domainType).build());
         
-        return responseOfOk(RepresentationType.DOMAIN_TYPE, representation, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.DOMAIN_TYPE, Caching.ONE_DAY, representation).build();
     }
 
     @GET
     @Path("/{domainType}/properties/{propertyId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_PROPERTY })
     public Response typeProperty(
             @PathParam("domainType") final String domainType,
             @PathParam("propertyId") final String propertyId){
@@ -87,12 +88,12 @@ public class DomainTypeResourceServersid
         JsonRepresentation representation = JsonRepresentation.newMap();
         representation.mapPut("self", LinkToBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/properties/%s", domainType, propertyId).build());
         
-        return responseOfOk(RepresentationType.DOMAIN_TYPE_PROPERTY, representation, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.TYPE_PROPERTY, Caching.ONE_DAY, representation).build();
     }
 
     @GET
     @Path("/{domainType}/collections/{collectionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_COLLECTION })
     public Response typeCollection(
             @PathParam("domainType") final String domainType,
             @PathParam("collectionId") final String collectionId){
@@ -101,12 +102,12 @@ public class DomainTypeResourceServersid
         JsonRepresentation representation = JsonRepresentation.newMap();
         representation.mapPut("self", LinkToBuilder.newBuilder(getResourceContext(), "self", "domainType/%s/collections/%s", domainType, collectionId).build());
         
-        return responseOfOk(RepresentationType.DOMAIN_TYPE_COLLECTION, representation, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.TYPE_COLLECTION, Caching.ONE_DAY, representation).build();
     }
 
     @GET
     @Path("/{domainType}/actions/{actionId}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_ACTION })
     public Response typeAction(
             @PathParam("domainType") final String domainType,
             @PathParam("actionId") final String actionId){
@@ -115,12 +116,12 @@ public class DomainTypeResourceServersid
         JsonRepresentation representation = JsonRepresentation.newMap();
         representation.mapPut("self", LinkToBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/actions/%s", domainType, actionId).build());
         
-        return responseOfOk(RepresentationType.DOMAIN_TYPE_ACTION, representation, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.TYPE_ACTION, Caching.ONE_DAY, representation).build();
     }
 
     @GET
     @Path("/{domainType}/actions/{actionId}/params/{paramName}")
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_ACTION_PARAMETER })
     public Response typeActionParam(
             @PathParam("domainType") final String domainType,
             @PathParam("actionId") final String actionId,
@@ -130,7 +131,7 @@ public class DomainTypeResourceServersid
         JsonRepresentation representation = JsonRepresentation.newMap();
         representation.mapPut("self", LinkToBuilder.newBuilder(getResourceContext(), "self", "domainTypes/%s/actions/%s/params/%s", domainType, actionId, paramName).build());
         
-        return responseOfOk(RepresentationType.DOMAIN_TYPE_COLLECTION, representation, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.TYPE_COLLECTION, Caching.ONE_DAY, representation).build();
     }
 
 }
\ No newline at end of file

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java Tue Sep 27 16:41:19 2011
@@ -26,7 +26,7 @@ import javax.ws.rs.core.Response;
 
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
-import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
 import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
 import org.apache.isis.viewer.json.viewer.JsonApplicationException;
@@ -41,7 +41,7 @@ public class HomePageResourceServerside 
 
 
     @Override
-    @Produces(MediaType.APPLICATION_JSON)
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_HOME_PAGE} )
     public Response resources() {
         init();
         
@@ -57,7 +57,7 @@ public class HomePageResourceServerside 
         representation.mapPut("links", JsonRepresentation.newArray());
         representation.mapPut("extensions", JsonRepresentation.newMap());
 
-        return responseOfOk(RepresentationType.HOME_PAGE, representation, Caching.ONE_DAY).build();
+        return responseOfOk(RepresentationType.HOME_PAGE, Caching.ONE_DAY, representation).build();
     }
 
     private void fakeRuntimeExceptionIfXFail() {

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceServerside.java?rev=1176463&r1=1176462&r2=1176463&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceServerside.java Tue Sep 27 16:41:19 2011
@@ -23,6 +23,7 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulMediaType;
 import org.apache.isis.viewer.json.applib.user.UserResource;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
@@ -30,14 +31,14 @@ import org.apache.isis.viewer.json.viewe
 public class UserResourceServerside extends ResourceAbstract implements UserResource {
 
     @Override
-    @Produces({ MediaType.APPLICATION_JSON })
+    @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_USER })
     public Response user() {
         init();
         
         ResourceContext resourceContext = getResourceContext();
         UserRepBuilder builder = UserRepBuilder.newBuilder(resourceContext).withAuthenticationSession(getAuthenticationSession());
 
-        return responseOfOk(RepresentationType.USER, builder, Caching.ONE_HOUR).build();
+        return responseOfOk(RepresentationType.USER, Caching.ONE_HOUR, builder).build();
     }
 
 }