@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)); }
@Test public void simple_multiplePaths() throws Exception { final List<List<String>> links = asListOfLists("a.b.c,x.y.z"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); LinkFollowSpecs followA = linkFollower.follow("a"); assertThat(followA.isFollowing(), is(true)); assertThat(followA.isTerminated(), is(false)); LinkFollowSpecs followX = linkFollower.follow("x"); assertThat(followX.isFollowing(), is(true)); assertThat(followX.isTerminated(), is(false)); LinkFollowSpecs followXY = followX.follow("y"); assertThat(followXY.isFollowing(), is(true)); assertThat(followXY.isTerminated(), is(false)); LinkFollowSpecs followXYZ = followXY.follow("z"); assertThat(followXYZ.isFollowing(), is(true)); assertThat(followXYZ.isTerminated(), is(false)); LinkFollowSpecs followXYZQ = followXY.follow("q"); assertThat(followXYZQ.isFollowing(), is(false)); assertThat(followXYZQ.isTerminated(), is(true)); }
@Test public void simple_multiplePaths() throws Exception { final List<List<String>> links = asListOfLists("a.b.c,x.y.z"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); LinkFollowSpecs followA = linkFollower.follow("a"); assertThat(followA.isFollowing(), is(true)); assertThat(followA.isTerminated(), is(false)); LinkFollowSpecs followX = linkFollower.follow("x"); assertThat(followX.isFollowing(), is(true)); assertThat(followX.isTerminated(), is(false)); LinkFollowSpecs followXY = followX.follow("y"); assertThat(followXY.isFollowing(), is(true)); assertThat(followXY.isTerminated(), is(false)); LinkFollowSpecs followXYZ = followXY.follow("z"); assertThat(followXYZ.isFollowing(), is(true)); assertThat(followXYZ.isTerminated(), is(false)); LinkFollowSpecs followXYZQ = followXY.follow("q"); assertThat(followXYZQ.isFollowing(), is(false)); assertThat(followXYZQ.isTerminated(), is(true)); }
@Test public void multiplePaths_withRelFullCriteria() throws Exception { final List<List<String>> links = asListOfLists("links[rel=urn:org.restfulobjects:rels/details;action=foo].x,links[rel=urn:org.restfulobjects:rels/details;action=bar].y"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); LinkFollowSpecs followRelVersion = linkFollower.follow("links[rel=urn:org.restfulobjects:rels/details;action=foo]"); assertThat(followRelVersion.isFollowing(), is(true)); assertThat(followRelVersion.isTerminated(), is(false)); assertThat(followRelVersion.follow("x").isFollowing(), is(true)); LinkFollowSpecs followRelUser = linkFollower.follow("links[rel=urn:org.restfulobjects:rels/details;action=bar]"); assertThat(followRelUser.isFollowing(), is(true)); assertThat(followRelUser.isTerminated(), is(false)); assertThat(followRelUser.follow("y").isFollowing(), is(true)); }
@Test public void multiplePaths_withCriteria() throws Exception { final List<List<String>> links = asListOfLists("links[rel=urn:org.restfulobjects:rels/version].x,links[rel=urn:org.restfulobjects:rels/user].y"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); LinkFollowSpecs followRelVersion = linkFollower.follow("links[rel=urn:org.restfulobjects:rels/version]"); assertThat(followRelVersion.isFollowing(), is(true)); assertThat(followRelVersion.isTerminated(), is(false)); assertThat(followRelVersion.follow("x").isFollowing(), is(true)); LinkFollowSpecs followRelUser = linkFollower.follow("links[rel=urn:org.restfulobjects:rels/user]"); assertThat(followRelUser.isFollowing(), is(true)); assertThat(followRelUser.isTerminated(), is(false)); assertThat(followRelUser.follow("y").isFollowing(), is(true)); }
@Test public void multiplePaths_withCriteria() throws Exception { final List<List<String>> links = asListOfLists("links[rel=urn:org.restfulobjects:rels/version].x,links[rel=urn:org.restfulobjects:rels/user].y"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); LinkFollowSpecs followRelVersion = linkFollower.follow("links[rel=urn:org.restfulobjects:rels/version]"); assertThat(followRelVersion.isFollowing(), is(true)); assertThat(followRelVersion.isTerminated(), is(false)); assertThat(followRelVersion.follow("x").isFollowing(), is(true)); LinkFollowSpecs followRelUser = linkFollower.follow("links[rel=urn:org.restfulobjects:rels/user]"); assertThat(followRelUser.isFollowing(), is(true)); assertThat(followRelUser.isTerminated(), is(false)); assertThat(followRelUser.follow("y").isFollowing(), is(true)); }
@Test public void multiplePaths_withRelFullCriteria() throws Exception { final List<List<String>> links = asListOfLists("links[rel=urn:org.restfulobjects:rels/details;action=foo].x,links[rel=urn:org.restfulobjects:rels/details;action=bar].y"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); LinkFollowSpecs followRelVersion = linkFollower.follow("links[rel=urn:org.restfulobjects:rels/details;action=foo]"); assertThat(followRelVersion.isFollowing(), is(true)); assertThat(followRelVersion.isTerminated(), is(false)); assertThat(followRelVersion.follow("x").isFollowing(), is(true)); LinkFollowSpecs followRelUser = linkFollower.follow("links[rel=urn:org.restfulobjects:rels/details;action=bar]"); assertThat(followRelUser.isFollowing(), is(true)); assertThat(followRelUser.isTerminated(), is(false)); assertThat(followRelUser.follow("y").isFollowing(), is(true)); }
@Test public void notMatching() throws Exception { final List<List<String>> links = asListOfLists("a.b.c"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); assertThat(linkFollower.follow("x").isFollowing(), is(false)); assertThat(linkFollower.follow("x").isTerminated(), is(true)); }
@Test public void simple() throws Exception { final List<List<String>> links = asListOfLists("a.b.c"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); assertThat(linkFollower.follow("a").isFollowing(), is(true)); assertThat(linkFollower.follow("a").isTerminated(), is(false)); }
@Test public void notMatching() throws Exception { final List<List<String>> links = asListOfLists("a.b.c"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); assertThat(linkFollower.follow("x").isFollowing(), is(false)); assertThat(linkFollower.follow("x").isTerminated(), is(true)); }
@Test public void simple() throws Exception { final List<List<String>> links = asListOfLists("a.b.c"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); assertThat(linkFollower.follow("a").isFollowing(), is(true)); assertThat(linkFollower.follow("a").isTerminated(), is(false)); }
@Test public void multiplePaths_withRelSimplifiedCriteria() throws Exception { final List<List<String>> links = asListOfLists("links[rel=urn:org.restfulobjects:rels/details;action=foo].x,links[rel=urn:org.restfulobjects:rels/details;action=bar].y"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); LinkFollowSpecs followRelVersion = linkFollower.follow("links[rel=urn:org.restfulobjects:rels/details]"); assertThat(followRelVersion.isFollowing(), is(true)); assertThat(followRelVersion.isTerminated(), is(false)); assertThat(followRelVersion.follow("x").isFollowing(), is(true)); }
@Test public void multiplePaths_withRelSimplifiedCriteria() throws Exception { final List<List<String>> links = asListOfLists("links[rel=urn:org.restfulobjects:rels/details;action=foo].x,links[rel=urn:org.restfulobjects:rels/details;action=bar].y"); final LinkFollowSpecs linkFollower = LinkFollowSpecs.create(links); LinkFollowSpecs followRelVersion = linkFollower.follow("links[rel=urn:org.restfulobjects:rels/details]"); assertThat(followRelVersion.isFollowing(), is(true)); assertThat(followRelVersion.isTerminated(), is(false)); assertThat(followRelVersion.follow("x").isFollowing(), is(true)); }
private void addValue(final LinkFollowSpecs linkFollower) { final ObjectAdapter valueAdapter = objectMember.get(objectAdapter, getInteractionInitiatedBy()); if (valueAdapter == null) { return; } 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(); for (final ObjectAdapter elementAdapter : facet.iterable(valueAdapter)) { final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.VALUE, elementAdapter); if(eagerlyRender) { final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), followHref, JsonRepresentation.newMap() ); renderer.with(elementAdapter); if(mode.isEventSerialization()) { renderer.asEventSerialization(); } valueLinkBuilder.withValue(renderer.render()); } list.add(valueLinkBuilder.build()); } representation.mapPut("value", list); }
@Override public JsonRepresentation render() { if(representation == null) { return null; } renderMemberContent(); 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(followValue); } if(!mode.isEventSerialization()) { putDisabledReasonIfDisabled(); } if (mode.isStandalone() || mode.isMutated()) { addExtensionsIsisProprietaryChangedObjects(); } return representation; }
boolean eagerlyRender = (renderFacet != null && renderFacet.value() == Type.EAGERLY && rendererContext.canEagerlyRender(valueAdapter)) || (linkFollower != null && !linkFollower.isTerminated());