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/29 09:59:05 UTC

svn commit: r1177197 - in /incubator/isis/trunk/framework/viewer/json: json-applib/src/main/java/org/apache/isis/viewer/json/applib/ json-applib/src/test/java/org/apache/isis/viewer/json/applib/ json-viewer/src/main/java/org/apache/isis/viewer/json/vie...

Author: danhaywood
Date: Thu Sep 29 07:59:04 2011
New Revision: 1177197

URL: http://svn.apache.org/viewvc?rev=1177197&view=rev
Log:
ISIS-109: started refactoring so that representation builders are looked up by media type (eventually: will be taken from Accept header)

Added:
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/DomainObjectTypedReprBuilderFactory.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderAbstract.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactory.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactoryAbstract.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactoryRegistry.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/AbstractResourceHelper.java
Modified:
    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/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest_getMediaType_lookup.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/resources/ResourceAbstract.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprBuilder.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/DomainServiceResourceHelper.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/user/UserResourceHelper.java

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=1177197&r1=1177196&r2=1177197&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 Thu Sep 29 07:59:04 2011
@@ -56,7 +56,11 @@ public enum RepresentationType {
     public final MediaType getMediaType() {
         return mediaType;
     }
-    
+
+    public String getMediaTypeProfile() {
+        return getMediaType().getParameters().get("profile");
+    }
+
     public Class<? extends JsonRepresentation> getRepresentationClass() {
         return representationClass;
     }
@@ -91,6 +95,7 @@ public enum RepresentationType {
             }
         };
     }
+
     
     
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest_getMediaType_lookup.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest_getMediaType_lookup.java?rev=1177197&r1=1177196&r2=1177197&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest_getMediaType_lookup.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RepresentationTypeTest_getMediaType_lookup.java Thu Sep 29 07:59:04 2011
@@ -1,6 +1,7 @@
 package org.apache.isis.viewer.json.applib;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertThat;
 
@@ -29,4 +30,10 @@ public class RepresentationTypeTest_getM
         assertThat(RepresentationType.lookup((MediaType)null), is(RepresentationType.GENERIC));
     }
 
