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 2013/02/19 09:06:14 UTC
[4/4] git commit: ISIS-233: working toward RO spec 1.0.0
Updated Branches:
refs/heads/dan/ISIS-233-ro [created] e5093edb5
ISIS-233: working toward RO spec 1.0.0
* resources now have domainType/instanceId format
* change Rel enum to have prefix
* change Rel enum to specify optional parameters
* change RepresentationType constants
* fix to PathNode for following multiple links
* got rid of ReprRenderFactory and the registry of these completely
* removed transient domain object repr and newTransientInstance action
* throw 406 if mismatch on accept profile param
* can now start the TCK app once more for RO
* fixed some annotations in TCK app, were failing metamodel validator
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/e5093edb
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/e5093edb
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/e5093edb
Branch: refs/heads/dan/ISIS-233-ro
Commit: e5093edb5d833f706286e43359b18021fa91e7f8
Parents: a1a7317
Author: Dan Haywood <da...@apache.org>
Authored: Tue Feb 19 08:03:00 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Tue Feb 19 08:03:00 2013 +0000
----------------------------------------------------------------------
.../restfulobjects/applib/JsonRepresentation.java | 2 +-
.../isis/viewer/restfulobjects/applib/Rel.java | 51 +++--
.../restfulobjects/applib/RepresentationType.java | 6 +-
.../restfulobjects/applib/RestfulMediaType.java | 30 ++--
.../applib/domainobjects/DomainObjectResource.java | 64 +++---
.../domainobjects/DomainServiceResource.java | 2 +-
.../applib/domaintypes/DomainTypeResource.java | 26 +--
.../applib/homepage/HomePageRepresentation.java | 7 +-
.../viewer/restfulobjects/applib/util/Parser.java | 8 +-
.../restfulobjects/applib/util/PathNode.java | 59 ++++--
.../restfulobjects/applib/util/ParserTest.java | 2 +-
.../applib/util/PathNodeTest_equalsHashcode.java | 24 ++-
.../applib/util/PathNodeTest_split.java | 56 +++++
.../restfulobjects/rendering/LinkBuilder.java | 16 +-
.../rendering/RendererFactoryRegistry.java | 84 --------
.../rendering/ReprRendererAbstract.java | 18 +-
.../rendering/ReprRendererFactoryAbstract.java | 36 ----
.../AbstractObjectMemberReprRenderer.java | 2 +-
.../domainobjects/ActionResultReprRenderer.java | 35 +---
.../domainobjects/DomainObjectLinkTo.java | 29 +--
.../domainobjects/DomainObjectReprRenderer.java | 75 +++----
.../domainobjects/DomainServiceLinkTo.java | 22 ++-
.../rendering/domainobjects/ListReprRenderer.java | 24 +--
.../domainobjects/ObjectActionReprRenderer.java | 35 +---
.../ObjectCollectionReprRenderer.java | 27 +--
.../domainobjects/ObjectPropertyReprRenderer.java | 29 +--
.../domainobjects/ScalarValueReprRenderer.java | 28 ++--
.../AbstractTypeMemberReprRenderer.java | 4 +-
.../domaintypes/ActionDescriptionReprRenderer.java | 26 +--
.../ActionParameterDescriptionReprRenderer.java | 26 +--
.../CollectionDescriptionReprRenderer.java | 22 +--
.../domaintypes/DomainTypeReprRenderer.java | 48 ++----
.../PropertyDescriptionReprRenderer.java | 22 +--
.../domaintypes/TypeActionResultReprRenderer.java | 17 +--
.../domaintypes/TypeListReprRenderer.java | 19 +--
.../RestfulObjectsSpecEventSerializer.java | 4 +-
.../restfulobjects/rendering/util/OidUtils.java | 20 ++-
.../rendering/LinkFollowerTest_follow.java | 47 +++++
.../restfulobjects/server/ResourceContext.java | 51 ++----
.../server/RestfulObjectsApplication.java | 8 -
.../server/RuntimeExceptionMapper.java | 8 +-
.../resources/DomainObjectResourceServerside.java | 102 +++++-----
.../server/resources/DomainResourceHelper.java | 31 +---
.../resources/DomainServiceResourceServerside.java | 15 +-
.../resources/DomainTypeResourceServerside.java | 78 ++------
.../server/resources/HomePageReprRenderer.java | 61 ++----
.../resources/HomePageResourceServerside.java | 7 +-
.../server/resources/ResourceAbstract.java | 19 +-
.../server/resources/UserReprRenderer.java | 18 +--
.../server/resources/UserResourceServerside.java | 7 +-
.../server/resources/VersionReprRenderer.java | 17 +--
.../resources/VersionResourceServerside.java | 10 +-
.../restfulobjects/server/util/OidUtils.java | 26 ++-
.../tck/src/main/webapp/WEB-INF/isis.properties | 48 ++---
.../src/main/webapp/WEB-INF/security_file.allow | 16 --
.../main/webapp/WEB-INF/security_file.passwords | 20 --
.../tck/src/main/webapp/WEB-INF/web.xml | 4 +-
.../restfulobjects/tck/IsisWebServerRule.java | 10 +
...eTest_clientAcceptHeader_exceptionHandling.java | 105 ----------
...Test_serverSideException_exceptionHandling.java | 72 -------
...Test_serverSideException_exceptionHandling.java | 72 +++++++
.../home/HomePageResourceTest_accept.java | 79 -------
.../home/HomePageResourceTest_get_accept.java | 107 ++++++++++
...ePageResourceTest_representationAndHeaders.java | 146 -------------
...rceTest_templated_representationAndHeaders.java | 159 +++++++++++++++
.../home/HomePageResourceTest_xrofollowlinks.java | 54 +++---
.../resources/object/DomainObjectResourceTest.java | 32 ++--
.../core/metamodel/adapter/oid/OidMarshaller.java | 18 ++
...olyInterfaceIdentityStrategySubtype3Entity.java | 2 +-
.../refs/PolyInterfaceParentEntityRepository.java | 6 +-
.../dom/refs/UnidirFkParentEntityRepository.java | 4 +-
.../dom/refs/UnidirJoinParentEntityRepository.java | 4 +-
72 files changed, 1037 insertions(+), 1431 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/JsonRepresentation.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/JsonRepresentation.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/JsonRepresentation.java
index 71de8f9..c3e8fb0 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/JsonRepresentation.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/JsonRepresentation.java
@@ -1047,7 +1047,7 @@ public class JsonRepresentation {
private JsonNode getNode(final String path) {
JsonNode jsonNode = this.jsonNode;
- final String[] keys = path.split("\\.");
+ final List<String> keys = PathNode.split(path);
for (final String key : keys) {
final PathNode pathNode = PathNode.parse(key);
if (!pathNode.getKey().isEmpty()) {
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
index 1d20988..7184f59 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
@@ -24,38 +24,42 @@ public enum Rel {
SELF("self"),
DESCRIBEDBY("describedby"),
UP("up"),
+ PREVIOUS("previous"),
+ NEXT("next"),
HELP("help"),
ICON("icon"),
// Restful Objects namespace
- ICON16(Spec.REL_PREFIX + "icon16"),
- ICON32(Spec.REL_PREFIX + "icon32"),
- OBJECT(Spec.REL_PREFIX + "object"),
- SERVICE(Spec.REL_PREFIX + "service"),
- CHOICE(Spec.REL_PREFIX + "choice"),
+ ACTION(Spec.REL_PREFIX + "action"),
+ ACTION_PARAM(Spec.REL_PREFIX + "action-param"),
+ ADD_TO(Spec.REL_PREFIX + "add-to"),
+ ATTACHMENT(Spec.REL_PREFIX + "attachment"),
+ CHOICE(Spec.REL_PREFIX + "choice"),
+ CLEAR(Spec.REL_PREFIX + "clear"),
+ COLLECTION(Spec.REL_PREFIX + "collection"),
DEFAULT(Spec.REL_PREFIX + "default"),
+ DELETE(Spec.REL_PREFIX + "delete"),
DETAILS(Spec.REL_PREFIX + "details"),
- MODIFY(Spec.REL_PREFIX + "modify"),
- CLEAR(Spec.REL_PREFIX + "clear"),
- ADD_TO(Spec.REL_PREFIX + "addto"),
- REMOVE_FROM(Spec.REL_PREFIX + "removefrom"),
+ DOMAIN_TYPE(Spec.REL_PREFIX + "domain-type"),
+ DOMAIN_TYPES(Spec.REL_PREFIX + "domain-types"),
+ ELEMENT(Spec.REL_PREFIX + "element"),
+ ELEMENT_TYPE(Spec.REL_PREFIX + "element-type"),
INVOKE(Spec.REL_PREFIX + "invoke"),
+ MODIFY(Spec.REL_PREFIX + "modify"),
PERSIST(Spec.REL_PREFIX + "persist"),
PROPERTY(Spec.REL_PREFIX + "property"),
- COLLECTION(Spec.REL_PREFIX + "collection"),
- ACTION(Spec.REL_PREFIX + "action"),
- TYPE_ACTION(Spec.REL_PREFIX + "typeaction"),
- ACTION_PARAM(Spec.REL_PREFIX + "actionparam"),
- RETURN_TYPE(Spec.REL_PREFIX + "returntype"),
- ELEMENT_TYPE(Spec.REL_PREFIX + "elementtype"),
- VERSION(Spec.REL_PREFIX + "version"),
- USER(Spec.REL_PREFIX + "user"),
+ REMOVE_FROM(Spec.REL_PREFIX + "remove-from"),
+ RETURN_TYPE(Spec.REL_PREFIX + "return-type"),
+ SERVICE(Spec.REL_PREFIX + "service"),
SERVICES(Spec.REL_PREFIX + "services"),
- TYPES(Spec.REL_PREFIX + "types"),
- DOMAIN_TYPE(Spec.REL_PREFIX + "domaintype"),
+ UPDATE(Spec.REL_PREFIX + "update"),
+ USER(Spec.REL_PREFIX + "user"),
+ VALUE(Spec.REL_PREFIX + "value"),
+ VERSION(Spec.REL_PREFIX + "version"),
+
// implementation specific
- CONTRIBUTED_BY(Impl.REL_PREFIX + "contributedby");
+ CONTRIBUTED_BY(Impl.REL_PREFIX + "contributed-by");
private final String name;
@@ -67,6 +71,13 @@ public enum Rel {
return name;
}
+ /**
+ * For those {@link Rel}s that also take a param
+ */
+ public String andParam(String paramName, String paramValue) {
+ return name + ";" + paramName + "=" + "\"" + paramValue + "\"";
+ }
+
private static class Spec {
final static String REL_PREFIX = "urn:org.restfulobjects:rels/";
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
index 6b04fe3..c0fd7f9 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
@@ -28,8 +28,6 @@ import org.apache.isis.viewer.restfulobjects.applib.domainobjects.ListRepresenta
import org.apache.isis.viewer.restfulobjects.applib.domainobjects.ObjectActionRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.domainobjects.ObjectCollectionRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.domainobjects.ObjectPropertyRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.domainobjects.ScalarValueRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.domainobjects.TransientDomainObjectRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.domaintypes.ActionDescriptionRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.domaintypes.ActionParameterDescriptionRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.domaintypes.CollectionDescriptionRepresentation;
@@ -49,9 +47,7 @@ public enum RepresentationType {
USER(RestfulMediaType.APPLICATION_JSON_USER, UserRepresentation.class),
VERSION(RestfulMediaType.APPLICATION_JSON_VERSION, VersionRepresentation.class),
LIST(RestfulMediaType.APPLICATION_JSON_LIST, ListRepresentation.class),
- SCALAR_VALUE(RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, ScalarValueRepresentation.class),
- DOMAIN_OBJECT(RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, DomainObjectRepresentation.class),
- TRANSIENT_DOMAIN_OBJECT(RestfulMediaType.APPLICATION_JSON_TRANSIENT_DOMAIN_OBJECT, TransientDomainObjectRepresentation.class),
+ DOMAIN_OBJECT(RestfulMediaType.APPLICATION_JSON_OBJECT, DomainObjectRepresentation.class),
OBJECT_PROPERTY(RestfulMediaType.APPLICATION_JSON_OBJECT_PROPERTY, ObjectPropertyRepresentation.class),
OBJECT_COLLECTION(RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, ObjectCollectionRepresentation.class),
OBJECT_ACTION(RestfulMediaType.APPLICATION_JSON_OBJECT_ACTION, ObjectActionRepresentation.class),
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RestfulMediaType.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RestfulMediaType.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RestfulMediaType.java
index 81b68b6..5dbd886 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RestfulMediaType.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RestfulMediaType.java
@@ -41,20 +41,22 @@ public final class RestfulMediaType {
public final static String APPLICATION_JSON_USER = BASE + "user";
public final static String APPLICATION_JSON_VERSION = BASE + "version";
public final static String APPLICATION_JSON_LIST = BASE + "list";
- public final static String APPLICATION_JSON_SCALAR_VALUE = BASE + "scalarvalue";
- public final static String APPLICATION_JSON_DOMAIN_OBJECT = BASE + "domainobject";
- public final static String APPLICATION_JSON_TRANSIENT_DOMAIN_OBJECT = BASE + "transient";
- public final static String APPLICATION_JSON_OBJECT_PROPERTY = BASE + "objectproperty";
- public final static String APPLICATION_JSON_OBJECT_COLLECTION = BASE + "objectcollection";
- public final static String APPLICATION_JSON_OBJECT_ACTION = BASE + "objectaction";
- public final static String APPLICATION_JSON_ACTION_RESULT = BASE + "actionresult";
- public final static String APPLICATION_JSON_TYPE_LIST = BASE + "typelist";
- public final static String APPLICATION_JSON_DOMAIN_TYPE = BASE + "domaintype";
- public final static String APPLICATION_JSON_TYPE_ACTION_RESULT = BASE + "typeactionresult";
- public final static String APPLICATION_JSON_PROPERTY_DESCRIPTION = BASE + "propertydescription";
- public final static String APPLICATION_JSON_COLLECTION_DESCRIPTION = BASE + "collectiondescription";
- public final static String APPLICATION_JSON_ACTION_DESCRIPTION = BASE + "actiondescription";
- public final static String APPLICATION_JSON_ACTION_PARAMETER_DESCRIPTION = BASE + "actionparameterdescription";
+ public final static String APPLICATION_JSON_OBJECT = BASE + "object";
+ public final static String APPLICATION_JSON_OBJECT_PROPERTY = BASE + "object-property";
+ public final static String APPLICATION_JSON_OBJECT_COLLECTION = BASE + "object-collection";
+ public final static String APPLICATION_JSON_OBJECT_ACTION = BASE + "object-action";
+ public final static String APPLICATION_JSON_ACTION_RESULT = BASE + "action-result";
+ public final static String APPLICATION_JSON_TYPE_LIST = BASE + "type-list";
+ public final static String APPLICATION_JSON_DOMAIN_TYPE = BASE + "domain-type";
+ public final static String APPLICATION_JSON_PROPERTY_DESCRIPTION = BASE + "property-description";
+ public final static String APPLICATION_JSON_COLLECTION_DESCRIPTION = BASE + "collection-description";
+ public final static String APPLICATION_JSON_ACTION_DESCRIPTION = BASE + "action-description";
+ public final static String APPLICATION_JSON_ACTION_PARAMETER_DESCRIPTION = BASE + "action-param-description";
public final static String APPLICATION_JSON_ERROR = BASE + "error";
+ public final static String APPLICATION_JSON_TYPE_ACTION_RESULT = BASE + "type-action-result";
+
+ // REVIEW: these do not appear in RO spec 1.0.0
+ // public final static String APPLICATION_JSON_SCALAR_VALUE = BASE + "scalarvalue";
+ // public final static String APPLICATION_JSON_TRANSIENT_DOMAIN_OBJECT = BASE + "transient";
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainObjectResource.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainObjectResource.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainObjectResource.java
index 9c28a32..2bb58f8 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainObjectResource.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainObjectResource.java
@@ -38,113 +38,113 @@ import org.jboss.resteasy.annotations.ClientResponseType;
public interface DomainObjectResource {
@POST
- @Path("/")
+ @Path("/{domainType}")
@Consumes({ MediaType.WILDCARD })
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
+ @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response persist(final InputStream object);
+ public Response persist(@PathParam("domainType") String domainType, final InputStream object);
// //////////////////////////////////////////////////////////
// domain object
// //////////////////////////////////////////////////////////
@GET
- @Path("/{oid}")
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
+ @Path("/{domainType}/{instanceId}")
+ @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response object(@PathParam("oid") final String oidStr);
+ public Response object(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId);
@PUT
- @Path("/{oid}")
+ @Path("/{domainType}/{instanceId}")
@Consumes({ MediaType.WILDCARD })
- @Produces({ RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
+ @Produces({ RestfulMediaType.APPLICATION_JSON_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response object(@PathParam("oid") final String oidStr, final InputStream arguments);
+ public Response object(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, final InputStream arguments);
// //////////////////////////////////////////////////////////
// domain object property
// //////////////////////////////////////////////////////////
@GET
- @Path("/{oid}/properties/{propertyId}")
+ @Path("/{domainType}/{instanceId}/properties/{propertyId}")
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response propertyDetails(@PathParam("oid") final String oidStr, @PathParam("propertyId") final String propertyId);
+ public Response propertyDetails(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("propertyId") final String propertyId);
@PUT
- @Path("/{oid}/properties/{propertyId}")
+ @Path("/{domainType}/{instanceId}/properties/{propertyId}")
@Consumes({ MediaType.WILDCARD })
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response modifyProperty(@PathParam("oid") final String oidStr, @PathParam("propertyId") final String propertyId, final InputStream arguments);
+ public Response modifyProperty(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("propertyId") final String propertyId, final InputStream arguments);
@DELETE
- @Path("/{oid}/properties/{propertyId}")
+ @Path("/{domainType}/{instanceId}/properties/{propertyId}")
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response clearProperty(@PathParam("oid") final String oidStr, @PathParam("propertyId") final String propertyId);
+ public Response clearProperty(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("propertyId") final String propertyId);
// //////////////////////////////////////////////////////////
// domain object collection
// //////////////////////////////////////////////////////////
@GET
- @Path("/{oid}/collections/{collectionId}")
+ @Path("/{domainType}/{instanceId}/collections/{collectionId}")
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response accessCollection(@PathParam("oid") final String oidStr, @PathParam("collectionId") final String collectionId);
+ public Response accessCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId);
@PUT
- @Path("/{oid}/collections/{collectionId}")
+ @Path("/{domainType}/{instanceId}/collections/{collectionId}")
@Consumes({ MediaType.WILDCARD })
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
- public Response addToSet(@PathParam("oid") final String oidStr, @PathParam("collectionId") final String collectionId, final InputStream arguments);
+ public Response addToSet(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId, final InputStream arguments);
@POST
- @Path("/{oid}/collections/{collectionId}")
+ @Path("/{domainType}/{instanceId}/collections/{collectionId}")
@Consumes({ MediaType.WILDCARD })
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response addToList(@PathParam("oid") final String oidStr, @PathParam("collectionId") final String collectionId, final InputStream arguments);
+ public Response addToList(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId, final InputStream arguments);
@DELETE
- @Path("/{oid}/collections/{collectionId}")
+ @Path("/{domainType}/{instanceId}/collections/{collectionId}")
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response removeFromCollection(@PathParam("oid") final String oidStr, @PathParam("collectionId") final String collectionId);
+ public Response removeFromCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId);
// //////////////////////////////////////////////////////////
// domain object action
// //////////////////////////////////////////////////////////
@GET
- @Path("/{oid}/actions/{actionId}")
+ @Path("/{domainType}/{instanceId}/actions/{actionId}")
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_ACTION, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response actionPrompt(@PathParam("oid") final String oidStr, @PathParam("actionId") final String actionId);
+ public Response actionPrompt(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("actionId") final String actionId);
// //////////////////////////////////////////////////////////
// domain object action invoke
// //////////////////////////////////////////////////////////
@GET
- @Path("/{oid}/actions/{actionId}/invoke")
+ @Path("/{domainType}/{instanceId}/actions/{actionId}/invoke")
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response invokeActionQueryOnly(@PathParam("oid") final String oidStr, @PathParam("actionId") final String actionId);
+ public Response invokeActionQueryOnly(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("actionId") final String actionId);
@PUT
- @Path("/{oid}/actions/{actionId}/invoke")
+ @Path("/{domainType}/{instanceId}/actions/{actionId}/invoke")
@Consumes({ MediaType.WILDCARD })
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_SCALAR_VALUE, RestfulMediaType.APPLICATION_JSON_ERROR })
+ @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response invokeActionIdempotent(@PathParam("oid") final String oidStr, @PathParam("actionId") final String actionId, final InputStream arguments);
+ public Response invokeActionIdempotent(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("actionId") final String actionId, final InputStream arguments);
@POST
- @Path("/{oid}/actions/{actionId}/invoke")
+ @Path("/{domainType}/{instanceId}/actions/{actionId}/invoke")
@Consumes({ MediaType.WILDCARD })
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public Response invokeAction(@PathParam("oid") final String oidStr, @PathParam("actionId") final String actionId, final InputStream arguments);
+ public Response invokeAction(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("actionId") final String actionId, final InputStream arguments);
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainServiceResource.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainServiceResource.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainServiceResource.java
index 853d431..29de6cd 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainServiceResource.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/DomainServiceResource.java
@@ -48,7 +48,7 @@ public interface DomainServiceResource {
@GET
@Path("/{serviceId}")
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
+ @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
public Response service(@PathParam("serviceId") final String serviceId);
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domaintypes/DomainTypeResource.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domaintypes/DomainTypeResource.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domaintypes/DomainTypeResource.java
index fd1956d..90c1b70 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domaintypes/DomainTypeResource.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domaintypes/DomainTypeResource.java
@@ -84,26 +84,20 @@ public interface DomainTypeResource {
@Path("/{domainType}/isSubtypeOf/invoke")
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public abstract Response domainTypeIsSubtypeOf(@PathParam("domainType") final String domainType, @QueryParam("supertype") String superType, // simple
- // style
- @QueryParam("args") final String argumentsQueryString // formal
- // style
- );
+ public abstract Response domainTypeIsSubtypeOf(
+ @PathParam("domainType") final String domainType,
+ @QueryParam("supertype") String superType, // simple style
+ @QueryParam("args") final String argumentsQueryString // formal style
+ );
@GET
@Path("/{domainType}/isSupertypeOf/invoke")
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
@ClientResponseType(entityType = String.class)
- public abstract Response domainTypeIsSupertypeOf(@PathParam("domainType") final String domainType, @QueryParam("supertype") String superType, // simple
- // style
- @QueryParam("args") final String argumentsQueryString // formal
- // style
- );
-
- @GET
- @Path("/{domainType}/newTransientInstance/invoke")
- @Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_TYPE_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR })
- @ClientResponseType(entityType = String.class)
- public Response newTransientInstance(@QueryParam("domainType") final String domainType, @QueryParam("args") final String args);
+ public abstract Response domainTypeIsSupertypeOf(
+ @PathParam("domainType") final String domainType,
+ @QueryParam("supertype") String superType, // simple style
+ @QueryParam("args") final String argumentsQueryString // formal style
+ );
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/homepage/HomePageRepresentation.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/homepage/HomePageRepresentation.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/homepage/HomePageRepresentation.java
index a1e3e74..3ffd966 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/homepage/HomePageRepresentation.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/homepage/HomePageRepresentation.java
@@ -19,6 +19,7 @@
package org.apache.isis.viewer.restfulobjects.applib.homepage;
import org.apache.isis.viewer.restfulobjects.applib.LinkRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.Rel;
import org.apache.isis.viewer.restfulobjects.applib.domainobjects.DomainRepresentation;
import org.codehaus.jackson.JsonNode;
@@ -29,15 +30,15 @@ public class HomePageRepresentation extends DomainRepresentation {
}
public LinkRepresentation getUser() {
- return getLinkWithRel("user");
+ return getLinkWithRel(Rel.USER);
}
public LinkRepresentation getServices() {
- return getLinkWithRel("services");
+ return getLinkWithRel(Rel.SERVICES);
}
public LinkRepresentation getVersion() {
- return getLinkWithRel("version");
+ return getLinkWithRel(Rel.VERSION);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Parser.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Parser.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Parser.java
index 08f8b80..99503ad 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Parser.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Parser.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.restfulobjects.applib.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
@@ -235,7 +236,7 @@ public abstract class Parser<T> {
if (str == null) {
return Collections.emptyList();
}
- return Lists.newArrayList(Splitter.on(",").split(str));
+ return PathNode.split(str);
}
@Override
@@ -258,8 +259,7 @@ public abstract class Parser<T> {
}
final List<List<String>> listOfLists = Lists.newArrayList();
for (final String s : str) {
- final Iterable<String> split = Splitter.on('.').split(s);
- listOfLists.add(Lists.newArrayList(split));
+ listOfLists.add(PathNode.split(s));
}
return listOfLists;
}
@@ -285,7 +285,7 @@ public abstract class Parser<T> {
@Override
public List<String> apply(final String input) {
- return Lists.newArrayList(Splitter.on('.').split(input));
+ return PathNode.split(input);
}
});
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNode.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNode.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNode.java
index a37da71..b9fcaf5 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNode.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNode.java
@@ -19,6 +19,7 @@
package org.apache.isis.viewer.restfulobjects.applib.util;
import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -27,6 +28,7 @@ import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import com.google.common.base.Objects;
import com.google.common.base.Splitter;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public class PathNode {
@@ -36,6 +38,33 @@ public class PathNode {
public static final PathNode NULL = new PathNode("", Collections.<String, String> emptyMap());
+ public static List<String> split(String path) {
+ List<String> parts = Lists.newArrayList();
+ String curr = null;
+ for (String part : Splitter.on(".").split(path)) {
+ if(curr != null) {
+ if(part.contains("]")) {
+ curr = curr + "." + part;
+ parts.add(curr);
+ curr = null;
+ } else {
+ curr = curr + "." + part;
+ }
+ continue;
+ }
+ if(!part.contains("[")) {
+ parts.add(part);
+ continue;
+ }
+ if(part.contains("]")) {
+ parts.add(part);
+ } else {
+ curr = part;
+ }
+ }
+ return parts;
+ }
+
public static PathNode parse(final String path) {
final Matcher nodeMatcher = NODE.matcher(path);
if (!nodeMatcher.matches()) {
@@ -94,39 +123,43 @@ public class PathNode {
return true;
}
+
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
+ result = prime * result + ((criteria == null) ? 0 : criteria.hashCode());
result = prime * result + ((key == null) ? 0 : key.hashCode());
return result;
}
@Override
- public boolean equals(final Object obj) {
- if (this == obj) {
+ public boolean equals(Object obj) {
+ if (this == obj)
return true;
- }
- if (obj == null) {
+ if (obj == null)
return false;
- }
- if (getClass() != obj.getClass()) {
+ if (getClass() != obj.getClass())
+ return false;
+ PathNode other = (PathNode) obj;
+ if (criteria == null) {
+ if (other.criteria != null)
+ return false;
+ } else if (!criteria.equals(other.criteria))
return false;
- }
- final PathNode other = (PathNode) obj;
if (key == null) {
- if (other.key != null) {
+ if (other.key != null)
return false;
- }
- } else if (!key.equals(other.key)) {
+ } else if (!key.equals(other.key))
return false;
- }
return true;
}
-
+
@Override
public String toString() {
return key + (criteria.isEmpty() ? "" : criteria);
}
+
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/ParserTest.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/ParserTest.java b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/ParserTest.java
index 9ae89de..20e98d2 100644
--- a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/ParserTest.java
+++ b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/ParserTest.java
@@ -162,7 +162,7 @@ public class ParserTest {
public void forJaxRsMediaType() {
final Parser<javax.ws.rs.core.MediaType> parser = Parser.forJaxRsMediaType();
- for (final javax.ws.rs.core.MediaType v : new javax.ws.rs.core.MediaType[] { javax.ws.rs.core.MediaType.APPLICATION_ATOM_XML_TYPE, javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE, javax.ws.rs.core.MediaType.APPLICATION_XHTML_XML_TYPE, javax.ws.rs.core.MediaType.valueOf(RestfulMediaType.APPLICATION_JSON_DOMAIN_OBJECT) }) {
+ for (final javax.ws.rs.core.MediaType v : new javax.ws.rs.core.MediaType[] { javax.ws.rs.core.MediaType.APPLICATION_ATOM_XML_TYPE, javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE, javax.ws.rs.core.MediaType.APPLICATION_XHTML_XML_TYPE, javax.ws.rs.core.MediaType.valueOf(RestfulMediaType.APPLICATION_JSON_OBJECT) }) {
final String asString = parser.asString(v);
final javax.ws.rs.core.MediaType valueOf = parser.valueOf(asString);
assertThat(v, is(equalTo(valueOf)));
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNodeTest_equalsHashcode.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNodeTest_equalsHashcode.java b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNodeTest_equalsHashcode.java
index 8cdc5dd..9af1f28 100644
--- a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNodeTest_equalsHashcode.java
+++ b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNodeTest_equalsHashcode.java
@@ -36,21 +36,41 @@ public class PathNodeTest_equalsHashcode {
public void oneCriterium() throws Exception {
final PathNode node = PathNode.parse("a[b=c]");
final PathNode node2 = PathNode.parse("a");
- assertEquals(node, node2);
+ assertFalse(node.equals(node2));
}
@Test
public void moreThanOneCriterium() throws Exception {
final PathNode node = PathNode.parse("a[b=c d=e]");
final PathNode node2 = PathNode.parse("a");
+ assertFalse(node.equals(node2));
+ }
+
+ @Test
+ public void sameCriterium() throws Exception {
+ final PathNode node = PathNode.parse("a[b=c]");
+ final PathNode node2 = PathNode.parse("a[b=c]");
assertEquals(node, node2);
}
@Test
- public void notEqual() throws Exception {
+ public void moreThenOneSameCriterium() throws Exception {
+ final PathNode node = PathNode.parse("a[b=c d=e]");
+ final PathNode node2 = PathNode.parse("a[d=e b=c]");
+ assertEquals(node, node2);
+ }
+
+ @Test
+ public void notEqualKey() throws Exception {
final PathNode node = PathNode.parse("a[b=c d=e]");
final PathNode node2 = PathNode.parse("b");
assertFalse(node.equals(node2));
}
+ @Test
+ public void notEqualCriterium() throws Exception {
+ final PathNode node = PathNode.parse("a[b=c]");
+ final PathNode node2 = PathNode.parse("a[b=d]");
+ assertFalse(node.equals(node2));
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNodeTest_split.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNodeTest_split.java b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNodeTest_split.java
new file mode 100644
index 0000000..a1a0eca
--- /dev/null
+++ b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/PathNodeTest_split.java
@@ -0,0 +1,56 @@
+/*
+ * 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.applib.util;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import org.junit.Test;
+
+public class PathNodeTest_split {
+
+ @Test
+ public void simple() throws Exception {
+ List<String> parts = PathNode.split("a.b.c");
+ assertThat(parts.size(), is(3));
+ }
+
+ @Test
+ public void withBrackets() throws Exception {
+ List<String> parts = PathNode.split("a[x=y].b[p=q].c");
+ assertThat(parts.size(), is(3));
+ }
+
+ @Test
+ public void withBracketsAndContainedDots() throws Exception {
+ List<String> parts = PathNode.split("a[m.n=s.t].b[p=q].c");
+ assertThat(parts.size(), is(3));
+ }
+
+ @Test
+ public void realistic() throws Exception {
+ List<String> parts = PathNode.split("links[rel=urn.restfulobjects:rels/user]");
+ assertThat(parts.size(), is(1));
+ assertThat(parts.get(0), is("links[rel=urn.restfulobjects:rels/user]"));
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
index 5cb08eb..84ed1bc 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
@@ -27,18 +27,18 @@ import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
public final class LinkBuilder {
- public static LinkBuilder newBuilder(final RendererContext resourceContext, final Rel rel, final RepresentationType representationType, final String hrefFormat, final Object... hrefArgs) {
+ 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);
}
- public static LinkBuilder newBuilder(final RendererContext resourceContext, final Rel rel, final MediaType mediaType, final String hrefFormat, final Object... hrefArgs) {
+ public static LinkBuilder newBuilder(final RendererContext resourceContext, final String rel, final MediaType mediaType, final String hrefFormat, final Object... hrefArgs) {
return new LinkBuilder(resourceContext, rel, String.format(hrefFormat, hrefArgs), mediaType);
}
private final RendererContext resourceContext;
private final JsonRepresentation representation = JsonRepresentation.newMap();
- private final Rel rel;
+ private final String rel;
private final String href;
private final MediaType mediaType;
@@ -48,7 +48,7 @@ public final class LinkBuilder {
private JsonRepresentation value;
private String id;
- protected LinkBuilder(final RendererContext resourceContext, final Rel rel, final String href, final MediaType mediaType) {
+ protected LinkBuilder(final RendererContext resourceContext, final String rel, final String href, final MediaType mediaType) {
this.resourceContext = resourceContext;
this.rel = rel;
this.href = href;
@@ -70,19 +70,13 @@ public final class LinkBuilder {
return this;
}
- public LinkBuilder withId(final String id) {
- this.id = id;
- return this;
- }
-
public LinkBuilder withValue(final JsonRepresentation value) {
this.value = value;
return this;
}
public JsonRepresentation build() {
- representation.mapPut("id", id);
- representation.mapPut("rel", rel.getName());
+ representation.mapPut("rel", rel);
representation.mapPut("href", resourceContext.urlFor(href));
representation.mapPut("method", method);
representation.mapPut("type", mediaType.toString());
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererFactoryRegistry.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererFactoryRegistry.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererFactoryRegistry.java
deleted file mode 100644
index 9a5421e..0000000
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererFactoryRegistry.java
+++ /dev/null
@@ -1,84 +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;
-
-import java.util.Map;
-
-import javax.ws.rs.core.MediaType;
-
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-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.ListReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectActionReprRenderer;
-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.domainobjects.ScalarValueReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.ActionDescriptionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.ActionParameterDescriptionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.CollectionDescriptionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.DomainTypeReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.PropertyDescriptionReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.TypeActionResultReprRenderer;
-import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.TypeListReprRenderer;
-
-import com.google.common.collect.Maps;
-
-public class RendererFactoryRegistry {
-
- // TODO: get rid of this horrible singleton
- public final static RendererFactoryRegistry instance = new RendererFactoryRegistry();
-
- private final Map<MediaType, RendererFactory> factoryByReprType = Maps.newHashMap();
-
- RendererFactoryRegistry() {
- registerDefaults();
- }
-
- private void registerDefaults() {
- register(new DomainObjectReprRenderer.Factory());
- register(new ObjectPropertyReprRenderer.Factory());
- register(new ObjectCollectionReprRenderer.Factory());
- register(new ObjectActionReprRenderer.Factory());
- register(new ActionResultReprRenderer.Factory());
- register(new ListReprRenderer.Factory());
- register(new ScalarValueReprRenderer.Factory());
- register(new TypeListReprRenderer.Factory());
- register(new DomainTypeReprRenderer.Factory());
- register(new PropertyDescriptionReprRenderer.Factory());
- register(new CollectionDescriptionReprRenderer.Factory());
- register(new ActionDescriptionReprRenderer.Factory());
- register(new ActionParameterDescriptionReprRenderer.Factory());
- register(new TypeActionResultReprRenderer.Factory());
- }
-
- public void register(final RendererFactory factory) {
- final RepresentationType representationType = factory.getRepresentationType();
- factoryByReprType.put(representationType.getMediaType(), factory);
- }
-
- public RendererFactory find(final MediaType mediaType) {
- return factoryByReprType.get(mediaType);
- }
-
- public RendererFactory find(final RepresentationType representationType) {
- return find(representationType.getMediaType());
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
index f1eecfe..1bbf026 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
@@ -33,22 +33,22 @@ import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.DomainTypeRep
public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>, T> implements ReprRenderer<R, T> {
- protected final RendererContext resourceContext;
+ protected final RendererContext rendererContext;
private final LinkFollower linkFollower;
private final RepresentationType representationType;
protected final JsonRepresentation representation;
protected boolean includesSelf;
- public ReprRendererAbstract(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
- this.resourceContext = resourceContext;
+ public ReprRendererAbstract(final RendererContext rendererContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
+ this.rendererContext = rendererContext;
this.linkFollower = asProvidedElseCreate(linkFollower);
this.representationType = representationType;
this.representation = representation;
}
- public RendererContext getResourceContext() {
- return resourceContext;
+ public RendererContext getRendererContext() {
+ return rendererContext;
}
public LinkFollower getLinkFollower() {
@@ -59,7 +59,7 @@ public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>,
if (linkFollower != null) {
return linkFollower;
}
- return LinkFollower.create(resourceContext.getFollowLinks());
+ return LinkFollower.create(rendererContext.getFollowLinks());
}
@Override
@@ -75,7 +75,7 @@ public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>,
public R withSelf(final String href) {
if (href != null) {
- getLinks().arrayAdd(LinkBuilder.newBuilder(resourceContext, Rel.SELF, representationType, href).build());
+ getLinks().arrayAdd(LinkBuilder.newBuilder(rendererContext, Rel.SELF.getName(), representationType, href).build());
}
return cast(this);
}
@@ -107,7 +107,7 @@ public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>,
if (objectSpec == null) {
return;
}
- final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), rel, objectSpec);
+ final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getRendererContext(), rel, objectSpec);
getLinks().arrayAdd(linkBuilder.build());
}
@@ -154,7 +154,7 @@ public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>,
final JsonRepresentation adapterList = JsonRepresentation.newArray();
getExtensions().mapPut(key, adapterList);
for (final ObjectAdapter adapter : adapters) {
- adapterList.arrayAdd(DomainObjectReprRenderer.newLinkToBuilder(getResourceContext(), Rel.OBJECT, adapter).build());
+ adapterList.arrayAdd(DomainObjectReprRenderer.newLinkToBuilder(getRendererContext(), Rel.VALUE, adapter).build());
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererFactoryAbstract.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererFactoryAbstract.java
deleted file mode 100644
index 69477db..0000000
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererFactoryAbstract.java
+++ /dev/null
@@ -1,36 +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;
-
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-
-public abstract class ReprRendererFactoryAbstract implements RendererFactory {
-
- private final RepresentationType representationType;
-
- public ReprRendererFactoryAbstract(final RepresentationType representationType) {
- this.representationType = representationType;
- }
-
- @Override
- public RepresentationType getRepresentationType() {
- return representationType;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
index 13713b1..c4d19e0 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
@@ -89,7 +89,7 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
* {@link #objectAdapter}).
*/
public R usingLinkTo(final ObjectAdapterLinkTo linkTo) {
- this.linkTo = linkTo.usingUrlBase(resourceContext).with(objectAdapter);
+ this.linkTo = linkTo.usingUrlBase(rendererContext).with(objectAdapter);
return cast(this);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
index d20b2ca..1ee3973 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
@@ -31,11 +31,7 @@ import org.apache.isis.viewer.restfulobjects.applib.domainobjects.ActionResultRe
import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
import org.apache.isis.viewer.restfulobjects.rendering.LinkFollower;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactory;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactoryRegistry;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRenderer;
import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererFactoryAbstract;
public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultReprRenderer, ObjectAndActionInvocation> {
@@ -46,20 +42,8 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
private JsonRepresentation arguments;
private ObjectAdapter returnedAdapter;
- public static class Factory extends ReprRendererFactoryAbstract {
-
- public Factory() {
- super(RepresentationType.ACTION_RESULT);
- }
-
- @Override
- public ReprRenderer<?, ?> newRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
- return new ActionResultReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
- }
- }
-
- private ActionResultReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
- super(resourceContext, linkFollower, representationType, representation);
+ public ActionResultReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
+ super(resourceContext, linkFollower, RepresentationType.ACTION_RESULT, representation);
}
@Override
@@ -116,8 +100,7 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
final Collection<ObjectAdapter> collectionAdapters = collectionFacet.collection(returnedAdapter);
- final RendererFactory factory = getRendererFactoryRegistry().find(RepresentationType.LIST);
- final ListReprRenderer renderer = (ListReprRenderer) factory.newRenderer(resourceContext, null, result);
+ final ListReprRenderer renderer = new ListReprRenderer(rendererContext, null, result);
renderer.with(collectionAdapters).withReturnType(action.getReturnType()).withElementType(returnedAdapter.getElementSpecification());
renderer.render();
@@ -128,9 +111,7 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
if (encodableFacet != null) {
// scalar
- final RendererFactory factory = getRendererFactoryRegistry().find(RepresentationType.SCALAR_VALUE);
-
- final ScalarValueReprRenderer renderer = (ScalarValueReprRenderer) factory.newRenderer(resourceContext, null, result);
+ final ScalarValueReprRenderer renderer = new ScalarValueReprRenderer(rendererContext, null, result);
renderer.with(returnedAdapter).withReturnType(action.getReturnType());
renderer.render();
@@ -140,8 +121,7 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
{
// object
- final RendererFactory factory = getRendererFactoryRegistry().find(RepresentationType.DOMAIN_OBJECT);
- final DomainObjectReprRenderer renderer = (DomainObjectReprRenderer) factory.newRenderer(resourceContext, null, result);
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(rendererContext, null, result);
renderer.with(returnedAdapter).includesSelf();
@@ -175,9 +155,4 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
return representation;
}
- protected RendererFactoryRegistry getRendererFactoryRegistry() {
- // TODO: yuck
- return RendererFactoryRegistry.instance;
- }
-
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
index 0234c87..d48df63 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
@@ -24,15 +24,16 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.util.OidUtils;
public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
- protected RendererContext resourceContext;
+ protected RendererContext rendererContext;
protected ObjectAdapter objectAdapter;
@Override
public final DomainObjectLinkTo usingUrlBase(final RendererContext resourceContext) {
- this.resourceContext = resourceContext;
+ this.rendererContext = resourceContext;
return this;
}
@@ -49,7 +50,7 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
@Override
public LinkBuilder builder(final Rel rel) {
- final LinkBuilder linkBuilder = LinkBuilder.newBuilder(resourceContext, relElseDefault(rel), RepresentationType.DOMAIN_OBJECT, linkRef());
+ final LinkBuilder linkBuilder = LinkBuilder.newBuilder(rendererContext, relElseDefault(rel).getName(), RepresentationType.DOMAIN_OBJECT, linkRef(new StringBuilder()).toString());
linkBuilder.withTitle(objectAdapter.titleString());
return linkBuilder;
}
@@ -57,19 +58,13 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
/**
* hook method
*/
- protected String linkRef() {
- if (resourceContext == null) {
- throw new IllegalStateException("resourceContext not provided");
- }
- if (objectAdapter == null) {
- throw new IllegalStateException("objectAdapter not provided");
- }
- final StringBuilder buf = new StringBuilder("objects/");
- buf.append(objectAdapter.getOid().enString(getOidMarshaller()));
- return buf.toString();
+ protected StringBuilder linkRef(StringBuilder buf) {
+ String domainType = OidUtils.getDomainType(objectAdapter);
+ String instanceId = OidUtils.getInstanceId(rendererContext, objectAdapter);
+ return buf.append("objects/").append(domainType).append("/").append(instanceId);
}
- private Rel relElseDefault(final Rel rel) {
+ protected Rel relElseDefault(final Rel rel) {
return rel != null ? rel : defaultRel();
}
@@ -77,7 +72,7 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
* hook method; used by {@link #builder(Rel)}.
*/
protected Rel defaultRel() {
- return Rel.OBJECT;
+ return Rel.VALUE;
}
@Override
@@ -87,7 +82,7 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
@Override
public final LinkBuilder memberBuilder(final Rel rel, final MemberType memberType, final ObjectMember objectMember, final RepresentationType representationType, final String... parts) {
- final StringBuilder buf = new StringBuilder(linkRef());
+ final StringBuilder buf = linkRef(new StringBuilder());
buf.append("/").append(memberType.getUrlPart()).append(objectMember.getId());
for (final String part : parts) {
if (part == null) {
@@ -96,7 +91,7 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
buf.append("/").append(part);
}
final String url = buf.toString();
- return LinkBuilder.newBuilder(resourceContext, rel, representationType, url);
+ return LinkBuilder.newBuilder(rendererContext, rel.getName(), representationType, url);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index 7185f58..42294aa 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -20,7 +20,6 @@ import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.facets.object.notpersistable.NotPersistableFacet;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
@@ -41,31 +40,17 @@ import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
import org.apache.isis.viewer.restfulobjects.rendering.LinkFollower;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactory;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererFactoryRegistry;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRenderer;
import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererFactoryAbstract;
import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.DomainTypeReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.util.OidUtils;
public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectReprRenderer, ObjectAdapter> {
- public static class Factory extends ReprRendererFactoryAbstract {
-
- public Factory() {
- super(RepresentationType.DOMAIN_OBJECT);
- }
-
- @Override
- public ReprRenderer<?, ?> newRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
- return new DomainObjectReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
- }
- }
-
- public static LinkBuilder newLinkToBuilder(final RendererContext resourceContext, final Rel rel, final ObjectAdapter elementAdapter) {
- final String oidStr = ((RootOid) elementAdapter.getOid()).enString(getOidMarshaller());
- final String url = "objects/" + oidStr;
- final LinkBuilder builder = LinkBuilder.newBuilder(resourceContext, rel, RepresentationType.DOMAIN_OBJECT, url).withTitle(elementAdapter.titleString());
+ public static LinkBuilder newLinkToBuilder(final RendererContext rendererContext, final Rel rel, final ObjectAdapter objectAdapter) {
+ String domainType = OidUtils.getDomainType(objectAdapter);
+ String instanceId = OidUtils.getInstanceId(rendererContext, objectAdapter);
+ final String url = "objects/" + domainType + "/" + instanceId;
+ final LinkBuilder builder = LinkBuilder.newBuilder(rendererContext, rel.getName(), RepresentationType.DOMAIN_OBJECT, url).withTitle(objectAdapter.titleString());
return builder;
}
@@ -102,8 +87,8 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
private ObjectAdapter objectAdapter;
private Mode mode = Mode.REGULAR;
- private DomainObjectReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
- super(resourceContext, linkFollower, representationType, representation);
+ public DomainObjectReprRenderer(final RendererContext resourceContext, final LinkFollower linkFollower, final JsonRepresentation representation) {
+ super(resourceContext, linkFollower, RepresentationType.DOMAIN_OBJECT, representation);
usingLinkToBuilder(new DomainObjectLinkTo());
}
@@ -112,7 +97,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
* generating links in {@link #linkTo(ObjectAdapter)}).
*/
public DomainObjectReprRenderer usingLinkToBuilder(final ObjectAdapterLinkTo objectAdapterLinkToBuilder) {
- this.linkToBuilder = objectAdapterLinkToBuilder.usingUrlBase(resourceContext);
+ this.linkToBuilder = objectAdapterLinkToBuilder.usingUrlBase(rendererContext);
return this;
}
@@ -156,7 +141,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
// described by
if (mode.includesDescribedBy()) {
- getLinks().arrayAdd(DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.DESCRIBEDBY, objectAdapter.getSpecification()).build());
+ getLinks().arrayAdd(DomainTypeReprRenderer.newLinkToBuilder(getRendererContext(), Rel.DESCRIBEDBY, objectAdapter.getSpecification()).build());
}
if (!mode.representsArguments()) {
@@ -173,8 +158,16 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
return representation;
}
+ private String getDomainType() {
+ return org.apache.isis.viewer.restfulobjects.rendering.util.OidUtils.getDomainType(objectAdapter);
+ }
+
+ private String getInstanceId() {
+ return org.apache.isis.viewer.restfulobjects.rendering.util.OidUtils.getInstanceId(rendererContext, objectAdapter);
+ }
+
private String getOidStr() {
- return org.apache.isis.viewer.restfulobjects.rendering.util.OidUtils.getOidStr(resourceContext, objectAdapter);
+ return org.apache.isis.viewer.restfulobjects.rendering.util.OidUtils.getOidStr(rendererContext, objectAdapter);
}
private DomainObjectReprRenderer withMembers(final ObjectAdapter objectAdapter) {
@@ -195,7 +188,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
for (final ObjectAssociation assoc : associations) {
if (mode.checkVisibility()) {
- final Consent visibility = assoc.isVisible(getAuthenticationSession(), objectAdapter, resourceContext.getWhere());
+ final Consent visibility = assoc.isVisible(getAuthenticationSession(), objectAdapter, rendererContext.getWhere());
if (!visibility.isAllowed()) {
continue;
}
@@ -203,8 +196,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
if (assoc instanceof OneToOneAssociation) {
final OneToOneAssociation property = (OneToOneAssociation) assoc;
- final RendererFactory factory = getRendererFactoryRegistry().find(RepresentationType.OBJECT_PROPERTY);
- final ObjectPropertyReprRenderer renderer = (ObjectPropertyReprRenderer) factory.newRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
+ final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
renderer.with(new ObjectAndProperty(objectAdapter, property)).usingLinkTo(linkToBuilder);
@@ -222,8 +214,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
if (assoc instanceof OneToManyAssociation) {
final OneToManyAssociation collection = (OneToManyAssociation) assoc;
- final RendererFactory factory = getRendererFactoryRegistry().find(RepresentationType.OBJECT_COLLECTION);
- final ObjectCollectionReprRenderer renderer = (ObjectCollectionReprRenderer) factory.newRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
+ final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
renderer.with(new ObjectAndCollection(objectAdapter, collection)).usingLinkTo(linkToBuilder);
@@ -235,7 +226,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
private void addActions(final ObjectAdapter objectAdapter, final List<ObjectAction> actions, final JsonRepresentation members) {
final LinkFollower linkFollower = getLinkFollower().follow("members");
for (final ObjectAction action : actions) {
- final Consent visibility = action.isVisible(getAuthenticationSession(), objectAdapter, resourceContext.getWhere());
+ final Consent visibility = action.isVisible(getAuthenticationSession(), objectAdapter, rendererContext.getWhere());
if (!visibility.isAllowed()) {
continue;
}
@@ -246,8 +237,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
} else {
- final RendererFactory factory = getRendererFactoryRegistry().find(RepresentationType.OBJECT_ACTION);
- final ObjectActionReprRenderer renderer = (ObjectActionReprRenderer) factory.newRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
+ final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
renderer.with(new ObjectAndAction(objectAdapter, action)).usingLinkTo(linkToBuilder);
@@ -263,11 +253,11 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
if(objectAdapter.getSpecification().containsDoOpFacet(NotPersistableFacet.class)) {
return;
}
- final RendererFactory rendererFactory = getRendererFactoryRegistry().find(RepresentationType.DOMAIN_OBJECT);
- final DomainObjectReprRenderer renderer = (DomainObjectReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), null, JsonRepresentation.newMap());
final JsonRepresentation domainObjectRepr = renderer.with(objectAdapter).asPersistLinkArguments().render();
- final LinkBuilder persistLinkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.PERSIST, RepresentationType.DOMAIN_OBJECT, "objects/").withHttpMethod(RestfulHttpMethod.POST).withArguments(domainObjectRepr);
+ final String domainType = objectAdapter.getSpecification().getSpecId().asString();
+ final LinkBuilder persistLinkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.PERSIST.getName(), RepresentationType.DOMAIN_OBJECT, "objects/%s", domainType).withHttpMethod(RestfulHttpMethod.POST).withArguments(domainObjectRepr);
getLinks().arrayAdd(persistLinkBuilder.build());
}
@@ -293,18 +283,13 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
return;
}
- final RendererFactory rendererFactory = getRendererFactoryRegistry().find(RepresentationType.DOMAIN_OBJECT);
- final DomainObjectReprRenderer renderer = (DomainObjectReprRenderer) rendererFactory.newRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), null, JsonRepresentation.newMap());
final JsonRepresentation domainObjectRepr = renderer.with(objectAdapter).asModifyPropertiesLinkArguments().render();
- final LinkBuilder persistLinkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.MODIFY, RepresentationType.DOMAIN_OBJECT, "objects/%s", getOidStr()).withHttpMethod(RestfulHttpMethod.PUT).withArguments(domainObjectRepr);
+ final LinkBuilder persistLinkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.MODIFY.getName(), RepresentationType.DOMAIN_OBJECT, "objects/%s/%s", getDomainType(), getInstanceId()).withHttpMethod(RestfulHttpMethod.PUT).withArguments(domainObjectRepr);
getLinks().arrayAdd(persistLinkBuilder.build());
}
- protected RendererFactoryRegistry getRendererFactoryRegistry() {
- return RendererFactoryRegistry.instance;
- }
-
// ///////////////////////////////////////////////////////////////////
//
// ///////////////////////////////////////////////////////////////////
@@ -316,7 +301,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
}
final TitleFacet titleFacet = objectSpec.getFacet(TitleFacet.class);
final String title = titleFacet.title(objectAdapter, resourceContext.getLocalization());
- return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.OBJECT, objectAdapter).withTitle(title).build();
+ return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.VALUE, objectAdapter).withTitle(title).build();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/e5093edb/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
index d17e5d7..11efae4 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
@@ -19,6 +19,7 @@ package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.services.ServiceUtil;
import org.apache.isis.viewer.restfulobjects.applib.Rel;
+import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
public class DomainServiceLinkTo extends DomainObjectLinkTo {
@@ -31,20 +32,25 @@ public class DomainServiceLinkTo extends DomainObjectLinkTo {
}
@Override
- protected String linkRef() {
- final StringBuilder buf = new StringBuilder("services/");
- buf.append(serviceId);
- return buf.toString();
+ public LinkBuilder builder(final Rel rel) {
+ final LinkBuilder linkBuilder = LinkBuilder.newBuilder(rendererContext,
+ relElseDefault(rel).andParam("serviceId", serviceId),
+ RepresentationType.DOMAIN_OBJECT,
+ linkRef(new StringBuilder()).toString());
+ linkBuilder.withTitle(objectAdapter.titleString());
+ return linkBuilder;
}
+
@Override
- protected Rel defaultRel() {
- return Rel.SERVICE;
+ protected StringBuilder linkRef(StringBuilder buf) {
+ return buf.append("services/").append(serviceId);
}
@Override
- public LinkBuilder builder(final Rel rel) {
- return super.builder(rel).withId(serviceId);
+ protected Rel defaultRel() {
+ return Rel.SERVICE;
}
+
}
\ No newline at end of file