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/07 12:40:20 UTC

svn commit: r1166100 - in /incubator/isis/trunk/framework: tck/tck-dom/src/main/java/org/apache/isis/tck/dom/ tck/tck-dom/src/main/java/org/apache/isis/tck/dom/actions/ tck/tck-dom/src/main/java/org/apache/isis/tck/dom/scalars/ tck/tck-dom/src/main/jav...

Author: danhaywood
Date: Wed Sep  7 10:40:19 2011
New Revision: 1166100

URL: http://svn.apache.org/viewvc?rev=1166100&view=rev
Log:
ISIS-109: starting back on the domain service/object repr

Added:
    incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/AbstractEntityRepository.java
      - copied, changed from r1165948, incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/scalars/AbstractValuedEntityRepository.java
    incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/actions/
    incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/
    incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntity.java
    incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntityRepository.java
    incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/simples/
    incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/simples/SimpleEntityFixture.java
    incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/simples/
    incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/simples/SimpleEntityRepositoryDefault.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
      - copied, changed from r1165980, incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java
Modified:
    incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/scalars/AbstractValuedEntityRepository.java
    incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/ApplibValuedEntityRepositoryDefault.java
    incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/JdkValuedEntityRepositoryDefault.java
    incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/PrimitiveValuedEntityRepositoryDefault.java
    incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/WrapperValuedEntityRepositoryDefault.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java
    incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainServiceResource.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/main/webapp/WEB-INF/isis.properties
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java
    incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberRepType.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.java
    incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java

