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;