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 2017/08/15 21:56:42 UTC
[5/5] isis git commit: ISIS-1697: adds new domain-type/layout
representation to obtain the grid for a domain object.
ISIS-1697: adds new domain-type/layout representation to obtain the grid for a domain object.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/e17f3740
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/e17f3740
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/e17f3740
Branch: refs/heads/master
Commit: e17f374003cd2e5fd15db438298bb0983d6f4c06
Parents: a99b2e1
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Aug 15 22:54:31 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Aug 15 22:54:31 2017 +0100
----------------------------------------------------------------------
.../isis/viewer/restfulobjects/applib/Rel.java | 1 +
.../applib/RepresentationType.java | 10 +++++++++-
.../restfulobjects/applib/RestfulMediaType.java | 1 +
.../applib/domaintypes/DomainTypeResource.java | 9 ++++++++-
.../restfulobjects/rendering/LinkBuilder.java | 2 +-
.../restfulobjects/rendering/Responses.java | 4 ++++
.../domainobjects/DomainObjectReprRenderer.java | 8 ++++++++
.../domaintypes/DomainTypeReprRenderer.java | 11 +++++++++-
.../resources/DomainTypeResourceServerside.java | 21 ++++++++++++++++++++
9 files changed, 63 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/e17f3740/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
index 70d7699..d8c0796 100644
--- a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
+++ b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
@@ -59,6 +59,7 @@ public enum Rel {
// implementation specific
CONTRIBUTED_BY(RelDefinition.IMPL, "contributed-by"),
+ LAYOUT(RelDefinition.IMPL, "layout"),
LOGOUT(RelDefinition.IMPL, "logout");
private final RelDefinition relDef;
http://git-wip-us.apache.org/repos/asf/isis/blob/e17f3740/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
index 501e81c..1c2adc7 100644
--- a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
+++ b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
@@ -93,6 +93,10 @@ public enum RepresentationType {
RestfulMediaType.APPLICATION_JSON_DOMAIN_TYPE,
null,
DomainTypeRepresentation.class),
+ LAYOUT(
+ null,
+ RestfulMediaType.APPLICATION_XML_LAYOUT_BS3,
+ null),
PROPERTY_DESCRIPTION(
RestfulMediaType.APPLICATION_JSON_PROPERTY_DESCRIPTION,
null,
@@ -128,7 +132,7 @@ public enum RepresentationType {
private final Class<? extends JsonRepresentation> representationClass;
private RepresentationType(final String jsonMediaTypeStr, final String xmlMediaTypeStr, final Class<? extends JsonRepresentation> representationClass) {
- this(MediaType.valueOf(jsonMediaTypeStr), xmlMediaTypeStr != null? MediaType.valueOf(xmlMediaTypeStr): null, representationClass);
+ this(jsonMediaTypeStr != null ? MediaType.valueOf(jsonMediaTypeStr) : null, xmlMediaTypeStr != null? MediaType.valueOf(xmlMediaTypeStr): null, representationClass);
}
private RepresentationType(final MediaType jsonMediaType, final MediaType xmlMediaType, final Class<? extends JsonRepresentation> representationClass) {
@@ -156,6 +160,10 @@ public enum RepresentationType {
return xmlMediaType;
}
+ public MediaType getJsonElseXmlMediaType() {
+ return jsonMediaType != null ? jsonMediaType : xmlMediaType;
+ }
+
/**
* Clones the (immutable) {@link #getMediaType() media type}, adding in one additional
* parameter value.
http://git-wip-us.apache.org/repos/asf/isis/blob/e17f3740/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RestfulMediaType.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RestfulMediaType.java b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RestfulMediaType.java
index 1227a8f..b440b89 100644
--- a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RestfulMediaType.java
+++ b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RestfulMediaType.java
@@ -56,6 +56,7 @@ public final class RestfulMediaType {
public final static String APPLICATION_JSON_TYPE_ACTION_RESULT = JSON_BASE + "type-action-result";
private static final String XML_BASE = "application/xml" + ";profile=" + PROFILE_PARAM_PREFIX;
+ public final static String APPLICATION_XML_LAYOUT_BS3 = XML_BASE + "layout-bs3";
// currently only support a subset of representations in XML format
http://git-wip-us.apache.org/repos/asf/isis/blob/e17f3740/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domaintypes/DomainTypeResource.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domaintypes/DomainTypeResource.java b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domaintypes/DomainTypeResource.java
index 638023c..8881c25 100644
--- a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domaintypes/DomainTypeResource.java
+++ b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domaintypes/DomainTypeResource.java
@@ -26,9 +26,10 @@ import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
import org.jboss.resteasy.annotations.ClientResponseType;
+import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
+
@Path("/domain-types")
public interface DomainTypeResource {
@@ -53,6 +54,12 @@ public interface DomainTypeResource {
public abstract Response domainType(@PathParam("domainType") final String domainType);
@GET
+ @Path("/{domainType}/layout")
+ @Produces({ MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_LAYOUT_BS3 })
+ @ClientResponseType(entityType = String.class)
+ public abstract Response layout(@PathParam("domainType") final String domainType);
+
+ @GET
@Path("/{domainType}/properties/{propertyId}")
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_PROPERTY_DESCRIPTION })
@ClientResponseType(entityType = String.class)
http://git-wip-us.apache.org/repos/asf/isis/blob/e17f3740/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
index f6e27e7..234fd97 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
@@ -27,7 +27,7 @@ import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
public final class LinkBuilder {
public static LinkBuilder newBuilder(final RendererContext resourceContext, final String rel, final RepresentationType representationType, final String hrefFormat, final Object... hrefArgs) {
- return newBuilder(resourceContext, rel, representationType.getMediaType(), hrefFormat, hrefArgs);
+ return newBuilder(resourceContext, rel, representationType.getJsonElseXmlMediaType(), hrefFormat, hrefArgs);
}
public static LinkBuilder newBuilder(final RendererContext resourceContext, final String rel, final MediaType mediaType, final String hrefFormat, final Object... hrefArgs) {
http://git-wip-us.apache.org/repos/asf/isis/blob/e17f3740/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 e68e250..4be7721 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
@@ -35,6 +35,10 @@ public final class Responses {
return of(RestfulResponse.HttpStatusCode.NO_CONTENT);
}
+ public static Response.ResponseBuilder ofNotFound() {
+ return of(RestfulResponse.HttpStatusCode.NOT_FOUND);
+ }
+
public static Response.ResponseBuilder ofOk(
final ReprRenderer<?, ?> renderer,
final Caching caching) {
http://git-wip-us.apache.org/repos/asf/isis/blob/e17f3740/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 2f64732..883d5cd 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
@@ -166,6 +166,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
// described by
if (mode.includeDescribedBy() && !rendererContext.suppressDescribedByLinks()) {
addLinkToDescribedBy();
+ addLinkToLayout();
}
if(isService && mode.includeUp()) {
addLinkToUp();
@@ -221,6 +222,13 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
getLinks().arrayAdd(link);
}
+ private void addLinkToLayout() {
+ final LinkBuilder linkBuilder = DomainTypeReprRenderer
+ .newLinkToLayoutBuilder(getRendererContext(), Rel.LAYOUT, objectAdapter.getSpecification());
+ final JsonRepresentation link = linkBuilder.build();
+ getLinks().arrayAdd(link);
+ }
+
private void addLinkToUp() {
final JsonRepresentation link = LinkBuilder.newBuilder(rendererContext, Rel.UP.getName(), RepresentationType.LIST, "services").build();
getLinks().arrayAdd(link);
http://git-wip-us.apache.org/repos/asf/isis/blob/e17f3740/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 26baf69..9ac1e96 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
@@ -39,10 +39,16 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
public static LinkBuilder newLinkToBuilder(final RendererContext resourceContext, final Rel rel, final ObjectSpecification objectSpec) {
final String typeFullName = objectSpec.getSpecId().asString();
- final String url = "domain-types/" + typeFullName;
+ final String url = String.format("domain-types/%s", typeFullName);
return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.DOMAIN_TYPE, url);
}
+ public static LinkBuilder newLinkToLayoutBuilder(final RendererContext resourceContext, final Rel rel, final ObjectSpecification objectSpec) {
+ final String typeFullName = objectSpec.getSpecId().asString();
+ final String url = String.format("domain-types/%s/layout", typeFullName);
+ return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.LAYOUT, url);
+ }
+
private ObjectSpecification objectSpecification;
public DomainTypeReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
@@ -66,6 +72,9 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
if (includesSelf) {
final JsonRepresentation selfLink = newLinkToBuilder(getRendererContext(), Rel.SELF, objectSpecification).build();
getLinks().arrayAdd(selfLink);
+
+ final JsonRepresentation layoutLink = newLinkToLayoutBuilder(getRendererContext(), Rel.LAYOUT, objectSpecification).build();
+ getLinks().arrayAdd(layoutLink);
}
representation.mapPut("canonicalName", objectSpecification.getFullIdentifier());
http://git-wip-us.apache.org/repos/asf/isis/blob/e17f3740/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
index 885bc54..02868c0 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
@@ -31,6 +31,7 @@ import javax.ws.rs.core.Response;
import com.google.common.base.Strings;
import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -106,6 +107,26 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
@Override
@GET
+ @Path("/{domainType}/layout")
+ @Produces({ MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_LAYOUT_BS3 })
+ public Response layout(@PathParam("domainType") final String domainType) {
+ init(RepresentationType.LAYOUT, Where.ANYWHERE, RepresentationService.Intent.NOT_APPLICABLE);
+
+ final ObjectSpecification objectSpec = getSpecificationLoader().lookupBySpecId(ObjectSpecId.of(domainType));
+ final GridFacet gridFacet = objectSpec.getFacet(GridFacet.class);
+ final Response.ResponseBuilder builder;
+ if(gridFacet == null) {
+ builder = Responses.ofNotFound();
+ return builder.build();
+ } else {
+ builder = Response.status(Response.Status.OK).entity(gridFacet.getGrid()).type(RepresentationType.LAYOUT.getXmlMediaType());
+ }
+
+ return builder.build();
+ }
+
+ @Override
+ @GET
@Path("/{domainType}/properties/{propertyId}")
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_PROPERTY_DESCRIPTION })
public Response typeProperty(@PathParam("domainType") final String domainType, @PathParam("propertyId") final String propertyId) {