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 2015/11/29 16:27:52 UTC
isis git commit: ISIS-1274: object representation now generates a
simplified map for the properties. Also puts the original repr under a
'11432ro' json-prop. Still working on simplified map of collections
Repository: isis
Updated Branches:
refs/heads/ISIS-1274 0bd001f92 -> a4f04eb46
ISIS-1274: object representation now generates a simplified map for the properties. Also puts the original repr under a '11432ro' json-prop. Still working on simplified map of collections
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/a4f04eb4
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/a4f04eb4
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/a4f04eb4
Branch: refs/heads/ISIS-1274
Commit: a4f04eb461736dfd6acc63d473836535d990eebe
Parents: 0bd001f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun Nov 29 15:26:13 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sun Nov 29 15:26:13 2015 +0000
----------------------------------------------------------------------
.../rendering/RendererContext2.java | 2 +-
.../rendering/ReprRendererAbstract.java | 6 +-
.../restfulobjects/rendering/Responses.java | 40 +++-
.../AbstractObjectMemberReprRenderer.java | 5 +-
.../domainobjects/ActionResultReprRenderer.java | 3 +-
.../domainobjects/DomainObjectReprRenderer.java | 22 +-
.../domainobjects/ListReprRenderer.java | 3 +-
.../domainobjects/ObjectActionReprRenderer.java | 9 +-
.../ObjectCollectionReprRenderer.java | 10 +-
.../ObjectPropertyReprRenderer.java | 12 +-
.../AbstractTypeFeatureReprRenderer.java | 4 +-
.../domaintypes/DomainTypeReprRenderer.java | 6 +-
...NegotiationServiceForRestfulObjectsV1_0.java | 173 --------------
.../service/RepresentationService.java | 8 +-
.../RepresentationServiceForRestfulObjects.java | 1 +
.../ContentNegotiationServiceAbstract.java | 10 +-
...NegotiationServiceForRestfulObjectsV1_0.java | 233 +++++++++++++++++++
.../ContentNegotiationServiceSimplified.java | 93 ++++++--
.../restfulobjects/server/ResourceContext.java | 26 +--
.../server/resources/DomainResourceHelper.java | 6 +-
20 files changed, 410 insertions(+), 262 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext2.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext2.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext2.java
index 6c64e15..fb7e596 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext2.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext2.java
@@ -27,6 +27,6 @@ import javax.ws.rs.core.MediaType;
*/
public interface RendererContext2 extends RendererContext {
- public List<MediaType> getAcceptableMediaTypes();
+ List<MediaType> getAcceptableMediaTypes();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
index 6b94aef..f3c2c0c 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
@@ -48,7 +48,11 @@ public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>,
protected boolean includesSelf;
- public ReprRendererAbstract(final RendererContext rendererContext, final LinkFollowSpecs linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
+ public ReprRendererAbstract(
+ final RendererContext rendererContext,
+ final LinkFollowSpecs linkFollower,
+ final RepresentationType representationType,
+ final JsonRepresentation representation) {
this.rendererContext = rendererContext;
this.linkFollower = asProvidedElseCreate(linkFollower);
this.representationType = representationType;
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Responses.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Responses.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Responses.java
index e4420c1..0d4ddac 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Responses.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Responses.java
@@ -23,6 +23,7 @@ import javax.ws.rs.core.Response;
import org.joda.time.DateTime;
import org.joda.time.format.ISODateTimeFormat;
import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
import org.apache.isis.viewer.restfulobjects.rendering.util.JsonWriterUtil;
@@ -34,13 +35,44 @@ public final class Responses {
return of(RestfulResponse.HttpStatusCode.NO_CONTENT);
}
- public static Response.ResponseBuilder ofOk(final ReprRenderer<?, ?> renderer, final Caching caching) {
- return ofOk(renderer, caching, null);
+ public static Response.ResponseBuilder ofOk(
+ final ReprRenderer<?, ?> renderer,
+ final Caching caching) {
+ return ofOk(renderer, caching, null, null);
}
- public static Response.ResponseBuilder ofOk(final ReprRenderer<?, ?> renderer, final Caching caching, final Version version) {
+ public static Response.ResponseBuilder ofOk(
+ final ReprRenderer<?, ?> renderer,
+ final Caching caching,
+ final JsonRepresentation rootRepresentation) {
+ return ofOk(renderer, caching, null, rootRepresentation);
+ }
+
+ public static Response.ResponseBuilder ofOk(
+ final ReprRenderer<?, ?> renderer,
+ final Caching caching,
+ final Version version) {
+ return ofOk(renderer, caching, version, null);
+ }
+
+ public static Response.ResponseBuilder ofOk(
+ final ReprRenderer<?, ?> renderer,
+ final Caching caching,
+ final Version version,
+ final JsonRepresentation rootRepresentation) {
+
+ final JsonRepresentation representation = renderer.render();
+ // if a rootRepresentation is provided, then the assumption is that the rendered
+ // will be rendering to some submap of the rootRepresentation
+ final JsonRepresentation entityRepresentation =
+ rootRepresentation != null? rootRepresentation : representation;
+
final MediaType mediaType = renderer.getMediaType();
- final Response.ResponseBuilder response = of(RestfulResponse.HttpStatusCode.OK).type(mediaType).cacheControl(caching.getCacheControl()).entity(JsonWriterUtil.jsonFor(renderer.render()));
+ final Response.ResponseBuilder response =
+ of(RestfulResponse.HttpStatusCode.OK)
+ .type(mediaType)
+ .cacheControl(caching.getCacheControl())
+ .entity(JsonWriterUtil.jsonFor(entityRepresentation));
return addLastModifiedAndETagIfAvailable(response, version);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
index 474db32..4216d58 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
@@ -78,7 +78,7 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
* <p>
* Used to determine whether to follow links; only populated for {@link Mode#INLINE inline} Mode.
*/
- private final String memberId;
+ private String memberId;
private final Where where;
public AbstractObjectMemberReprRenderer(
@@ -103,6 +103,7 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
this.objectAdapter = objectAndMember.getObjectAdapter();
this.objectMember = objectAndMember.getMember();
this.objectMemberType = MemberType.determineFrom(objectMember);
+ this.memberId = objectMember.getId();
usingLinkTo(new DomainObjectLinkTo());
return cast(this);
@@ -262,7 +263,7 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
// create a temporary map that looks the same as the member map we'll be following
final JsonRepresentation memberMap = JsonRepresentation.newMap();
- memberMap.mapPut(getMemberId(), this.representation);
+ memberMap.mapPut(getMemberId(), representation);
if (membersLinkFollower.matches(memberMap) && detailsLinkFollower.matches(link)) {
followDetailsLink(link);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
index 005e26e..7917a1e 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
@@ -142,7 +142,8 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
{
// object
if(returnedAdapter != null) {
- final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(rendererContext, null, result);
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(rendererContext, null, result
+ );
renderer.with(returnedAdapter).includesSelf();
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/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 e1d0ac2..95fdd5d 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
@@ -96,7 +96,10 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
private ObjectAdapter objectAdapter;
private Mode mode = Mode.REGULAR;
- public DomainObjectReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+ public DomainObjectReprRenderer(
+ final RendererContext resourceContext,
+ final LinkFollowSpecs linkFollower,
+ final JsonRepresentation representation) {
super(resourceContext, linkFollower, RepresentationType.DOMAIN_OBJECT, representation);
usingLinkToBuilder(new DomainObjectLinkTo());
}
@@ -182,7 +185,8 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
if (linkFollower.matches(link)) {
- final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap()
+ );
renderer.with(objectAdapter);
link.mapPut("value", renderer.render());
}
@@ -257,7 +261,9 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
final OneToOneAssociation property = (OneToOneAssociation) assoc;
final LinkFollowSpecs linkFollowerForProp = getLinkFollowSpecs().follow("members[" + property.getId() + "]");
- final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(getRendererContext(), linkFollowerForProp, property.getId(), JsonRepresentation.newMap());
+ final JsonRepresentation propertyRepresentation = JsonRepresentation.newMap();
+ final ObjectPropertyReprRenderer renderer =
+ new ObjectPropertyReprRenderer(getRendererContext(), linkFollowerForProp, property.getId(), propertyRepresentation);
renderer.with(new ObjectAndProperty(objectAdapter, property)).usingLinkTo(linkToBuilder);
if (mode.isArgs()) {
@@ -293,7 +299,9 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
final LinkFollowSpecs linkFollowerForColl = getLinkFollowSpecs().follow(
"members[" + collection.getId() + "]");
- final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(getRendererContext(), linkFollowerForColl, collection.getId(), JsonRepresentation.newMap());
+ final JsonRepresentation collectionRepresentation = JsonRepresentation.newMap();
+ final ObjectCollectionReprRenderer renderer =
+ new ObjectCollectionReprRenderer(getRendererContext(), linkFollowerForColl, collection.getId(), collectionRepresentation);
renderer.with(new ObjectAndCollection(objectAdapter, collection)).usingLinkTo(linkToBuilder);
if(mode.isEventSerialization()) {
@@ -327,7 +335,8 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
if(objectAdapter.getSpecification().containsDoOpFacet(NotPersistableFacet.class)) {
return;
}
- final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), null, JsonRepresentation.newMap());
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), null, JsonRepresentation.newMap()
+ );
final JsonRepresentation domainObjectRepr = renderer.with(objectAdapter).asPersistLinkArguments().render();
final String domainType = objectAdapter.getSpecification().getSpecId().asString();
@@ -364,7 +373,8 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
return;
}
- final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), null, JsonRepresentation.newMap());
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), null, JsonRepresentation.newMap()
+ );
final JsonRepresentation domainObjectRepr = renderer.with(objectAdapter).asUpdatePropertiesLinkArguments().render();
if(!getRendererContext().suppressUpdateLink()) {
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
index 5b8dcc8..0135345 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
@@ -95,7 +95,8 @@ public class ListReprRenderer extends ReprRendererAbstract<ListReprRenderer, Col
final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("value");
if (linkFollower.matches(linkToObject)) {
- final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap()
+ );
final JsonRepresentation domainObject = renderer.with(adapter).render();
linkToObject.mapPut("value", domainObject);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
index 7b5db43..436db7e 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
@@ -43,8 +43,13 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
this(rendererContext, null, null, JsonRepresentation.newMap());
}
- public ObjectActionReprRenderer(final RendererContext rendererContext, final LinkFollowSpecs linkFollowSpecs, String actionId, final JsonRepresentation representation) {
- super(rendererContext, linkFollowSpecs, actionId, RepresentationType.OBJECT_ACTION, representation, Where.OBJECT_FORMS);
+ public ObjectActionReprRenderer(
+ final RendererContext rendererContext,
+ final LinkFollowSpecs linkFollowSpecs,
+ String actionId,
+ final JsonRepresentation representation) {
+ super(rendererContext, linkFollowSpecs, actionId, RepresentationType.OBJECT_ACTION, representation,
+ Where.OBJECT_FORMS);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/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 22de842..c91751f 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
@@ -46,7 +46,8 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
final LinkFollowSpecs linkFollowSpecs,
final String collectionId,
final JsonRepresentation representation) {
- super(rendererContext, linkFollowSpecs, collectionId, RepresentationType.OBJECT_COLLECTION, representation, Where.PARENTED_TABLES);
+ super(rendererContext, linkFollowSpecs, collectionId, RepresentationType.OBJECT_COLLECTION, representation,
+ Where.PARENTED_TABLES);
}
@Override
@@ -95,7 +96,8 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.VALUE, elementAdapter);
if(eagerlyRender) {
- final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), followHref, JsonRepresentation.newMap());
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), followHref, JsonRepresentation.newMap()
+ );
renderer.with(elementAdapter);
if(mode.isEventSerialization()) {
renderer.asEventSerialization();
@@ -124,7 +126,9 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
*/
@Override
protected void followDetailsLink(final JsonRepresentation detailsLink) {
- final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(getRendererContext(), getLinkFollowSpecs(), null, JsonRepresentation.newMap());
+ final JsonRepresentation representation = JsonRepresentation.newMap();
+ final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(getRendererContext(), getLinkFollowSpecs(), null,
+ representation);
renderer.with(new ObjectAndCollection(objectAdapter, objectMember)).asFollowed();
detailsLink.mapPut("value", renderer.render());
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/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 8e77441..bf3f7b7 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
@@ -54,7 +54,8 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
final LinkFollowSpecs linkFollower,
final String propertyId,
final JsonRepresentation representation) {
- super(resourceContext, linkFollower, propertyId, RepresentationType.OBJECT_PROPERTY, representation, Where.OBJECT_FORMS);
+ super(resourceContext, linkFollower, propertyId, RepresentationType.OBJECT_PROPERTY, representation,
+ Where.OBJECT_FORMS);
}
@Override
@@ -116,7 +117,8 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
final RenderFacet renderFacet = objectMember.getFacet(RenderFacet.class);
boolean eagerlyRender =
- renderFacet != null && renderFacet.value() == Type.EAGERLY && rendererContext.canEagerlyRender(valueAdapter) || !linkFollower.isTerminated();
+ (renderFacet != null && renderFacet.value() == Type.EAGERLY && rendererContext.canEagerlyRender(valueAdapter))
+ || (linkFollower != null && !linkFollower.isTerminated());
if(valueAdapter == null) {
final NullNode value = NullNode.getInstance();
@@ -128,7 +130,8 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.VALUE, valueAdapter).withTitle(title);
if(eagerlyRender) {
- final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(rendererContext, linkFollower, JsonRepresentation.newMap());
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(rendererContext, linkFollower, JsonRepresentation.newMap()
+ );
renderer.with(valueAdapter);
if(mode.isEventSerialization()) {
renderer.asEventSerialization();
@@ -167,7 +170,8 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
*/
@Override
protected void followDetailsLink(final JsonRepresentation detailsLink) {
- final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(getRendererContext(), getLinkFollowSpecs(), null, JsonRepresentation.newMap());
+ final JsonRepresentation representation = JsonRepresentation.newMap();
+ final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(getRendererContext(), getLinkFollowSpecs(), null, representation);
renderer.with(new ObjectAndProperty(objectAdapter, objectMember)).asFollowed();
detailsLink.mapPut("value", renderer.render());
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeFeatureReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeFeatureReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeFeatureReprRenderer.java
index a67beb2..61a3684 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeFeatureReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeFeatureReprRenderer.java
@@ -16,6 +16,8 @@
*/
package org.apache.isis.viewer.restfulobjects.rendering.domaintypes;
+import com.google.common.base.Strings;
+
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
@@ -24,8 +26,6 @@ import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
-import com.google.common.base.Strings;
-
public abstract class AbstractTypeFeatureReprRenderer<R extends ReprRendererAbstract<R, ParentSpecAndFeature<T>>, T extends ObjectFeature> extends ReprRendererAbstract<R, ParentSpecAndFeature<T>> {
protected ObjectSpecification objectSpecification;
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
index fc3e529..26baf69 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
@@ -18,6 +18,9 @@ package org.apache.isis.viewer.restfulobjects.rendering.domaintypes;
import java.util.List;
+import com.fasterxml.jackson.databind.node.NullNode;
+import com.google.common.base.Strings;
+
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -32,9 +35,6 @@ import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
-import com.fasterxml.jackson.databind.node.NullNode;
-import com.google.common.base.Strings;
-
public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprRenderer, ObjectSpecification> {
public static LinkBuilder newLinkToBuilder(final RendererContext resourceContext, final Rel rel, final ObjectSpecification objectSpec) {
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/ContentNegotiationServiceForRestfulObjectsV1_0.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/ContentNegotiationServiceForRestfulObjectsV1_0.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/ContentNegotiationServiceForRestfulObjectsV1_0.java
deleted file mode 100644
index b6e218a..0000000
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/ContentNegotiationServiceForRestfulObjectsV1_0.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.isis.viewer.restfulobjects.rendering.service;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Map;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
-
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.DomainServiceLayout;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.rendering.Caching;
-import org.apache.isis.viewer.restfulobjects.rendering.Responses;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectActionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndActionInvocation;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection2;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndProperty;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndProperty2;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectCollectionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectPropertyReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.service.conneg.ContentNegotiationService;
-
-@DomainService(
- nature = NatureOfService.DOMAIN
-)
-@DomainServiceLayout(
- menuOrder = "" + Integer.MAX_VALUE // default
-)
-public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNegotiationService {
-
- private static final DateFormat ETAG_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-
- @PostConstruct
- public void init(final Map<String, String> properties) {
-
- }
-
- @PreDestroy
- public void shutdown() {
- }
-
- @Override
- public ResponseBuilder buildResponse(
- final RepresentationService.Context2 renderContext2,
- final ObjectAdapter objectAdapter) {
-
- final DomainObjectReprRenderer renderer =
- new DomainObjectReprRenderer(renderContext2, null, JsonRepresentation.newMap());
- renderer.with(objectAdapter).includesSelf();
-
- final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
-
- if(renderContext2 instanceof RepresentationService.Context6) {
- final RepresentationService.Context6 context6 = (RepresentationService.Context6) renderContext2;
- final RepresentationService.Intent intent = context6.getIntent();
- if(intent == RepresentationService.Intent.JUST_CREATED) {
- responseBuilder.status(Response.Status.CREATED);
- }
- }
-
- final Version version = objectAdapter.getVersion();
- if (version != null && version.getTime() != null) {
- responseBuilder.tag(ETAG_FORMAT.format(version.getTime()));
- }
-
- return responseBuilder(responseBuilder);
- }
-
- @Override
- public ResponseBuilder buildResponse(
- final RepresentationService.Context2 renderContext2,
- final ObjectAndProperty objectAndProperty) {
-
- final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(renderContext2);
- renderer.with(objectAndProperty)
- .usingLinkTo(renderContext2.getAdapterLinkTo());
-
- if(objectAndProperty instanceof ObjectAndProperty2) {
- final ObjectAndProperty2 objectAndProperty2 = (ObjectAndProperty2) objectAndProperty;
- renderer
- .withMemberMode(objectAndProperty2.getMemberReprMode());
-
- }
-
- final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
- return responseBuilder;
- }
-
- @Override
- public ResponseBuilder buildResponse(
- final RepresentationService.Context2 renderContext2,
- final ObjectAndCollection objectAndCollection) {
-
- final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(renderContext2);
- renderer.with(objectAndCollection)
- .usingLinkTo(renderContext2.getAdapterLinkTo());
-
- if(objectAndCollection instanceof ObjectAndCollection2) {
- final ObjectAndCollection2 objectAndCollection2 = (ObjectAndCollection2) objectAndCollection;
-
- renderer.withMemberMode(objectAndCollection2.getMemberReprMode());
- }
-
- final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
-
- return responseBuilder(responseBuilder);
- }
-
- @Override
- public ResponseBuilder buildResponse(
- final RepresentationService.Context2 renderContext2,
- final ObjectAndAction objectAndAction) {
-
- final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(renderContext2);
- renderer.with(objectAndAction)
- .usingLinkTo(renderContext2.getAdapterLinkTo())
- .asStandalone();
-
- final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
-
- return responseBuilder(responseBuilder);
- }
-
- @Override
- public ResponseBuilder buildResponse(
- final RepresentationService.Context2 renderContext2,
- final ObjectAndActionInvocation objectAndActionInvocation) {
-
- final ActionResultReprRenderer renderer = new ActionResultReprRenderer(renderContext2, objectAndActionInvocation.getSelfLink());
- renderer.with(objectAndActionInvocation)
- .using(renderContext2.getAdapterLinkTo());
-
- final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
- Responses.addLastModifiedAndETagIfAvailable(responseBuilder, objectAndActionInvocation.getObjectAdapter().getVersion());
-
- return responseBuilder(responseBuilder);
- }
-
- /**
- * For easy subclassing to further customize, eg additional headers
- */
- protected ResponseBuilder responseBuilder(final ResponseBuilder responseBuilder) {
- return responseBuilder;
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
index 1f2e720..f56d1d2 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
@@ -63,15 +63,15 @@ public interface RepresentationService {
NOT_APPLICABLE
}
- /**
- * @deprecated - use {@link #objectRepresentation(Context, ObjectAdapter, Intent)}.
- */
- @Deprecated
@Programmatic
Response objectRepresentation(
Context resourceContext,
ObjectAdapter objectAdapter);
+ /**
+ * @deprecated - use {@link #objectRepresentation(Context, ObjectAdapter)}.
+ */
+ @Deprecated
@Programmatic
Response objectRepresentation(
Context resourceContext,
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceForRestfulObjects.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceForRestfulObjects.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceForRestfulObjects.java
index 4beba01..51a6689 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceForRestfulObjects.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceForRestfulObjects.java
@@ -37,6 +37,7 @@ import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAc
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndProperty;
import org.apache.isis.viewer.restfulobjects.rendering.service.conneg.ContentNegotiationService;
+import org.apache.isis.viewer.restfulobjects.rendering.service.conneg.ContentNegotiationServiceForRestfulObjectsV1_0;
@DomainService(
nature = NatureOfService.DOMAIN
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
index 936ed73..ca7e651 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
@@ -33,7 +33,6 @@ import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.core.commons.factory.InstanceUtil;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
@@ -131,15 +130,12 @@ public abstract class ContentNegotiationServiceAbstract implements ContentNegoti
}
protected boolean canAccept(
- final RepresentationType representationType,
final List<MediaType> acceptableMediaTypes,
final String profileValue) {
for (MediaType mediaType : acceptableMediaTypes) {
- if(representationType.matchesJsonProfile(mediaType)) {
- final String paramValue = mediaType.getParameters().get("profile");
- if (Objects.equals(paramValue, profileValue)) {
- return true;
- }
+ final String paramValue = mediaType.getParameters().get("profile");
+ if (Objects.equals(paramValue, profileValue)) {
+ return true;
}
}
return false;
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
new file mode 100644
index 0000000..04fe098
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
@@ -0,0 +1,233 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.isis.viewer.restfulobjects.rendering.service.conneg;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
+import org.apache.isis.viewer.restfulobjects.rendering.Caching;
+import org.apache.isis.viewer.restfulobjects.rendering.Responses;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectActionReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndActionInvocation;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection2;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndProperty;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndProperty2;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectCollectionReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectPropertyReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
+
+@DomainService(
+ nature = NatureOfService.DOMAIN
+)
+@DomainServiceLayout(
+ menuOrder = "" + Integer.MAX_VALUE // default
+)
+public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNegotiationService {
+
+ private static final DateFormat ETAG_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
+
+ @PostConstruct
+ public void init(final Map<String, String> properties) {
+
+ }
+
+ @PreDestroy
+ public void shutdown() {
+ }
+
+
+ @Override
+ public ResponseBuilder buildResponse(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAdapter objectAdapter) {
+
+ final List<MediaType> list = renderContext2.getAcceptableMediaTypes();
+ ensureCompatibleAcceptHeader(RepresentationType.DOMAIN_OBJECT, list);
+
+ final ResponseBuilder responseBuilder = buildResponseTo(
+ renderContext2, objectAdapter, JsonRepresentation.newMap(), null);
+
+ return responseBuilder(responseBuilder);
+ }
+
+ /**
+ * Not API
+ */
+ ResponseBuilder buildResponseTo(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAdapter objectAdapter,
+ final JsonRepresentation representation,
+ final JsonRepresentation rootRepresentation) {
+
+ final DomainObjectReprRenderer renderer =
+ new DomainObjectReprRenderer(renderContext2, null, representation);
+ renderer.with(objectAdapter).includesSelf();
+
+ final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE, rootRepresentation);
+
+ if(renderContext2 instanceof RepresentationService.Context6) {
+ final RepresentationService.Context6 context6 = (RepresentationService.Context6) renderContext2;
+ final RepresentationService.Intent intent = context6.getIntent();
+ if(intent == RepresentationService.Intent.JUST_CREATED) {
+ responseBuilder.status(Response.Status.CREATED);
+ }
+ }
+
+ final Version version = objectAdapter.getVersion();
+ if (version != null && version.getTime() != null) {
+ responseBuilder.tag(ETAG_FORMAT.format(version.getTime()));
+ }
+ return responseBuilder;
+ }
+
+ @Override
+ public ResponseBuilder buildResponse(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAndProperty objectAndProperty) {
+
+ final List<MediaType> list = renderContext2.getAcceptableMediaTypes();
+ ensureCompatibleAcceptHeader(RepresentationType.OBJECT_PROPERTY, list);
+
+ final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(renderContext2);
+ renderer.with(objectAndProperty)
+ .usingLinkTo(renderContext2.getAdapterLinkTo());
+
+ if(objectAndProperty instanceof ObjectAndProperty2) {
+ final ObjectAndProperty2 objectAndProperty2 = (ObjectAndProperty2) objectAndProperty;
+ renderer
+ .withMemberMode(objectAndProperty2.getMemberReprMode());
+
+ }
+
+ final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
+ return responseBuilder;
+ }
+
+ @Override
+ public ResponseBuilder buildResponse(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAndCollection objectAndCollection) {
+
+ final List<MediaType> list = renderContext2.getAcceptableMediaTypes();
+ ensureCompatibleAcceptHeader(RepresentationType.OBJECT_COLLECTION, list);
+
+ final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(renderContext2);
+ renderer.with(objectAndCollection)
+ .usingLinkTo(renderContext2.getAdapterLinkTo());
+
+ if(objectAndCollection instanceof ObjectAndCollection2) {
+ final ObjectAndCollection2 objectAndCollection2 = (ObjectAndCollection2) objectAndCollection;
+
+ renderer.withMemberMode(objectAndCollection2.getMemberReprMode());
+ }
+
+ final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
+
+ return responseBuilder(responseBuilder);
+ }
+
+ @Override
+ public ResponseBuilder buildResponse(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAndAction objectAndAction) {
+
+ final List<MediaType> list = renderContext2.getAcceptableMediaTypes();
+ ensureCompatibleAcceptHeader(RepresentationType.OBJECT_ACTION, list);
+
+ final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(renderContext2);
+ renderer.with(objectAndAction)
+ .usingLinkTo(renderContext2.getAdapterLinkTo())
+ .asStandalone();
+
+ final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
+
+ return responseBuilder(responseBuilder);
+ }
+
+ @Override
+ public ResponseBuilder buildResponse(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAndActionInvocation objectAndActionInvocation) {
+
+ final List<MediaType> list = renderContext2.getAcceptableMediaTypes();
+ ensureCompatibleAcceptHeader(RepresentationType.ACTION_RESULT, list);
+
+ final ActionResultReprRenderer renderer = new ActionResultReprRenderer(renderContext2, objectAndActionInvocation.getSelfLink());
+ renderer.with(objectAndActionInvocation)
+ .using(renderContext2.getAdapterLinkTo());
+
+ final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
+ Responses.addLastModifiedAndETagIfAvailable(responseBuilder, objectAndActionInvocation.getObjectAdapter().getVersion());
+
+ return responseBuilder(responseBuilder);
+ }
+
+ /**
+ * For easy subclassing to further customize, eg additional headers
+ */
+ protected ResponseBuilder responseBuilder(final ResponseBuilder responseBuilder) {
+ return responseBuilder;
+ }
+
+
+
+ private void ensureCompatibleAcceptHeader(
+ final RepresentationType representationType,
+ final List<MediaType> acceptableMediaTypes) {
+ if (representationType == null) {
+ return;
+ }
+
+ // RestEasy will check the basic media types...
+ // ... so we just need to check the profile paramter
+ final String producedProfile = representationType.getMediaTypeProfile();
+ if(producedProfile != null) {
+ for (MediaType mediaType : acceptableMediaTypes ) {
+ String acceptedProfileValue = mediaType.getParameters().get("profile");
+ if(acceptedProfileValue == null) {
+ continue;
+ }
+ if(!producedProfile.equals(acceptedProfileValue)) {
+ throw RestfulObjectsApplicationException.create(RestfulResponse.HttpStatusCode.NOT_ACCEPTABLE);
+ }
+ }
+ }
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceSimplified.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceSimplified.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceSimplified.java
index 1d95e57..7ebddef 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceSimplified.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceSimplified.java
@@ -18,8 +18,6 @@
*/
package org.apache.isis.viewer.restfulobjects.rendering.service.conneg;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
import java.util.List;
import javax.inject.Inject;
@@ -27,65 +25,109 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.version.Version;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.rendering.Caching;
-import org.apache.isis.viewer.restfulobjects.rendering.Responses;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndActionInvocation;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndProperty;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectCollectionReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectPropertyReprRenderer;
import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
+@DomainService(
+ nature = NatureOfService.DOMAIN
+)
+@DomainServiceLayout(
+ menuOrder = "1500"
+)
public class ContentNegotiationServiceSimplified extends ContentNegotiationServiceAbstract {
- private static final DateFormat ETAG_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-
private static final String ACCEPT_OBJECT = "urn:org.apache.isis:repr-types/object/v1";
+ private ContentNegotiationServiceForRestfulObjectsV1_0 restfulObjectsV1_0 = new ContentNegotiationServiceForRestfulObjectsV1_0();
+
public Response.ResponseBuilder buildResponse(
final RepresentationService.Context2 renderContext2,
final ObjectAdapter objectAdapter) {
- final RepresentationType representationType = RepresentationType.DOMAIN_OBJECT;
final List<MediaType> acceptableMediaTypes = renderContext2.getAcceptableMediaTypes();
- boolean canAccept = canAccept(representationType, acceptableMediaTypes, ACCEPT_OBJECT);
+ boolean canAccept = canAccept(acceptableMediaTypes, ACCEPT_OBJECT);
if(!canAccept) {
return null;
}
- JsonRepresentation representation = JsonRepresentation.newMap();
+ final InteractionInitiatedBy interactionInitiatedBy =
+ determineInteractionInitiatedByFrom(renderContext2);
+ final Where where = renderContext2.getWhere();
+
+ final JsonRepresentation rootRepresentation = JsonRepresentation.newMap();
List<OneToOneAssociation> properties = objectAdapter.getSpecification().getProperties(Contributed.INCLUDED);
- for (OneToOneAssociation property : properties) {
- Consent visibility = property.isVisible(objectAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE);
- if(visibility.isAllowed()) {
+ for (final OneToOneAssociation property : properties) {
+ final Consent visibility = property.isVisible(objectAdapter, interactionInitiatedBy, where);
+ if (!visibility.isAllowed()) {
+ continue;
}
+
+ final JsonRepresentation propertyRepresentation = JsonRepresentation.newMap();
+ final ObjectPropertyReprRenderer renderer =
+ new ObjectPropertyReprRenderer(renderContext2, null, property.getId(), propertyRepresentation);
+ renderer.with(new ObjectAndProperty(objectAdapter, property));
+
+ final JsonRepresentation propertyValueRepresentation = renderer.render();
+ rootRepresentation.mapPut(property.getId(), propertyValueRepresentation.getRepresentation("value"));
}
- final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(renderContext2, null, representation);
+ List<OneToManyAssociation> collections = objectAdapter.getSpecification().getCollections(Contributed.INCLUDED);
+ for (final OneToManyAssociation collection : collections) {
- renderer.with(objectAdapter).includesSelf();
+ final Consent visibility = collection.isVisible(objectAdapter, interactionInitiatedBy, where);
+ if (!visibility.isAllowed()) {
+ continue;
+ }
- final Response.ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
+ final JsonRepresentation propertyRepresentation = JsonRepresentation.newMap();
+ final ObjectCollectionReprRenderer renderer =
+ new ObjectCollectionReprRenderer(renderContext2, null, collection.getId(), propertyRepresentation);
+ renderer.with(new ObjectAndCollection(objectAdapter, collection));
- final Version version = objectAdapter.getVersion();
- if (version != null && version.getTime() != null) {
- responseBuilder.tag(ETAG_FORMAT.format(version.getTime()));
+ final JsonRepresentation collectionValueRepresentation = renderer.render();
+ rootRepresentation.mapPut(collection.getId(), collectionValueRepresentation);
}
- return null;
+
+ final JsonRepresentation $$roRepresentation = JsonRepresentation.newMap();
+ rootRepresentation.mapPut("$$ro", $$roRepresentation);
+
+ final Response.ResponseBuilder responseBuilder =
+ restfulObjectsV1_0.buildResponseTo(
+ renderContext2, objectAdapter, $$roRepresentation, rootRepresentation);
+
+ return responseBuilder(responseBuilder);
+ }
+
+ private static InteractionInitiatedBy determineInteractionInitiatedByFrom(
+ final RendererContext rendererContext) {
+ if (rendererContext instanceof RepresentationService.Context4) {
+ return ((RepresentationService.Context4) rendererContext).getInteractionInitiatedBy();
+ } else {
+ // fallback
+ return InteractionInitiatedBy.USER;
+ }
}
@Programmatic
@@ -116,6 +158,13 @@ public class ContentNegotiationServiceSimplified extends ContentNegotiationServi
return null;
}
+ /**
+ * For easy subclassing to further customize, eg additional headers
+ */
+ protected Response.ResponseBuilder responseBuilder(final Response.ResponseBuilder responseBuilder) {
+ return responseBuilder;
+ }
+
@Inject
protected DomainObjectContainer container;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/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 f739491..a485073 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
@@ -132,8 +132,9 @@ public class ResourceContext implements RendererContext6 {
void init(final RepresentationType representationType) {
getQueryStringAsJsonRepr(); // force it to be cached
-
- ensureCompatibleAcceptHeader(representationType);
+
+ // previously we checked for compatible accept headers here.
+ // now, though, this is a responsibility of the various ContentNegotiationService implementations
ensureDomainModelQueryParamSupported();
this.followLinks = Collections.unmodifiableList(getArg(RequestParameter.FOLLOW_LINKS));
@@ -147,27 +148,6 @@ public class ResourceContext implements RendererContext6 {
}
}
- private void ensureCompatibleAcceptHeader(final RepresentationType representationType) {
- if (representationType == null) {
- return;
- }
-
- // RestEasy will check the basic media types...
- // ... so we just need to check the profile paramter
- final String producedProfile = representationType.getMediaTypeProfile();
- if(producedProfile != null) {
- for (MediaType mediaType : httpHeaders.getAcceptableMediaTypes()) {
- String acceptedProfileValue = mediaType.getParameters().get("profile");
- if(acceptedProfileValue == null) {
- continue;
- }
- if(!producedProfile.equals(acceptedProfileValue)) {
- throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_ACCEPTABLE);
- }
- }
- }
- }
-
//endregion
http://git-wip-us.apache.org/repos/asf/isis/blob/a4f04eb4/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
index abc56ef..9630369 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
@@ -222,10 +222,7 @@ public class DomainResourceHelper {
/**
* Simply delegates to the {@link org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService} to
* render a representation of the object.
- *
- * @deprecated - use {@link #objectRepresentation(RepresentationService.Intent)}
*/
- @Deprecated
public Response objectRepresentation() {
return representationService
.objectRepresentation(representationServiceContext, objectAdapter);
@@ -234,7 +231,10 @@ public class DomainResourceHelper {
/**
* Simply delegates to the {@link org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService} to
* render a representation of the object.
+ *
+ * @deprecated - use {@link #objectRepresentation()}
*/
+ @Deprecated
public Response objectRepresentation(final RepresentationService.Intent intent) {
return representationService
.objectRepresentation(representationServiceContext, objectAdapter, intent);