You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by mg...@apache.org on 2015/11/12 21:02:07 UTC

[25/50] [abbrv] isis git commit: ISIS-1232: resurrecting support for x-ro-follow-links (for table grids, at least)

ISIS-1232: resurrecting support for x-ro-follow-links (for table grids, at least)


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/0df5504a
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/0df5504a
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/0df5504a

Branch: refs/heads/ISIS-1224-select2-v4
Commit: 0df5504adca6539b36f57fc3fff615e2c0bd84b5
Parents: de21335
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Nov 7 10:20:40 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat Nov 7 10:20:40 2015 +0000

----------------------------------------------------------------------
 .../domainobjects/DomainObjectReprRenderer.java    | 17 ++++++++++-------
 .../ObjectCollectionReprRenderer.java              | 12 +++++++-----
 .../domainobjects/ObjectPropertyReprRenderer.java  | 12 ++++++++----
 .../rendering/LinkFollowSpecsTest_follow.java      | 14 ++++++++++++++
 .../restfulobjects/server/ResourceContext.java     |  8 +++++---
 5 files changed, 44 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0df5504a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index d96a01e..e1d0ac2 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -152,7 +152,9 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         }
 
         // members
-        withMembers(objectAdapter);
+        if(!mode.isUpdatePropertiesLinkArgs()) {
+            withMembers(objectAdapter);
+        }
 
         // described by
         if (mode.includeDescribedBy() && !rendererContext.suppressDescribedByLinks()) {
@@ -225,7 +227,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         addProperties(objectAdapter, appendTo, associations);
 
         if(!rendererContext.objectPropertyValuesOnly()) {
-            if (!mode.isArgs()) {
+            if (!mode.isArgs() ) {
                 addCollections(objectAdapter, appendTo, associations);
             }
 
@@ -241,7 +243,6 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
     }
 
     private void addProperties(final ObjectAdapter objectAdapter, final JsonRepresentation members, final List<ObjectAssociation> associations) {
-        final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("members");
         for (final ObjectAssociation assoc : associations) {
 
             if (mode.checkVisibility()) {
@@ -255,7 +256,8 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
             }
 
             final OneToOneAssociation property = (OneToOneAssociation) assoc;
-            final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(getRendererContext(), linkFollower, property.getId(), JsonRepresentation.newMap());
+            final LinkFollowSpecs linkFollowerForProp = getLinkFollowSpecs().follow("members[" + property.getId() + "]");
+            final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(getRendererContext(), linkFollowerForProp, property.getId(), JsonRepresentation.newMap());
             renderer.with(new ObjectAndProperty(objectAdapter, property)).usingLinkTo(linkToBuilder);
 
             if (mode.isArgs()) {
@@ -274,7 +276,6 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
     }
 
     private void addCollections(final ObjectAdapter objectAdapter, final JsonRepresentation members, final List<ObjectAssociation> associations) {
-        final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("members");
         for (final ObjectAssociation assoc : associations) {
 
             if (mode.checkVisibility()) {
@@ -290,7 +291,9 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
 
             final OneToManyAssociation collection = (OneToManyAssociation) assoc;
 
-            final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(getRendererContext(), linkFollower, collection.getId(), JsonRepresentation.newMap());
+            final LinkFollowSpecs linkFollowerForColl = getLinkFollowSpecs().follow(
+                    "members[" + collection.getId() + "]");
+            final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(getRendererContext(), linkFollowerForColl, collection.getId(), JsonRepresentation.newMap());
 
             renderer.with(new ObjectAndCollection(objectAdapter, collection)).usingLinkTo(linkToBuilder);
             if(mode.isEventSerialization()) {
@@ -364,7 +367,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), null, JsonRepresentation.newMap());
         final JsonRepresentation domainObjectRepr = renderer.with(objectAdapter).asUpdatePropertiesLinkArguments().render();
 
-        if(!rendererContext.suppressUpdateLink()) {
+        if(!getRendererContext().suppressUpdateLink()) {
             final LinkBuilder updateLinkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.UPDATE.getName(), RepresentationType.DOMAIN_OBJECT, "objects/%s/%s", getDomainType(), getInstanceId()).withHttpMethod(RestfulHttpMethod.PUT).withArguments(domainObjectRepr);
             getLinks().arrayAdd(updateLinkBuilder.build());
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/0df5504a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
index 09a9214..22de842 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
@@ -54,10 +54,11 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
 
         renderMemberContent();
 
-        boolean eagerlyRender = rendererContext.honorUiHints() && renderEagerly();
+        final LinkFollowSpecs followValue = getLinkFollowSpecs().follow("value");
+        boolean eagerlyRender = rendererContext.honorUiHints() && renderEagerly() || !followValue.isTerminated();
 
         if ((mode.isInline() && eagerlyRender) || mode.isStandalone() || mode.isMutated() || mode.isEventSerialization() || !objectAdapter.representsPersistent()) {
-            addValue();
+            addValue(followValue);
         }
         if(!mode.isEventSerialization()) {
             putDisabledReasonIfDisabled();
@@ -79,13 +80,14 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
     // value
     // ///////////////////////////////////////////////////
 
-    private void addValue() {
+    private void addValue(final LinkFollowSpecs linkFollower) {
         final ObjectAdapter valueAdapter = objectMember.get(objectAdapter, getInteractionInitiatedBy());
         if (valueAdapter == null) {
             return;
         }
 
-        boolean eagerlyRender = rendererContext.honorUiHints() && renderEagerly(valueAdapter);
+        final LinkFollowSpecs followHref = linkFollower.follow("href");
+        boolean eagerlyRender = rendererContext.honorUiHints() && renderEagerly(valueAdapter) || !followHref.isTerminated();
 
         final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(valueAdapter);
         final List<JsonRepresentation> list = Lists.newArrayList();
@@ -93,7 +95,7 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
 
             final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.VALUE, elementAdapter);
             if(eagerlyRender) {
-                final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), getLinkFollowSpecs(), JsonRepresentation.newMap());
+                final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), followHref, JsonRepresentation.newMap());
                 renderer.with(elementAdapter);
                 if(mode.isEventSerialization()) {
                     renderer.asEventSerialization();

http://git-wip-us.apache.org/repos/asf/isis/blob/0df5504a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index 72fcc07..8e77441 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -61,7 +61,10 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
     public JsonRepresentation render() {
 
         renderMemberContent();
-        addValue();
+
+        final LinkFollowSpecs followValue = getLinkFollowSpecs().follow("value");
+
+        addValue(followValue);
 
         putDisabledReasonIfDisabled();
 
@@ -77,7 +80,7 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
     // value
     // ///////////////////////////////////////////////////
 
-    private Object addValue() {
+    private Object addValue(final LinkFollowSpecs linkFollower) {
         final ObjectAdapter valueAdapter = objectMember.get(objectAdapter, getInteractionInitiatedBy());
         
         // use the runtime type if we have a value, else the compile time type of the member otherwise
@@ -112,7 +115,8 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
         }
 
         final RenderFacet renderFacet = objectMember.getFacet(RenderFacet.class);
-        boolean eagerlyRender = renderFacet != null && renderFacet.value() == Type.EAGERLY && rendererContext.canEagerlyRender(valueAdapter);
+        boolean eagerlyRender =
+                renderFacet != null && renderFacet.value() == Type.EAGERLY && rendererContext.canEagerlyRender(valueAdapter) || !linkFollower.isTerminated();
 
         if(valueAdapter == null) {
             final NullNode value = NullNode.getInstance();
@@ -124,7 +128,7 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
             
             final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.VALUE, valueAdapter).withTitle(title);
             if(eagerlyRender) {
-                final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(rendererContext, getLinkFollowSpecs(), JsonRepresentation.newMap());
+                final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(rendererContext, linkFollower, JsonRepresentation.newMap());
                 renderer.with(valueAdapter);
                 if(mode.isEventSerialization()) {
                     renderer.asEventSerialization();

http://git-wip-us.apache.org/repos/asf/isis/blob/0df5504a/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/LinkFollowSpecsTest_follow.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/LinkFollowSpecsTest_follow.java b/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/LinkFollowSpecsTest_follow.java
index 97b447c..41f7789 100644
--- a/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/LinkFollowSpecsTest_follow.java
+++ b/core/viewer-restfulobjects-rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/LinkFollowSpecsTest_follow.java
@@ -197,6 +197,20 @@ public class LinkFollowSpecsTest_follow {
         assertThat(followRelVersion.follow("x").isFollowing(), is(true));
     }
 
+    @Test
+    public void example_of_eager_loading_of_collection() throws Exception {
+        final List<List<String>> links = asListOfLists("members[children].value");
+
+        final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links);
+
+        LinkFollowSpecs followMembers = linkFollower.follow("members[children]");
+        assertThat(followMembers.isFollowing(), is(true));
+        assertThat(followMembers.isTerminated(), is(false));
+
+        assertThat(followMembers.follow("value").isFollowing(), is(true));
+        assertThat(followMembers.follow("value").isTerminated(), is(false));
+    }
+
 
     private List<List<String>> asListOfLists(final String string) {
         return Parser.forListOfListOfStrings().valueOf(string);

http://git-wip-us.apache.org/repos/asf/isis/blob/0df5504a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
index ae59797..149d638 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
@@ -197,12 +197,14 @@ public class ResourceContext implements RendererContext5 {
             final JsonRepresentation map = JsonRepresentation.newMap();
             for(String paramName: params.keySet()) {
                 String paramValue = params.get(paramName)[0];
+                // this is rather hacky :-(
+                final String key = paramName.startsWith("x-ro") ? paramName : paramName + ".value";
                 try {
-                    // this is rather hacky
+                    // and this is even more hacky :-(
                     int paramValueAsInt = Integer.parseInt(paramValue);
-                    map.mapPut(paramName+".value", paramValueAsInt);
+                    map.mapPut(key, paramValueAsInt);
                 } catch(Exception ex) {
-                    map.mapPut(paramName+".value", stripQuotes(paramValue));
+                    map.mapPut(key, stripQuotes(paramValue));
                 }
             }
             return map;