Copied: incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/AbstractEntityRepository.java (from r1165948, incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/scalars/AbstractValuedEntityRepository.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/AbstractEntityRepository.java?p2=incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/AbstractEntityRepository.java&p1=incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/scalars/AbstractValuedEntityRepository.java&r1=1165948&r2=1166100&rev=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/scalars/AbstractValuedEntityRepository.java (original)
+++ incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/AbstractEntityRepository.java Wed Sep  7 10:40:19 2011
@@ -17,17 +17,17 @@
  *  under the License.
  */
 
-package org.apache.isis.tck.dom.scalars;
+package org.apache.isis.tck.dom;
 
 import java.util.List;
 
 import org.apache.isis.applib.AbstractFactoryAndRepository;
 
-public abstract class AbstractValuedEntityRepository<T> extends AbstractFactoryAndRepository {
+public abstract class AbstractEntityRepository<T> extends AbstractFactoryAndRepository {
     
     private Class<T> cls;
 
-    public AbstractValuedEntityRepository(Class<T> cls) {
+    public AbstractEntityRepository(Class<T> cls) {
         super();
         this.cls = cls;
     }

Added: incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntity.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntity.java?rev=1166100&view=auto
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntity.java (added)
+++ incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntity.java Wed Sep  7 10:40:19 2011
@@ -0,0 +1,55 @@
+/*
+ *  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.tck.dom.simples;
+
+import org.apache.isis.applib.AbstractDomainObject;
+import org.apache.isis.applib.annotation.MemberOrder;
+
+public class SimpleEntity extends AbstractDomainObject {
+
+    // {{ Name
+    private String name;
+
+    @MemberOrder(sequence = "1")
+    public String getName() {
+        return name;
+    }
+
+    public void setName(final String name) {
+        this.name = name;
+    }
+    // }}
+
+
+    // {{ Flag
+    private Boolean flag;
+
+    @MemberOrder(sequence = "1")
+    public Boolean getFlag() {
+        return flag;
+    }
+
+    public void setFlag(final Boolean flag) {
+        this.flag = flag;
+    }
+    // }}
+
+
+}

Added: incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntityRepository.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntityRepository.java?rev=1166100&view=auto
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntityRepository.java (added)
+++ incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/simples/SimpleEntityRepository.java Wed Sep  7 10:40:19 2011
@@ -0,0 +1,42 @@
+/*
+ *  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.tck.dom.simples;
+
+import java.util.List;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Named;
+
+@Named("Simples")
+public interface SimpleEntityRepository {
+
+    @MemberOrder(sequence="1")
+    public List<SimpleEntity> list();
+
+    @MemberOrder(sequence="2")
+    public SimpleEntity newTransientEntity();
+
+    @MemberOrder(sequence="2")
+    public SimpleEntity newPersistentEntity(
+        @Named("name") String name, 
+        @Named("flag") Boolean flag);
+
+
+}

Added: incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/simples/SimpleEntityFixture.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/simples/SimpleEntityFixture.java?rev=1166100&view=auto
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/simples/SimpleEntityFixture.java (added)
+++ incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/simples/SimpleEntityFixture.java Wed Sep  7 10:40:19 2011
@@ -0,0 +1,57 @@
+/*
+ *  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.tck.fixture.simples;
+
+import org.apache.isis.applib.fixtures.AbstractFixture;
+import org.apache.isis.tck.dom.scalars.WrapperValuedEntity;
+import org.apache.isis.tck.dom.scalars.WrapperValuedEntityRepository;
+import org.apache.isis.tck.dom.simples.SimpleEntity;
+import org.apache.isis.tck.dom.simples.SimpleEntityRepository;
+
+
+
+public class SimpleEntityFixture extends AbstractFixture {
+
+    @Override
+    public void install() {
+        createEntity("John", true);
+        createEntity("Mary", false);
+        createEntity("Bill", false);
+        createEntity("Sally", true);
+        createEntity("Diedre", true);
+    }
+    
+    private SimpleEntity createEntity(String name, Boolean flag) {
+        return simpleEntityRepository.newPersistentEntity(name, flag);
+    }
+
+
+    // {{ injected: SimpleEntityRepository
+    private SimpleEntityRepository simpleEntityRepository;
+
+    public void setSimpleEntityRepository(final SimpleEntityRepository simpleEntityRepository) {
+        this.simpleEntityRepository = simpleEntityRepository;
+    }
+    // }}
+
+
+    
+}

Modified: incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/ApplibValuedEntityRepositoryDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/ApplibValuedEntityRepositoryDefault.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/ApplibValuedEntityRepositoryDefault.java (original)
+++ incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/ApplibValuedEntityRepositoryDefault.java Wed Sep  7 10:40:19 2011
@@ -19,11 +19,11 @@
 
 package org.apache.isis.tck.objstore.dflt.scalars;
 
-import org.apache.isis.tck.dom.scalars.AbstractValuedEntityRepository;
+import org.apache.isis.tck.dom.AbstractEntityRepository;
 import org.apache.isis.tck.dom.scalars.ApplibValuedEntity;
 import org.apache.isis.tck.dom.scalars.ApplibValuedEntityRepository;
 
-public class ApplibValuedEntityRepositoryDefault extends AbstractValuedEntityRepository<ApplibValuedEntity> implements ApplibValuedEntityRepository {
+public class ApplibValuedEntityRepositoryDefault extends AbstractEntityRepository<ApplibValuedEntity> implements ApplibValuedEntityRepository {
 
     public ApplibValuedEntityRepositoryDefault() {
         super(ApplibValuedEntity.class);

Modified: incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/JdkValuedEntityRepositoryDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/JdkValuedEntityRepositoryDefault.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/JdkValuedEntityRepositoryDefault.java (original)
+++ incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/JdkValuedEntityRepositoryDefault.java Wed Sep  7 10:40:19 2011
@@ -19,11 +19,11 @@
 
 package org.apache.isis.tck.objstore.dflt.scalars;
 
-import org.apache.isis.tck.dom.scalars.AbstractValuedEntityRepository;
+import org.apache.isis.tck.dom.AbstractEntityRepository;
 import org.apache.isis.tck.dom.scalars.JdkValuedEntity;
 import org.apache.isis.tck.dom.scalars.JdkValuedEntityRepository;
 
-public class JdkValuedEntityRepositoryDefault extends AbstractValuedEntityRepository<JdkValuedEntity> implements JdkValuedEntityRepository {
+public class JdkValuedEntityRepositoryDefault extends AbstractEntityRepository<JdkValuedEntity> implements JdkValuedEntityRepository {
 
     public JdkValuedEntityRepositoryDefault() {
         super(JdkValuedEntity.class);

Modified: incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/PrimitiveValuedEntityRepositoryDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/PrimitiveValuedEntityRepositoryDefault.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/PrimitiveValuedEntityRepositoryDefault.java (original)
+++ incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/PrimitiveValuedEntityRepositoryDefault.java Wed Sep  7 10:40:19 2011
@@ -19,11 +19,11 @@
 
 package org.apache.isis.tck.objstore.dflt.scalars;
 
-import org.apache.isis.tck.dom.scalars.AbstractValuedEntityRepository;
+import org.apache.isis.tck.dom.AbstractEntityRepository;
 import org.apache.isis.tck.dom.scalars.PrimitiveValuedEntity;
 import org.apache.isis.tck.dom.scalars.PrimitiveValuedEntityRepository;
 
-public class PrimitiveValuedEntityRepositoryDefault extends AbstractValuedEntityRepository<PrimitiveValuedEntity> implements PrimitiveValuedEntityRepository {
+public class PrimitiveValuedEntityRepositoryDefault extends AbstractEntityRepository<PrimitiveValuedEntity> implements PrimitiveValuedEntityRepository {
 
     public PrimitiveValuedEntityRepositoryDefault() {
         super(PrimitiveValuedEntity.class);

Modified: incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/WrapperValuedEntityRepositoryDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/WrapperValuedEntityRepositoryDefault.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/WrapperValuedEntityRepositoryDefault.java (original)
+++ incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/scalars/WrapperValuedEntityRepositoryDefault.java Wed Sep  7 10:40:19 2011
@@ -19,11 +19,11 @@
 
 package org.apache.isis.tck.objstore.dflt.scalars;
 
-import org.apache.isis.tck.dom.scalars.AbstractValuedEntityRepository;
+import org.apache.isis.tck.dom.AbstractEntityRepository;
 import org.apache.isis.tck.dom.scalars.WrapperValuedEntity;
 import org.apache.isis.tck.dom.scalars.WrapperValuedEntityRepository;
 
-public class WrapperValuedEntityRepositoryDefault extends AbstractValuedEntityRepository<WrapperValuedEntity> implements WrapperValuedEntityRepository {
+public class WrapperValuedEntityRepositoryDefault extends AbstractEntityRepository<WrapperValuedEntity> implements WrapperValuedEntityRepository {
 
     public WrapperValuedEntityRepositoryDefault() {
         super(WrapperValuedEntity.class);

Added: incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/simples/SimpleEntityRepositoryDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/simples/SimpleEntityRepositoryDefault.java?rev=1166100&view=auto
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/simples/SimpleEntityRepositoryDefault.java (added)
+++ incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/simples/SimpleEntityRepositoryDefault.java Wed Sep  7 10:40:19 2011
@@ -0,0 +1,51 @@
+/*
+ *  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.tck.objstore.dflt.simples;
+
+import org.apache.isis.tck.dom.AbstractEntityRepository;
+import org.apache.isis.tck.dom.simples.SimpleEntity;
+import org.apache.isis.tck.dom.simples.SimpleEntityRepository;
+
+public class SimpleEntityRepositoryDefault extends AbstractEntityRepository<SimpleEntity> implements SimpleEntityRepository {
+
+    public SimpleEntityRepositoryDefault() {
+        super(SimpleEntity.class);
+    }
+
+    @Override
+    public String getId() {
+        return "simples";
+    }
+
+    @Override
+    public SimpleEntity newTransientEntity() {
+        return newTransientInstance(SimpleEntity.class);
+    }
+
+    @Override
+    public SimpleEntity newPersistentEntity(String name, Boolean flag) {
+        SimpleEntity entity = newTransientEntity();
+        entity.setName(name);
+        entity.setFlag(flag);
+        return entity;
+    }
+    
+
+}

Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/domainobjects/DomainObjectRepresentation.java Wed Sep  7 10:40:19 2011
@@ -26,6 +26,10 @@ public class DomainObjectRepresentation 
         return getString("title");
     }
     
+    public JsonRepresentation getMembers() {
+        return getArray("members");
+    }
+
     /**
      * Requires xom:xom:1.1 (LGPL) to be added as a dependency.
      */
@@ -40,7 +44,6 @@ public class DomainObjectRepresentation 
         return xpath("/*[memberType='action']");
     }
 
-
     
     public JsonRepresentation getLinks() {
         return getArray("links");
@@ -49,4 +52,5 @@ public class DomainObjectRepresentation 
         return getMap("extensions");
     }
 
+
 }

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=1166100&r1=1166099&r2=1166100&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 Wed Sep  7 10:40:19 2011
@@ -50,7 +50,7 @@ public interface DomainServiceResource {
     @Path("/{serviceId}")
     @Produces({ MediaType.APPLICATION_JSON })
     @ClientResponseType(entityType=String.class)
-    public Response service(@PathParam("serviceid") final String serviceId);
+    public Response service(@PathParam("serviceId") final String serviceId);
     
     
     ////////////////////////////////////////////////////////////

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/main/webapp/WEB-INF/isis.properties
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/main/webapp/WEB-INF/isis.properties?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/main/webapp/WEB-INF/isis.properties (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/main/webapp/WEB-INF/isis.properties Wed Sep  7 10:40:19 2011
@@ -19,7 +19,8 @@ isis.services =\
     scalars.ApplibValuedEntityRepositoryDefault,\
     scalars.JdkValuedEntityRepositoryDefault,\
     scalars.PrimitiveValuedEntityRepositoryDefault,\
-    scalars.WrapperValuedEntityRepositoryDefault
+    scalars.WrapperValuedEntityRepositoryDefault, \
+    simples.SimpleEntityRepositoryDefault
 
 isis.fixtures.prefix= org.apache.isis.tck.fixture
 isis.fixtures=\
@@ -27,7 +28,8 @@ isis.fixtures=\
     scalars.ApplibValuedEntityFixture,\
     scalars.JdkValuedEntityFixture,\
     scalars.PrimitiveValuedEntityFixture,\
-    scalars.WrapperValuedEntityFixture
+    scalars.WrapperValuedEntityFixture,\
+    simples.SimpleEntityFixture\
 
 
 isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.dflt.classsubstitutor.CglibClassSubstitutor

Added: 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=1166100&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_service_serviceId.java Wed Sep  7 10:40:19 2011
@@ -0,0 +1,126 @@
+package org.apache.isis.viewer.json.tck;
+
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isArray;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isFollowableLinkToSelf;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isLink;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isMap;
+import static org.apache.isis.core.commons.matchers.IsisMatchers.*;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status.Family;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.viewer.json.applib.HttpStatusCode;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.blocks.Link;
+import org.apache.isis.viewer.json.applib.blocks.Method;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectRepresentation;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainServiceResource;
+import org.apache.isis.viewer.json.applib.domainobjects.DomainServicesRepresentation;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.Matchers;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+
+
+public class DomainServiceResourceTest_service_serviceId {
+
+    @Rule
+    public IsisWebServerRule webServerRule = new IsisWebServerRule();
+    
+    private RestfulClient client;
+    private DomainServiceResource resource;
+
+    @Before
+    public void setUp() throws Exception {
+        WebServer webServer = webServerRule.getWebServer();
+        client = new RestfulClient(webServer.getBase());
+        
+        resource = client.getDomainServiceResource();
+    }
+
+
+    @Test
+    public void representation() throws Exception {
+
+        // given
+        Response resp = resource.service("simples");
+        
+        // when
+        RestfulResponse<DomainObjectRepresentation> jsonResp = RestfulResponse.of(resp, DomainObjectRepresentation.class);
+        
+        
+        
+        // then
+        assertThat(jsonResp.getStatus(), is(HttpStatusCode.OK));
+        assertThat(jsonResp.getHeader(RestfulResponse.Header.MEDIA_TYPE), is(MediaType.APPLICATION_JSON_TYPE));
+        assertThat(jsonResp.getHeader(RestfulResponse.Header.CACHE_CONTROL).isNoCache(), is(true));
+        assertThat(jsonResp.getHeader(RestfulResponse.Header.X_REPRESENTATION_TYPE), is(RepresentationType.DOMAIN_OBJECT));
+
+        DomainObjectRepresentation repr = jsonResp.getEntity();
+
+        assertThat(repr, isMap());
+
+        assertThat(repr.getSelf(), isLink().method(Method.GET));
+        assertThat(repr.getOid(), matches("OID[:].+"));
+        assertThat(repr.getTitle(), matches("Simples"));
+
+        assertThat(repr.getMembers(), isArray());
+        
+        assertThat(repr.getLinks(), isArray());
+        assertThat(repr.getExtensions(), isMap());
+    }
+
+
+    @Test
+    public void linksToSelf() throws Exception {
+        // given
+        DomainObjectRepresentation repr = givenRepresentation("simples");
+
+        // when, then
+        assertThat(repr, isFollowableLinkToSelf(client));
+    }
+
+
+    @Ignore("up to here")
+    @Test
+    public void linksToDomainServiceResources() throws Exception {
+        
+        // given
+        DomainObjectRepresentation repr = givenRepresentation("simples");
+
+    }
+
+    @Test
+    public void notFound() throws Exception {
+
+        // when
+        Response resp = resource.service("nonExistentServiceId");
+        RestfulResponse<DomainObjectRepresentation> jsonResp = RestfulResponse.of(resp, DomainObjectRepresentation.class);
+        
+        // then
+        assertThat(jsonResp.getStatus(), is(HttpStatusCode.NOT_FOUND));
+    }
+
+
+    private DomainObjectRepresentation givenRepresentation(String serviceId) throws JsonParseException, JsonMappingException, IOException {
+        return RepresentationMatchers.entityOf(resource.service(serviceId), DomainObjectRepresentation.class);
+    }
+
+
+}
+    
\ No newline at end of file

Copied: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_services.java (from r1165980, incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_services.java?p2=incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_services.java&p1=incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java&r1=1165980&r2=1166100&rev=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/DomainServiceResourceTest_services.java Wed Sep  7 10:40:19 2011
@@ -1,13 +1,10 @@
 package org.apache.isis.viewer.json.tck;
 
-import static org.apache.isis.core.commons.matchers.IsisMatchers.greaterThan;
-import static org.apache.isis.core.commons.matchers.IsisMatchers.matches;
 import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
 import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isArray;
 import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isFollowableLinkToSelf;
 import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isLink;
 import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isMap;
-import static org.hamcrest.CoreMatchers.*;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
@@ -25,18 +22,16 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.applib.RestfulResponse;
 import org.apache.isis.viewer.json.applib.blocks.Link;
 import org.apache.isis.viewer.json.applib.blocks.Method;
-import org.apache.isis.viewer.json.applib.domainobjects.DomainObjectRepresentation;
 import org.apache.isis.viewer.json.applib.domainobjects.DomainServiceResource;
 import org.apache.isis.viewer.json.applib.domainobjects.DomainServicesRepresentation;
 import org.codehaus.jackson.JsonParseException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 
 
-public class DomainServiceResourceTest {
+public class DomainServiceResourceTest_services {
 
     @Rule
     public IsisWebServerRule webServerRule = new IsisWebServerRule();
@@ -82,10 +77,10 @@ public class DomainServiceResourceTest {
     @Test
     public void linksToSelf() throws Exception {
         // given
-        DomainServicesRepresentation servicesRepr = givenRepresentation();
+        DomainServicesRepresentation repr = givenRepresentation();
 
         // when, then
-        assertThat(servicesRepr, isFollowableLinkToSelf(client));
+        assertThat(repr, isFollowableLinkToSelf(client));
     }
 
 
@@ -94,8 +89,11 @@ public class DomainServiceResourceTest {
         
         // given
         DomainServicesRepresentation repr = givenRepresentation();
-
+        
+        // when
         JsonRepresentation values = repr.getValues();
+        
+        // then
         for (Link link : values.arrayIterable(Link.class)) {
             Response followResp = client.follow(link);
             RestfulResponse<JsonRepresentation> followJsonResp = RestfulResponse.of(followResp, JsonRepresentation.class);

Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java Wed Sep  7 10:40:19 2011
@@ -27,6 +27,22 @@ public class RepresentationMatchers {
     }
 
 
+//    public static Matcher<String> matchers(final Method method) {
+//        return new TypeSafeMatcher<Link>() {
+//
+//            @Override
+//            public void describeTo(Description description) {
+//                description.appendText("link with method " + method.name());
+//            }
+//
+//            @Override
+//            public boolean matchesSafely(Link item) {
+//                return item != null && item.getMethod() == method;
+//            }
+//        };
+//    }
+
+
     public static <T extends JsonRepresentation> Matcher<T> isMap() {
         return new TypeSafeMatcher<T>() {
 
@@ -57,6 +73,21 @@ public class RepresentationMatchers {
         };
     }
 
+    public static <T extends JsonRepresentation> Matcher<T> isString() {
+        return new TypeSafeMatcher<T>() {
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("string");
+            }
+
+            @Override
+            public boolean matchesSafely(T item) {
+                return item != null && item.isValue() && item.getJsonNode().isTextual();
+            }
+        };
+    }
+
     public static Matcher<Link> isLink(final Method method) {
         return new TypeSafeMatcher<Link>() {
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.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/RepresentationBuilder.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java Wed Sep  7 10:40:19 2011
@@ -37,7 +37,7 @@ public abstract class RepresentationBuil
 
     public T withSelf(String href) {
         representation.put("self", LinkBuilder.newBuilder(resourceContext, "self", href).build());
-        return asT(this);
+        return cast(this);
     }
 
     public RepresentationBuilder<T> withLinks() {
@@ -49,7 +49,7 @@ public abstract class RepresentationBuil
             throw new IllegalArgumentException("links must be a list");
         }
         representation.put("links", links);
-        return asT(this);
+        return cast(this);
     }
 
     public T withExtensions() {
@@ -61,11 +61,11 @@ public abstract class RepresentationBuil
             throw new IllegalArgumentException("extensions must be a map");
         }
         representation.put("extensions", extensions);
-        return asT(this);
+        return cast(this);
     }
 
     @SuppressWarnings("unchecked")
-    private static <T extends RepresentationBuilder<T>> T asT(RepresentationBuilder<T> builder) {
+    protected static <T extends RepresentationBuilder<T>> T cast(RepresentationBuilder<T> builder) {
         return (T) builder;
     }
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.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/AbstractMemberRepBuilder.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java Wed Sep  7 10:40:19 2011
@@ -42,34 +42,25 @@ public abstract class AbstractMemberRepB
         this.objectMember = objectMember;
     }
 
-    protected void putSelfIfRequired(MemberRepType memberRepType) {
-        if(!memberRepType.isStandalone()) {
-            return;
-        }
-        
-        JsonRepresentation selfRep = JsonRepresentation.newMap();
+    public R withSelf() {
         String url = AbstractMemberRepBuilder.urlForMember(objectAdapter, memberType, objectMember, getOidStringifier());
-        JsonRepresentation memberLinkRep = LinkBuilder.newBuilder(resourceContext, "member", url).build();
-        selfRep.put("link", memberLinkRep);
+        JsonRepresentation self = LinkBuilder.newBuilder(resourceContext, "self", url).build();
+        representation.put("self", self);
         
-        JsonRepresentation linkTo = DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "object", objectAdapter, getOidStringifier()).build();
-        selfRep.put("object", linkTo);
-
-        representation.put("self", selfRep);
+        return cast(this);
     }
 
-    public R withMemberType() {
+    protected void putMemberType() {
         representation.put("memberType", memberType.name().toLowerCase());
-        return (R) this;
     }
 
-    protected void putIdRep() {
+    protected void putId() {
         representation.put(memberType.key(), objectMember.getId());
     }
 
-    protected void putMutatorsIfRequired(MemberRepType memberRepType) {
-        if(!memberRepType.isStandalone() || usability().isVetoed()) {
-            return;
+    public R withMutatorsIfEnabled() {
+        if(!usability().isVetoed()) {
+            return cast(this);
         }
         Map<String, MutatorSpec> mutators = memberType.getMutators();
         for(String mutator: mutators.keySet()) {
@@ -85,6 +76,7 @@ public abstract class AbstractMemberRepB
                 representation.put(mutator, detailsLink);
             }
         }
+        return cast(this);
     }
 
     private JsonRepresentation mutatorArgs(MutatorSpec mutatorSpec) {
@@ -103,12 +95,9 @@ public abstract class AbstractMemberRepB
 	}
 
     
-    protected void putValueIfRequired(MemberRepType memberRepType) {
-        if(!memberRepType.hasValueFor(memberType)) {
-            return;
-        } 
+    protected R withValue() {
         representation.put("value", valueRep());
-        return;
+        return cast(this);
     }
 
     /**
@@ -118,18 +107,17 @@ public abstract class AbstractMemberRepB
         return null;
     }
 
-    protected final void putDisabledReason() {
+    protected final void putDisabledReasonIfDisabled() {
         String disabledReasonRep = usability().getReason();
         representation.put("disabledReason", disabledReasonRep);
     }
 
-    protected void putDetailsIfRequired(MemberRepType memberRepType) {
-        if(!memberRepType.isInline()) {
-            return;
-        } 
+    public R withDetails() {
         String urlForMember = urlForMember();
         JsonRepresentation detailsLink = LinkBuilder.newBuilder(resourceContext, memberType.name().toLowerCase(), urlForMember).build();
-        representation.put("details", detailsLink);
+        representation.put(memberType.getDetailsRel(), detailsLink);
+        
+        return cast(this);
     }
 
     /**

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.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/ActionRepBuilder.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java Wed Sep  7 10:40:19 2011
@@ -35,34 +35,43 @@ public class ActionRepBuilder extends Ab
 
     protected ActionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
         super(resourceContext, objectAdapter, MemberType.ACTION, objectAction);
-        MemberRepType memberRepType = MemberRepType.STANDALONE;
-        putSelfIfRequired(memberRepType);
-        putContributedByIfRequired();
         
-        putIdRep();
-        withMemberType();
-        representation.put("actionType", objectMember.getType());
+        putId();
+        putMemberType();
+        putNumParameters();
+
+        putDisabledReasonIfDisabled();
+        withMutatorsIfEnabled();
+        
+        putExtensionsForAction();
+        putLinksForAction(resourceContext);
+    }
+
+    private void putLinksForAction(ResourceContext resourceContext) {
+        JsonRepresentation links = JsonRepresentation.newArray();
+        if(objectMember.isContributed()) {
+            ObjectAdapter serviceAdapter = contributingServiceAdapter();
+            JsonRepresentation contributedByLink = DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "object", serviceAdapter, getOidStringifier()).build();
+            links.put("contributedBy", contributedByLink);
+        }
+
+        withLinks(links);
+    }
+
+    private void putExtensionsForAction() {
+        JsonRepresentation extensions = JsonRepresentation.newMap();
+        extensions.put("actionType", objectMember.getType());
+        withExtensions(extensions );
+    }
+
+    protected void putNumParameters() {
         representation.put("numParameters", objectMember.getParameterCount());
-        putParameterDetailsIfRequired(memberRepType);
-        putValueIfRequired(memberRepType);
-        putDisabledReason();
-        putMutatorsIfRequired(memberRepType);
-        putDetailsIfRequired(memberRepType);
     }
 
     public JsonRepresentation build() {
         return representation;
     }
     
-	private void putContributedByIfRequired() {
-    	if(!objectMember.isContributed()) {
-    		return;
-    	}
-    	ObjectAdapter serviceAdapter = contributingServiceAdapter();
-        JsonRepresentation contributedByLink = DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "object", serviceAdapter, getOidStringifier()).build();
-		representation.put("contributedBy", contributedByLink);
-	}
-
 	private ObjectAdapter contributingServiceAdapter() {
     	ObjectSpecification serviceType = objectMember.getOnType();
     	List<ObjectAdapter> serviceAdapters = getPersistenceSession().getServices();
@@ -75,16 +84,14 @@ public class ActionRepBuilder extends Ab
     	throw new IllegalStateException("Unable to locate contributing service");
 	}
 
-    private void putParameterDetailsIfRequired(MemberRepType memberRepType) {
-    	if (!memberRepType.isStandalone()) {
-    		return;
-    	} 
+    public ActionRepBuilder withParameterDetails() {
     	List<Object> parameters = Lists.newArrayList();
 		for (int i=0; i< objectMember.getParameterCount(); i++) {
 			ObjectActionParameter param = objectMember.getParameters().get(i);
 			parameters.add(paramDetails(param));
 		}
 		representation.put("parameters", parameters);
+		return this;
 	}
 
 	private Object paramDetails(ObjectActionParameter param) {

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.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/CollectionRepBuilder.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java Wed Sep  7 10:40:19 2011
@@ -37,15 +37,12 @@ public class CollectionRepBuilder extend
     public CollectionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
         super(resourceContext, objectAdapter, MemberType.COLLECTION, otma);
 
-        MemberRepType memberRepType = MemberRepType.STANDALONE;
-
-        putSelfIfRequired(memberRepType);
-        putIdRep();
-        withMemberType();
-        putValueIfRequired(memberRepType);
-        putDisabledReason();
-        putMutatorsIfRequired(memberRepType);
-        putDetailsIfRequired(memberRepType);
+        putId();
+        putMemberType();
+        putDisabledReasonIfDisabled();
+        
+        withLinks();
+        withExtensions();
     }
 
     public JsonRepresentation build() {

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.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/DomainObjectRepBuilder.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java Wed Sep  7 10:40:19 2011
@@ -70,7 +70,7 @@ public class DomainObjectRepBuilder exte
     private DomainObjectRepBuilder withMembers(ObjectAdapter objectAdapter) {
         JsonRepresentation members = JsonRepresentation.newArray();
         List<ObjectAssociation> associations = objectAdapter.getSpecification().getAssociations();
-        addPropertiesAndCollections(objectAdapter, members, associations);
+        addAssociations(objectAdapter, members, associations);
         
         List<ObjectAction> actions = objectAdapter.getSpecification().getObjectActions(Contributed.INCLUDED);
         addActions(objectAdapter, actions, members);
@@ -78,7 +78,7 @@ public class DomainObjectRepBuilder exte
         return this;
     }
 
-    private void addPropertiesAndCollections(ObjectAdapter objectAdapter, JsonRepresentation members, List<ObjectAssociation> associations) {
+    private void addAssociations(ObjectAdapter objectAdapter, JsonRepresentation members, List<ObjectAssociation> associations) {
         for (ObjectAssociation assoc : associations) {
             Consent visibility = assoc.isVisible(getSession(), objectAdapter);
             if(!visibility.isAllowed()) {

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java Wed Sep  7 10:40:19 2011
@@ -36,7 +36,7 @@ import com.google.common.collect.Immutab
 
 public enum MemberType {
 
-    PROPERTY("properties/", ImmutableMap.of(
+    PROPERTY("properties/", "propertyDetails", ImmutableMap.of(
             "modify", MutatorSpec.of(PropertyValidateFacet.class, PropertySetterFacet.class, HttpMethod.PUT, BodyArgs.ONE),
             "clear", MutatorSpec.of(PropertyValidateFacet.class, PropertyClearFacet.class, HttpMethod.DELETE, BodyArgs.NONE)
             )) {
@@ -45,7 +45,7 @@ public enum MemberType {
             return objectMember.getSpecification();
         }
     },
-    COLLECTION("collections/", ImmutableMap.of(
+    COLLECTION("collections/", "collectionDetails", ImmutableMap.of(
             "addTo", MutatorSpec.of(CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.PUT, BodyArgs.ONE),
             "removeFrom", MutatorSpec.of(CollectionValidateRemoveFromFacet.class, CollectionRemoveFromFacet.class, HttpMethod.DELETE, BodyArgs.ONE)
             )) {
@@ -54,7 +54,7 @@ public enum MemberType {
             return objectMember.getSpecification();
         }
     },
-    ACTION("actions/", ImmutableMap.of(
+    ACTION("actions/", "actionDetails", ImmutableMap.of(
             "invoke", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.POST, BodyArgs.MANY, "invoke")
             )) {
         @Override
@@ -67,8 +67,11 @@ public enum MemberType {
     private final Map<String, MutatorSpec> mutators;
     
     private final String urlPart;
-    private MemberType(String urlPart, Map<String, MutatorSpec> mutators) {
+    private final String detailsRel;
+    
+    private MemberType(String urlPart, String detailsRel, Map<String, MutatorSpec> mutators) {
         this.urlPart = urlPart;
+        this.detailsRel = detailsRel;
         this.mutators = mutators;
     }
 
@@ -110,4 +113,8 @@ public enum MemberType {
 						COLLECTION;
 	}
 
+    public String getDetailsRel() {
+        return detailsRel;
+    }
+
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.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/PropertyRepBuilder.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.java Wed Sep  7 10:40:19 2011
@@ -35,16 +35,12 @@ public class PropertyRepBuilder extends 
     public PropertyRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
         super(resourceContext, objectAdapter, MemberType.PROPERTY, otoa);
 
-        MemberRepType memberRepType = MemberRepType.STANDALONE;
-
-        putSelfIfRequired(memberRepType);
-        putIdRep();
-        withMemberType();
-        putValueIfRequired(memberRepType);
-        putDisabledReason();
-        putChoices();
-        putMutatorsIfRequired(memberRepType);
-        putDetailsIfRequired(memberRepType);
+        putId();
+        putMemberType();
+        putDisabledReasonIfDisabled();
+        
+        withLinks();
+        withExtensions();
     }
 
     public JsonRepresentation build() {
@@ -61,11 +57,12 @@ public class PropertyRepBuilder extends 
         return DomainObjectRepBuilder.valueOrRef(resourceContext, valueAdapter, objectMember.getSpecification(), getOidStringifier(), getLocalization());
     }
 
-    private void putChoices() {
+    public PropertyRepBuilder withChoices() {
 		Object propertyChoices = propertyChoices();
 		if(propertyChoices != null) {
 			representation.put("choices", propertyChoices);
 		}
+		return this;
 	}
 
 	private Object propertyChoices() {

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/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/domainservices/DomainServiceResourceServerside.java?rev=1166100&r1=1166099&r2=1166100&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java Wed Sep  7 10:40:19 2011
@@ -41,6 +41,7 @@ import org.apache.isis.viewer.json.viewe
 import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainObjectListRepBuilder;
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainObjectRepBuilder;
+import org.jboss.resteasy.annotations.ClientResponseType;
 
 @Path("/services")
 public class DomainServiceResourceServerside extends ResourceAbstract implements