+    @Test
+    public void getMediaTypeProfile() {
+        assertThat(RepresentationType.CAPABILITIES.getMediaTypeProfile(), is("http://restfulobjects.org/profiles/capabilities"));
+        assertThat(RepresentationType.GENERIC.getMediaTypeProfile(), is(nullValue()));
+    }
+
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/JsonApplication.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/JsonApplication.java?rev=1177197&r1=1177196&r2=1177197&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/JsonApplication.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/JsonApplication.java Thu Sep 29 07:59:04 2011
@@ -28,14 +28,21 @@ import org.apache.isis.viewer.json.viewe
 public class JsonApplication extends AbstractJaxRsApplication {
 
     public JsonApplication() {
-        addSingleton(new HomePageResourceServerside());
-        addSingleton(new DomainTypeResourceServerside());
-        addSingleton(new UserResourceServerside());
-        addSingleton(new DomainObjectResourceServerside());
-        addSingleton(new DomainServiceResourceServerside());
-        addSingleton(new CapabilitiesResourceServerside());
+        addClass(HomePageResourceServerside.class);
+        addClass(DomainTypeResourceServerside.class);
+        addClass(UserResourceServerside.class);
+        addClass(DomainObjectResourceServerside.class);
+        addClass(DomainServiceResourceServerside.class);
+        addClass(CapabilitiesResourceServerside.class);
+        
         addSingleton(new JsonApplicationExceptionMapper());
+        
+        // TODO: doesn't get injected
+        // addSingleton(new TypedReprBuilderFactoryRegistry());
+        
+        // TODO: idea being to remove the init()
         // addSingleton(new PreProcessInterceptorForIsisSession());
     }
 
+
 }

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/DomainObjectTypedReprBuilderFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/DomainObjectTypedReprBuilderFactory.java?rev=1177197&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/DomainObjectTypedReprBuilderFactory.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/DomainObjectTypedReprBuilderFactory.java Thu Sep 29 07:59:04 2011
@@ -0,0 +1,19 @@
+package org.apache.isis.viewer.json.viewer.representations;
+
+import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainObjectReprBuilder;
+
+class DomainObjectTypedReprBuilderFactory extends TypedReprBuilderFactoryAbstract {
+
+    public DomainObjectTypedReprBuilderFactory() {
+        super(RepresentationType.DOMAIN_OBJECT);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <T> TypedReprBuilder<T> newBuilder(ResourceContext resourceContext, Class<T> cls) {
+        return (TypedReprBuilder<T>) DomainObjectReprBuilder.newBuilder(resourceContext);
+    }
+    
+}
\ No newline at end of file

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilder.java?rev=1177197&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilder.java Thu Sep 29 07:59:04 2011
@@ -0,0 +1,10 @@
+package org.apache.isis.viewer.json.viewer.representations;
+
+
+public interface TypedReprBuilder<T> extends ReprBuilder {
+
+    TypedReprBuilder<T> withSelf();
+
+    TypedReprBuilder<T> with(T t);
+
+}

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderAbstract.java?rev=1177197&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderAbstract.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderAbstract.java Thu Sep 29 07:59:04 2011
@@ -0,0 +1,17 @@
+package org.apache.isis.viewer.json.viewer.representations;
+
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+
+public abstract class TypedReprBuilderAbstract<T> implements TypedReprBuilder<T> {
+
+    private final ResourceContext resourceContext;
+
+    public TypedReprBuilderAbstract(ResourceContext resourceContext) {
+        this.resourceContext = resourceContext;
+    }
+    
+    public ResourceContext getResourceContext() {
+        return resourceContext;
+    }
+
+}

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactory.java?rev=1177197&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactory.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactory.java Thu Sep 29 07:59:04 2011
@@ -0,0 +1,12 @@
+package org.apache.isis.viewer.json.viewer.representations;
+
+import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+
+public interface TypedReprBuilderFactory {
+
+    public abstract RepresentationType getRepresentationType();
+
+    public abstract <T> TypedReprBuilder<T> newBuilder(ResourceContext resourceContext, Class<T> cls);
+
+}
\ No newline at end of file

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactoryAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactoryAbstract.java?rev=1177197&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactoryAbstract.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactoryAbstract.java Thu Sep 29 07:59:04 2011
@@ -0,0 +1,19 @@
+package org.apache.isis.viewer.json.viewer.representations;
+
+import org.apache.isis.viewer.json.applib.RepresentationType;
+
+public abstract class TypedReprBuilderFactoryAbstract implements TypedReprBuilderFactory {
+
+    private final RepresentationType representationType;
+
+    public TypedReprBuilderFactoryAbstract(RepresentationType representationType) {
+        this.representationType = representationType;
+    }
+    
+    @Override
+    public RepresentationType getRepresentationType() {
+        return representationType;
+    }
+
+    
+}

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactoryRegistry.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactoryRegistry.java?rev=1177197&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactoryRegistry.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/TypedReprBuilderFactoryRegistry.java Thu Sep 29 07:59:04 2011
@@ -0,0 +1,49 @@
+/*
+ *  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.viewer.representations;
+
+import java.util.Map;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.isis.viewer.json.applib.RepresentationType;
+
+import com.google.common.collect.Maps;
+
+public class TypedReprBuilderFactoryRegistry {
+
+    private final Map<MediaType, TypedReprBuilderFactory> factoryByReprType = Maps.newHashMap();
+    
+    public TypedReprBuilderFactoryRegistry() {
+        registerDefaults();
+    }
+    
+    private void registerDefaults() {
+        register(new DomainObjectTypedReprBuilderFactory());
+    }
+
+    public void register(TypedReprBuilderFactory factory) {
+        final RepresentationType representationType = factory.getRepresentationType();
+        factoryByReprType.put(representationType.getMediaType(), factory);
+    }
+    
+    public TypedReprBuilderFactory locate(MediaType mediaType) {
+        return factoryByReprType.get(mediaType);
+    }
+}

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/AbstractResourceHelper.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/AbstractResourceHelper.java?rev=1177197&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/AbstractResourceHelper.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/AbstractResourceHelper.java Thu Sep 29 07:59:04 2011
@@ -0,0 +1,44 @@
+/*
+ *  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.viewer.resources;
+
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+
+public class AbstractResourceHelper {
+
+    private final ResourceContext resourceContext;
+    private final String selfRef;
+    
+    public AbstractResourceHelper(ResourceContext resourceContext) {
+        this(resourceContext, null);
+    }
+
+    public AbstractResourceHelper(ResourceContext resourceContext, String selfRef) {
+        this.resourceContext = resourceContext;
+        this.selfRef = selfRef;
+    }
+
+    public ResourceContext getResourceContext() {
+        return resourceContext;
+    }
+    
+    public String getSelfRef() {
+        return selfRef;
+    }
+}

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=1177197&r1=1177196&r2=1177197&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 Thu Sep 29 07:59:04 2011
@@ -55,6 +55,7 @@ import org.apache.isis.viewer.json.viewe
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.AbstractReprBuilder;
 import org.apache.isis.viewer.json.viewer.representations.ReprBuilder;
+import org.apache.isis.viewer.json.viewer.representations.TypedReprBuilderFactoryRegistry;
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainObjectReprBuilder;
 import org.apache.isis.viewer.json.viewer.util.OidUtils;
 import org.apache.isis.viewer.json.viewer.util.UrlDecoderUtils;
@@ -91,11 +92,11 @@ public abstract class ResourceAbstract {
         }
     }
 
+    // nb: SET is excluded; we simply flatten contributed actions.
+	public final static ActionType[] ACTION_TYPES = { ActionType.USER, ActionType.DEBUG, ActionType.EXPLORATION };
 
-	public final static ActionType[] ACTION_TYPES = { ActionType.USER, ActionType.DEBUG, ActionType.EXPLORATION,
-    // SET is excluded; we simply flatten contributed actions.
-        };
-
+	// TODO: should inject this instead...
+	protected final static TypedReprBuilderFactoryRegistry BUILDER_REGISTRY = new TypedReprBuilderFactoryRegistry();
 
     @Context
     HttpHeaders httpHeaders;
@@ -122,7 +123,7 @@ public abstract class ResourceAbstract {
             new ResourceContext(httpHeaders, uriInfo, request, httpServletRequest, httpServletResponse, securityContext, 
                     getOidStringifier(), getLocalization(), getAuthenticationSession(), getPersistenceSession(), getAdapterManager());
     }
-
+    
     protected ResourceContext getResourceContext() {
         return resourceContext;
     }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprBuilder.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/DomainObjectReprBuilder.java?rev=1177197&r1=1177196&r2=1177197&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprBuilder.java Thu Sep 29 07:59:04 2011
@@ -34,11 +34,12 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.AbstractReprBuilder;
 import org.apache.isis.viewer.json.viewer.representations.LinkReprBuilder;
+import org.apache.isis.viewer.json.viewer.representations.TypedReprBuilder;
 import org.apache.isis.viewer.json.viewer.util.OidUtils;
 
 import com.google.common.base.Function;
 
-public class DomainObjectReprBuilder extends AbstractReprBuilder<DomainObjectReprBuilder> {
+public class DomainObjectReprBuilder extends AbstractReprBuilder<DomainObjectReprBuilder> implements TypedReprBuilder<ObjectAdapter>{
 
     public static DomainObjectReprBuilder newBuilder(ResourceContext resourceContext) {
         return new DomainObjectReprBuilder(resourceContext);
@@ -51,6 +52,7 @@ public class DomainObjectReprBuilder ext
     }
 
     private ObjectAdapterLinkToBuilder linkToBuilder;
+    private boolean includeSelf;
 
     public DomainObjectReprBuilder(ResourceContext resourceContext) {
         super(resourceContext);
@@ -66,9 +68,17 @@ public class DomainObjectReprBuilder ext
         return this;
     }
 
-    public DomainObjectReprBuilder withAdapter(ObjectAdapter objectAdapter) {
-        JsonRepresentation self = linkToBuilder.with(objectAdapter).linkToAdapter().build();
-        representation.mapPut("self", self);
+    @Override
+    public DomainObjectReprBuilder withSelf() {
+        this.includeSelf = true;
+        return this;
+    }
+
+    public DomainObjectReprBuilder with(ObjectAdapter objectAdapter) {
+        if(includeSelf) {
+            JsonRepresentation self = linkToBuilder.with(objectAdapter).linkToAdapter().build();
+            representation.mapPut("self", self);
+        }
 
         String title = objectAdapter.titleString();
         representation.mapPut("oid", OidUtils.getOidStr(resourceContext, objectAdapter));
@@ -152,7 +162,7 @@ public class DomainObjectReprBuilder ext
         return new Function<ObjectAdapter, JsonRepresentation>() {
             @Override
             public JsonRepresentation apply(ObjectAdapter adapter) {
-                return newBuilder(resourceContext).withAdapter(adapter).build();
+                return newBuilder(resourceContext).with(adapter).build();
             }
         };
     }
@@ -184,4 +194,5 @@ public class DomainObjectReprBuilder ext
 	}
 
 
+
 }
\ 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/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=1177197&r1=1177196&r2=1177197&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 Thu Sep 29 07:59:04 2011
@@ -17,6 +17,8 @@
 package org.apache.isis.viewer.json.viewer.resources.domainobjects;
 
 import java.io.InputStream;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
@@ -29,8 +31,10 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -41,15 +45,23 @@ import org.apache.isis.viewer.json.appli
 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.representations.AbstractReprBuilder;
+import org.apache.isis.viewer.json.viewer.representations.TypedReprBuilder;
+import org.apache.isis.viewer.json.viewer.representations.TypedReprBuilderFactory;
 
 @Path("/objects")
 public class DomainObjectResourceServerside extends DomainResourceAbstract implements
         DomainObjectResource {
-    
+
+    private static final DateFormat ETAG_FORMAT = 
+            new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
+
     ////////////////////////////////////////////////////////////
     // domain object
     ////////////////////////////////////////////////////////////
     
+
+
     @GET
     @Path("/{oid}")
     @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
@@ -59,7 +71,22 @@ public class DomainObjectResourceServers
 
         final ObjectAdapter objectAdapter = getObjectAdapter(oidStr);
         
-        return object(objectAdapter);
+        final TypedReprBuilderFactory reprBuilderBuilder = 
+                BUILDER_REGISTRY.locate(RepresentationType.DOMAIN_OBJECT.getMediaType());
+        
+        final TypedReprBuilder<ObjectAdapter> repBuilder = 
+                reprBuilderBuilder.newBuilder(getResourceContext(), ObjectAdapter.class);
+
+        repBuilder.withSelf().with(objectAdapter);
+        
+        ResponseBuilder respBuilder = 
+                responseOfOk(RepresentationType.DOMAIN_OBJECT, Caching.NONE, repBuilder);
+        
+        Version version = objectAdapter.getVersion();
+        if (version != null && version.getTime() != null) {
+            respBuilder.tag(ETAG_FORMAT.format(version.getTime()));
+        }
+        return respBuilder.build();
     }
 
     @PUT

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=1177197&r1=1177196&r2=1177197&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 Thu Sep 29 07:59:04 2011
@@ -67,14 +67,14 @@ public abstract class DomainResourceAbst
         ResourceContext resourceContext = getResourceContext();
         final AbstractReprBuilder<?> repBuilder =
                 DomainObjectReprBuilder.newBuilder(resourceContext)
-                        .withAdapter(objectAdapter);
+                        .with(objectAdapter);
 
         ResponseBuilder respBuilder = 
                 responseOfOk(RepresentationType.DOMAIN_OBJECT, Caching.NONE, repBuilder);
 
         Version version = objectAdapter.getVersion();
         if (version != null && version.getTime() != null) {
-            respBuilder.lastModified(version.getTime());
+            respBuilder.tag(""+version.getTime());
         }
         return respBuilder.build();
     }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceHelper.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/DomainServiceResourceHelper.java?rev=1177197&r1=1177196&r2=1177197&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceHelper.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainServiceResourceHelper.java Thu Sep 29 07:59:04 2011
@@ -42,7 +42,7 @@ public class DomainServiceResourceHelper
         DomainObjectListReprBuilder builder = 
                 DomainObjectListReprBuilder.newBuilder(getResourceContext())
                     .usingLinkToBuilder(new DomainServiceLinkToBuilder())
-                    .withSelf(getSelfRef())
+                    .withSelf("services")
                     .withAdapters(serviceAdapters);
         
         return builder;

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=1177197&r1=1177196&r2=1177197&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 Thu Sep 29 07:59:04 2011
@@ -74,7 +74,7 @@ public class DomainServiceResourceServer
         AbstractReprBuilder<?> builder = 
                 DomainObjectReprBuilder.newBuilder(resourceContext)
                     .usingLinkToBuilder(new DomainServiceLinkToBuilder())
-                    .withAdapter(serviceAdapter);
+                    .with(serviceAdapter);
         
         return responseOfOk(RepresentationType.DOMAIN_OBJECT, Caching.ONE_DAY, builder).build();
     }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceHelper.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/UserResourceHelper.java?rev=1177197&r1=1177196&r2=1177197&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceHelper.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserResourceHelper.java Thu Sep 29 07:59:04 2011
@@ -34,7 +34,7 @@ public class UserResourceHelper extends 
     public UserReprBuilder user() {
         return UserReprBuilder.newBuilder(getResourceContext())
                     .withAuthenticationSession(getResourceContext().getAuthenticationSession())
-                    .withSelf(getSelfRef());
+                    .withSelf("user");
     }
 
 }