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 2014/10/09 13:23:21 UTC
[1/4] git commit: ISIS-917: first cut at a pluggable representations
service for RO.
Repository: isis
Updated Branches:
refs/heads/ISIS-917 bfece661b -> 6907534b4
ISIS-917: first cut at a pluggable representations service for RO.
Fix for NPE when app runs (previous commit lied), tests still failing.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/064c42e9
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/064c42e9
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/064c42e9
Branch: refs/heads/ISIS-917
Commit: 064c42e921a3fafbc5d83960b4e31e3715d0aa3c
Parents: bfece66
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Oct 8 12:06:31 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Oct 8 12:06:31 2014 +0100
----------------------------------------------------------------------
.../server/resources/ResponseGeneratorService.java | 4 ----
1 file changed, 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/064c42e9/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResponseGeneratorService.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResponseGeneratorService.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResponseGeneratorService.java
index 796f537..dcddc6d 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResponseGeneratorService.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResponseGeneratorService.java
@@ -58,11 +58,7 @@ public class ResponseGeneratorService {
final ResourceContext resourceContext = responseContext.getResourceContext();
final ObjectAdapter objectAdapter = responseContext.getObjectAdapter();
- final ObjectAdapterLinkTo adapterLinkTo = responseContext.getAdapterLinkTo();
-
- ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
- resourceContext.canEagerlyRender(null);
final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(resourceContext, null, JsonRepresentation.newMap());
renderer.with(objectAdapter).includesSelf();
[4/4] git commit: ISIS-917: further refactorings to simplify the API
of the (newly rechristened) RepresentationService.
Posted by da...@apache.org.
ISIS-917: further refactorings to simplify the API of the (newly rechristened) RepresentationService.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/6907534b
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/6907534b
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/6907534b
Branch: refs/heads/ISIS-917
Commit: 6907534b421daa083cd5b96b9a0a476e64c2e8e9
Parents: 9af7833
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Oct 9 12:23:14 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Oct 9 12:23:14 2014 +0100
----------------------------------------------------------------------
.../ServicesInstallerFromAnnotation.java | 3 +-
.../AbstractObjectMemberRepresentation.java | 2 +-
.../restfulobjects/rendering/Caching.java | 43 +++
.../rendering/HasHttpStatusCode.java | 26 ++
.../rendering/RendererContext.java | 10 +-
.../restfulobjects/rendering/Responses.java | 64 +++++
.../RestfulObjectsApplicationException.java | 69 +++++
.../AbstractObjectMemberReprRenderer.java | 9 +
.../domainobjects/ActionResultReprRenderer.java | 4 +
.../rendering/domainobjects/MemberReprMode.java | 29 ++
.../domainobjects/ObjectActionReprRenderer.java | 13 +-
.../ObjectCollectionReprRenderer.java | 17 +-
.../ObjectPropertyReprRenderer.java | 12 +-
.../service/RepresentationService.java | 61 +++++
.../RepresentationServiceForRestfulObjects.java | 146 ++++++++++
.../rendering/util/JsonWriterUtil.java | 41 +++
.../restfulobjects/rendering/util/Util.java | 107 ++++++++
.../server/HasHttpStatusCode.java | 26 --
.../restfulobjects/server/ResourceContext.java | 8 +-
.../RestfulObjectsApplicationException.java | 56 +---
...estfulObjectsApplicationExceptionMapper.java | 2 +
.../DomainObjectResourceServerside.java | 27 +-
.../server/resources/DomainResourceHelper.java | 235 +++++++++++++---
.../DomainServiceResourceServerside.java | 4 +-
.../resources/DomainTypeResourceServerside.java | 5 +-
.../resources/HomePageResourceServerside.java | 4 +-
.../server/resources/JsonParserHelper.java | 54 ++--
.../server/resources/ObjectActionArgHelper.java | 12 +-
.../resources/ObjectAdapterAccessHelper.java | 39 +--
.../server/resources/ResourceAbstract.java | 54 +---
.../resources/ResponseGeneratorService.java | 269 -------------------
.../server/resources/Responses.java | 64 -----
.../resources/UserResourceServerside.java | 4 +-
.../restfulobjects/server/resources/Util.java | 124 ---------
.../resources/VersionResourceServerside.java | 4 +-
.../server/util/NOTUSED_PathUtils.java | 40 +++
.../restfulobjects/server/util/OidUtils.java | 19 +-
.../restfulobjects/server/util/PathUtils.java | 40 ---
.../server/util/UrlParserUtils.java | 20 +-
...ontextTest_ensureCompatibleAcceptHeader.java | 1 +
...ulObjectsApplicationExceptionMapperTest.java | 1 +
.../DomainResourceHelperTest_readBodyAsMap.java | 3 +-
.../server/resources/JsonParserHelpTest.java | 36 +++
.../server/util/UrlParserUtilsTest.java | 13 +-
.../webapp/CustomRepresentationService.java | 32 +++
.../webapp/CustomResponseGeneratorService.java | 32 ---
.../src/main/webapp/WEB-INF/isis.properties | 2 +-
47 files changed, 1080 insertions(+), 806 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
index e325c06..8b2400b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
@@ -64,8 +64,7 @@ public class ServicesInstallerFromAnnotation extends InstallerAbstract implement
",org.apache.isis.core.metamodel.services" +
",org.apache.isis.core.runtime.services" +
",org.apache.isis.objectstore.jdo.applib.service" +
- ",org.apache.isis.viewer.restfulobjects.server.resources" +
- ",org.apache.isis.viewer.restfulobjects.rendering.eventserializer" +
+ ",org.apache.isis.viewer.restfulobjects.rendering.service" +
",org.apache.isis.objectstore.jdo.datanucleus.service.support" +
",org.apache.isis.objectstore.jdo.datanucleus.service.eventbus";
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/AbstractObjectMemberRepresentation.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/AbstractObjectMemberRepresentation.java b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/AbstractObjectMemberRepresentation.java
index d2de410..fc0c74f 100644
--- a/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/AbstractObjectMemberRepresentation.java
+++ b/core/viewer-restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/domainobjects/AbstractObjectMemberRepresentation.java
@@ -18,8 +18,8 @@
*/
package org.apache.isis.viewer.restfulobjects.applib.domainobjects;
-import org.apache.isis.viewer.restfulobjects.applib.LinkRepresentation;
import org.codehaus.jackson.JsonNode;
+import org.apache.isis.viewer.restfulobjects.applib.LinkRepresentation;
public abstract class AbstractObjectMemberRepresentation extends DomainRepresentation {
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Caching.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Caching.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Caching.java
new file mode 100644
index 0000000..345861d
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Caching.java
@@ -0,0 +1,43 @@
+/*
+ * 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 javax.ws.rs.core.CacheControl;
+
+public enum Caching {
+
+ ONE_DAY(24 * 60 * 60),
+ ONE_HOUR(60 * 60),
+ NONE(0);
+
+ private final CacheControl cacheControl;
+
+ Caching(final int maxAge) {
+ this.cacheControl = new CacheControl();
+ if (maxAge > 0) {
+ cacheControl.setMaxAge(maxAge);
+ } else {
+ cacheControl.setNoCache(true);
+ }
+ }
+
+ public CacheControl getCacheControl() {
+ return cacheControl;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/HasHttpStatusCode.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/HasHttpStatusCode.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/HasHttpStatusCode.java
new file mode 100644
index 0000000..cb35092
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/HasHttpStatusCode.java
@@ -0,0 +1,26 @@
+/*
+ * 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.client.RestfulResponse.HttpStatusCode;
+
+public interface HasHttpStatusCode {
+
+ HttpStatusCode getHttpStatusCode();
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java
index 6b8a7f5..6af0f9f 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java
@@ -19,14 +19,12 @@
package org.apache.isis.viewer.restfulobjects.rendering;
import java.util.List;
-
import org.apache.isis.applib.annotation.Render;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.profiles.Localization;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
@@ -38,13 +36,11 @@ public interface RendererContext {
public IsisConfiguration getConfiguration();
- public AdapterManager getAdapterManager();
-
public PersistenceSession getPersistenceSession();
-
- public List<List<String>> getFollowLinks();
-
+
public Where getWhere();
+
+ public List<List<String>> getFollowLinks();
public Localization getLocalization();
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/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
new file mode 100644
index 0000000..e4420c1
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Responses.java
@@ -0,0 +1,64 @@
+/**
+ * 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.Date;
+import javax.ws.rs.core.EntityTag;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.joda.time.DateTime;
+import org.joda.time.format.ISODateTimeFormat;
+import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
+import org.apache.isis.viewer.restfulobjects.rendering.util.JsonWriterUtil;
+
+public final class Responses {
+
+ private Responses(){}
+
+ public static Response.ResponseBuilder ofNoContent() {
+ return of(RestfulResponse.HttpStatusCode.NO_CONTENT);
+ }
+
+ public static Response.ResponseBuilder ofOk(final ReprRenderer<?, ?> renderer, final Caching caching) {
+ return ofOk(renderer, caching, null);
+ }
+
+ public static Response.ResponseBuilder ofOk(final ReprRenderer<?, ?> renderer, final Caching caching, final Version version) {
+ final MediaType mediaType = renderer.getMediaType();
+ final Response.ResponseBuilder response = of(RestfulResponse.HttpStatusCode.OK).type(mediaType).cacheControl(caching.getCacheControl()).entity(JsonWriterUtil.jsonFor(renderer.render()));
+ return addLastModifiedAndETagIfAvailable(response, version);
+ }
+
+ protected static Response.ResponseBuilder of(final RestfulResponse.HttpStatusCode httpStatusCode) {
+ return Response.status(httpStatusCode.getJaxrsStatusType()).type(MediaType.APPLICATION_JSON_TYPE);
+ }
+
+ public static Response.ResponseBuilder addLastModifiedAndETagIfAvailable(final Response.ResponseBuilder responseBuilder, final Version version) {
+ if (version != null && version.getTime() != null) {
+ final Date time = version.getTime();
+ responseBuilder.lastModified(time);
+ responseBuilder.tag(asETag(time));
+ }
+ return responseBuilder;
+ }
+
+ private static EntityTag asETag(final Date time) {
+ final String utcTime = ISODateTimeFormat.basicDateTime().print(new DateTime(time));
+ return new EntityTag(utcTime, true);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RestfulObjectsApplicationException.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RestfulObjectsApplicationException.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RestfulObjectsApplicationException.java
new file mode 100644
index 0000000..77e3765
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RestfulObjectsApplicationException.java
@@ -0,0 +1,69 @@
+/*
+ * 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.JsonRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
+
+public class RestfulObjectsApplicationException extends RuntimeException implements HasHttpStatusCode {
+
+ public static final RestfulObjectsApplicationException create(final HttpStatusCode httpStatusCode) {
+ return createWithCause(httpStatusCode, null);
+ }
+
+ public static RestfulObjectsApplicationException createWithMessage(final HttpStatusCode httpStatusCode, final String message, final Object... args) {
+ return createWithCauseAndMessage(httpStatusCode, (Exception) null, message, args);
+ }
+
+ public static RestfulObjectsApplicationException createWithCause(final HttpStatusCode httpStatusCode, final Exception cause) {
+ return createWithCauseAndMessage(httpStatusCode, cause, null);
+ }
+
+ public static RestfulObjectsApplicationException createWithCauseAndMessage(final HttpStatusCode httpStatusCode, final Exception cause, final String message, final Object... args) {
+ return new RestfulObjectsApplicationException(httpStatusCode, formatString(message, args), cause, null);
+ }
+
+ public static RestfulObjectsApplicationException createWithBody(final HttpStatusCode httpStatusCode, final JsonRepresentation body, final String message, final Object... args) {
+ return new RestfulObjectsApplicationException(httpStatusCode, formatString(message, args), null, body);
+ }
+
+ private static String formatString(final String formatStr, final Object... args) {
+ return formatStr != null ? String.format(formatStr, args) : null;
+ }
+
+ private static final long serialVersionUID = 1L;
+ private final HttpStatusCode httpStatusCode;
+ private final JsonRepresentation body;
+
+ protected RestfulObjectsApplicationException(final HttpStatusCode httpStatusCode, final String message, final Throwable cause, final JsonRepresentation body) {
+ super(message, cause);
+ this.httpStatusCode = httpStatusCode;
+ this.body = body;
+ }
+
+ @Override
+ public HttpStatusCode getHttpStatusCode() {
+ return httpStatusCode;
+ }
+
+ public JsonRepresentation getBody() {
+ return body;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
index c2d2622..d7f187c 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
@@ -33,6 +33,7 @@ import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbstract<R, ObjectAndMember<T>>, T extends ObjectMember> extends ReprRendererAbstract<R, ObjectAndMember<T>> {
+
protected enum Mode {
INLINE, FOLLOWED, STANDALONE, MUTATED, ARGUMENTS, EVENT_SERIALIZATION;
@@ -179,6 +180,14 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
}
}
+ public void withMemberMode(MemberReprMode memberMode) {
+ if(memberMode == MemberReprMode.WRITE) {
+ this.asMutated();
+ } else {
+ this.asStandalone();
+ }
+ }
+
private void addLinkToSelf() {
getLinks().arrayAdd(linkTo.memberBuilder(Rel.SELF, objectMemberType, objectMember).build());
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
index e5df49a..dabdf02 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
@@ -50,6 +50,10 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
INCLUDED, EXCLUDED
}
+ public ActionResultReprRenderer(final RendererContext rendererContext, final SelfLink selfLink) {
+ this(rendererContext, null, selfLink, JsonRepresentation.newMap());
+ }
+
public ActionResultReprRenderer(final RendererContext rendererContext, final LinkFollowSpecs linkFollower, final SelfLink selfLink, final JsonRepresentation representation) {
super(rendererContext, linkFollower, RepresentationType.ACTION_RESULT, representation);
this.selfLink = selfLink;
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/MemberReprMode.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/MemberReprMode.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/MemberReprMode.java
new file mode 100644
index 0000000..aa90aa0
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/MemberReprMode.java
@@ -0,0 +1,29 @@
+/*
+ * 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.domainobjects;
+
+/**
+ * Some representations may vary according to whether the member is to be represented for read
+ * (render the state of the property or collection) or for write (render additional hypermedia controls to allow
+ * the property to be modified/cleared, or the collection to be added to/removed from).
+*/
+public enum MemberReprMode {
+ READ,
+ WRITE;
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
index 187c448..84d512d 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
@@ -18,7 +18,9 @@ package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
import java.util.List;
import java.util.Map;
-
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.codehaus.jackson.node.NullNode;
import org.apache.isis.applib.annotation.ActionSemantics;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -32,13 +34,12 @@ import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.ActionDescriptionReprRenderer;
-import org.codehaus.jackson.node.NullNode;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<ObjectActionReprRenderer, ObjectAction> {
+ public ObjectActionReprRenderer(RendererContext rendererContext) {
+ this(rendererContext, null, null, JsonRepresentation.newMap());
+ }
+
public ObjectActionReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollowSpecs, String actionId, final JsonRepresentation representation) {
super(resourceContext, linkFollowSpecs, actionId, RepresentationType.OBJECT_ACTION, representation, Where.OBJECT_FORMS);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
index 4639386..7f09c09 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
@@ -18,7 +18,7 @@ package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
import java.util.List;
import java.util.Map;
-
+import com.google.common.collect.Lists;
import org.apache.isis.applib.annotation.Render.Type;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -34,12 +34,19 @@ import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.CollectionDescriptionReprRenderer;
-import com.google.common.collect.Lists;
-
public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRenderer<ObjectCollectionReprRenderer, OneToManyAssociation> {
- public ObjectCollectionReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final String collectionId, final JsonRepresentation representation) {
- super(resourceContext, linkFollower, collectionId, RepresentationType.OBJECT_COLLECTION, representation, Where.PARENTED_TABLES);
+ public ObjectCollectionReprRenderer(
+ final RendererContext resourceContext) {
+ this(resourceContext, null, null, JsonRepresentation.newMap());
+ }
+
+ public ObjectCollectionReprRenderer(
+ final RendererContext resourceContext,
+ final LinkFollowSpecs linkFollowSpecs,
+ final String collectionId,
+ final JsonRepresentation representation) {
+ super(resourceContext, linkFollowSpecs, collectionId, RepresentationType.OBJECT_COLLECTION, representation, Where.PARENTED_TABLES);
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index f59181e..09e329f 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -41,7 +41,16 @@ import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.PropertyDescr
public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAssociation> {
- public ObjectPropertyReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final String propertyId, final JsonRepresentation representation) {
+ public ObjectPropertyReprRenderer(
+ final RendererContext resourceContext) {
+ this(resourceContext, null, null, JsonRepresentation.newMap());
+ }
+
+ public ObjectPropertyReprRenderer(
+ final RendererContext resourceContext,
+ final LinkFollowSpecs linkFollower,
+ final String propertyId,
+ final JsonRepresentation representation) {
super(resourceContext, linkFollower, propertyId, RepresentationType.OBJECT_PROPERTY, representation, Where.OBJECT_FORMS);
}
@@ -211,4 +220,5 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
// none
}
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
new file mode 100644
index 0000000..0362160
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.isis.viewer.restfulobjects.rendering.service;
+
+import javax.ws.rs.core.Response;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.*;
+
+/**
+ * This interface is EXPERIMENTAL and may change in the future.
+ */
+public interface RepresentationService {
+
+ @Programmatic
+ Response objectRepresentation(
+ Context resourceContext,
+ ObjectAdapter objectAdapter);
+
+ @Programmatic
+ Response propertyDetails(
+ Context rendererContext,
+ ObjectAndProperty objectAndProperty,
+ MemberReprMode memberReprMode);
+
+ @Programmatic
+ Response collectionDetails(
+ Context rendererContext,
+ ObjectAndCollection objectAndCollection,
+ MemberReprMode memberReprMode);
+
+ @Programmatic
+ Response actionPrompt(
+ Context rendererContext,
+ ObjectAndAction objectAndAction);
+
+ @Programmatic
+ Response actionResult(
+ Context rendererContext,
+ ObjectAndActionInvocation objectAndActionInvocation,
+ ActionResultReprRenderer.SelfLink selfLink);
+
+ public static interface Context extends RendererContext {
+ ObjectAdapterLinkTo getAdapterLinkTo();
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceForRestfulObjects.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceForRestfulObjects.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceForRestfulObjects.java
new file mode 100644
index 0000000..0691684
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceForRestfulObjects.java
@@ -0,0 +1,146 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.isis.viewer.restfulobjects.rendering.service;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+import org.apache.isis.viewer.restfulobjects.rendering.Caching;
+import org.apache.isis.viewer.restfulobjects.rendering.Responses;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.*;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer.SelfLink;
+
+@DomainService
+public class RepresentationServiceForRestfulObjects implements RepresentationService {
+
+ private static final DateFormat ETAG_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
+
+ // //////////////////////////////////////////////////////////////
+ // objectRepresentation
+ // //////////////////////////////////////////////////////////////
+
+ @Override
+ @Programmatic
+ public Response objectRepresentation(
+ final Context resourceContext,
+ final ObjectAdapter objectAdapter) {
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(resourceContext, null, JsonRepresentation.newMap());
+ renderer.with(objectAdapter).includesSelf();
+
+ final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
+
+ final Version version = objectAdapter.getVersion();
+ if (version != null && version.getTime() != null) {
+ responseBuilder.tag(ETAG_FORMAT.format(version.getTime()));
+ }
+ return buildResponse(responseBuilder);
+ }
+
+ // //////////////////////////////////////////////////////////////
+ // propertyDetails
+ // //////////////////////////////////////////////////////////////
+
+
+ @Override
+ @Programmatic
+ public Response propertyDetails(
+ final Context rendererContext,
+ final ObjectAndProperty objectAndProperty,
+ final MemberReprMode memberReprMode) {
+
+ final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(rendererContext);
+ renderer.with(objectAndProperty)
+ .usingLinkTo(rendererContext.getAdapterLinkTo())
+ .withMemberMode(memberReprMode);
+
+ final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
+ return buildResponse(responseBuilder);
+ }
+
+ // //////////////////////////////////////////////////////////////
+ // collectionDetails
+ // //////////////////////////////////////////////////////////////
+
+ @Override
+ @Programmatic
+ public Response collectionDetails(
+ final Context rendererContext,
+ final ObjectAndCollection objectAndCollection,
+ final MemberReprMode memberReprMode) {
+
+ final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(rendererContext);
+ renderer.with(objectAndCollection)
+ .usingLinkTo(rendererContext.getAdapterLinkTo())
+ .withMemberMode(memberReprMode);
+
+ final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
+ return buildResponse(responseBuilder);
+ }
+
+ // //////////////////////////////////////////////////////////////
+ // action Prompt
+ // //////////////////////////////////////////////////////////////
+
+ @Override
+ @Programmatic
+ public Response actionPrompt(
+ final Context rendererContext,
+ final ObjectAndAction objectAndAction) {
+
+ final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(rendererContext);
+ renderer.with(objectAndAction)
+ .usingLinkTo(rendererContext.getAdapterLinkTo())
+ .asStandalone();
+
+ final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
+ return buildResponse(responseBuilder);
+ }
+
+ // //////////////////////////////////////////////////////////////
+ // action Result
+ // //////////////////////////////////////////////////////////////
+
+ @Override
+ @Programmatic
+ public Response actionResult(
+ final Context rendererContext,
+ final ObjectAndActionInvocation objectAndActionInvocation,
+ final SelfLink selfLink) {
+
+ final ActionResultReprRenderer renderer = new ActionResultReprRenderer(rendererContext, selfLink);
+ renderer.with(objectAndActionInvocation)
+ .using(rendererContext.getAdapterLinkTo());
+
+ final ResponseBuilder respBuilder = Responses.ofOk(renderer, Caching.NONE);
+ Responses.addLastModifiedAndETagIfAvailable(respBuilder, objectAndActionInvocation.getObjectAdapter().getVersion());
+ return buildResponse(respBuilder);
+ }
+
+ /**
+ * Overridable to allow further customization.
+ */
+ protected Response buildResponse(final ResponseBuilder responseBuilder) {
+ return responseBuilder.build();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/JsonWriterUtil.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
new file mode 100644
index 0000000..df90789
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
@@ -0,0 +1,41 @@
+/*
+ * 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.util;
+
+import java.io.IOException;
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
+
+public final class JsonWriterUtil {
+
+ private JsonWriterUtil(){}
+
+ public static String jsonFor(final Object object) {
+ try {
+ return JsonMapper.instance().write(object);
+ } catch (final JsonGenerationException e) {
+ throw new RuntimeException(e);
+ } catch (final JsonMappingException e) {
+ throw new RuntimeException(e);
+ } catch (final IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/Util.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/Util.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/Util.java
new file mode 100644
index 0000000..341b2ac
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/Util.java
@@ -0,0 +1,107 @@
+/**
+ * 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.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+import com.google.common.base.Charsets;
+import com.google.common.io.ByteStreams;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
+import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+
+public final class Util {
+
+ private Util(){}
+
+ // //////////////////////////////////////////////////////////////
+ // parsing
+ // //////////////////////////////////////////////////////////////
+
+ /**
+ * Parse {@link java.io.InputStream} to String, else throw exception
+ */
+ public static String asStringUtf8(final InputStream body) {
+ try {
+ final byte[] byteArray = ByteStreams.toByteArray(body);
+ return new String(byteArray, Charsets.UTF_8);
+ } catch (final IOException e) {
+ throw RestfulObjectsApplicationException.createWithCauseAndMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, e, "could not read body");
+ }
+ }
+
+ /**
+ * Parse (body) string to {@link org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation}, else throw exception
+ */
+ public static JsonRepresentation readAsMap(final String body) {
+ if (body == null) {
+ return JsonRepresentation.newMap();
+ }
+ final String bodyTrimmed = body.trim();
+ if (bodyTrimmed.isEmpty()) {
+ return JsonRepresentation.newMap();
+ }
+ return read(bodyTrimmed, "body");
+ }
+
+ /**
+ * Parse (query) string to {@link org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation}, else throw exception
+ */
+ public static JsonRepresentation readQueryStringAsMap(final String queryString) {
+ if (queryString == null) {
+ return JsonRepresentation.newMap();
+ }
+ final String queryStringTrimmed = queryString.trim();
+ if (queryStringTrimmed.isEmpty()) {
+ return JsonRepresentation.newMap();
+ }
+ return read(queryStringTrimmed, "query string");
+ }
+
+ /**
+ * REVIEW - looks similar to above methods, but now unused; can it be deleted?
+ */
+ public static JsonRepresentation readParameterMapAsMap(final Map<String, String[]> parameterMap) {
+ final JsonRepresentation map = JsonRepresentation.newMap();
+ for (final Map.Entry<String, String[]> parameter : parameterMap.entrySet()) {
+ map.mapPut(parameter.getKey(), parameter.getValue()[0]);
+ }
+ return map;
+ }
+
+ private static JsonRepresentation read(final String args, final String argsNature) {
+ try {
+ final JsonRepresentation jsonRepr = JsonMapper.instance().read(args);
+ if (!jsonRepr.isMap()) {
+ throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, "could not read %s as a JSON map", argsNature);
+ }
+ return jsonRepr;
+ } catch (final JsonParseException e) {
+ throw RestfulObjectsApplicationException.createWithCauseAndMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, e, "could not parse %s", argsNature);
+ } catch (final JsonMappingException e) {
+ throw RestfulObjectsApplicationException.createWithCauseAndMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, e, "could not read %s as JSON", argsNature);
+ } catch (final IOException e) {
+ throw RestfulObjectsApplicationException.createWithCauseAndMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, e, "could not parse %s", argsNature);
+ }
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/HasHttpStatusCode.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/HasHttpStatusCode.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/HasHttpStatusCode.java
deleted file mode 100644
index 13cc919..0000000
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/HasHttpStatusCode.java
+++ /dev/null
@@ -1,26 +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.server;
-
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
-
-public interface HasHttpStatusCode {
-
- HttpStatusCode getHttpStatusCode();
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
index efa2d7a..46b602a 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
@@ -41,7 +41,8 @@ import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.Domain
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.RequestParameter;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
-import org.apache.isis.viewer.restfulobjects.server.resources.Util;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
public class ResourceContext implements RendererContext {
@@ -118,8 +119,8 @@ public class ResourceContext implements RendererContext {
private void ensureDomainModelQueryParamSupported() {
final DomainModel domainModel = getArg(RequestParameter.DOMAIN_MODEL);
if(domainModel != DomainModel.FORMAL) {
- throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.BAD_REQUEST,
- "x-ro-domain-model of '%s' is not supported", domainModel);
+ throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.BAD_REQUEST,
+ "x-ro-domain-model of '%s' is not supported", domainModel);
}
}
@@ -238,7 +239,6 @@ public class ResourceContext implements RendererContext {
}
-
public Localization getLocalization() {
return localization;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationException.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationException.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationException.java
index 01948f7..7f0d36e 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationException.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationException.java
@@ -19,51 +19,19 @@
package org.apache.isis.viewer.restfulobjects.server;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
-public class RestfulObjectsApplicationException extends RuntimeException implements HasHttpStatusCode {
-
- public static final RestfulObjectsApplicationException create(final HttpStatusCode httpStatusCode) {
- return createWithCause(httpStatusCode, null);
- }
-
- public static RestfulObjectsApplicationException createWithMessage(final HttpStatusCode httpStatusCode, final String message, final Object... args) {
- return createWithCauseAndMessage(httpStatusCode, (Exception) null, message, args);
- }
-
- public static RestfulObjectsApplicationException createWithCause(final HttpStatusCode httpStatusCode, final Exception cause) {
- return createWithCauseAndMessage(httpStatusCode, cause, null);
- }
-
- public static RestfulObjectsApplicationException createWithCauseAndMessage(final HttpStatusCode httpStatusCode, final Exception cause, final String message, final Object... args) {
- return new RestfulObjectsApplicationException(httpStatusCode, formatString(message, args), cause, null);
- }
-
- public static RestfulObjectsApplicationException createWithBody(final HttpStatusCode httpStatusCode, final JsonRepresentation body, final String message, final Object... args) {
- return new RestfulObjectsApplicationException(httpStatusCode, formatString(message, args), null, body);
- }
-
- private static String formatString(final String formatStr, final Object... args) {
- return formatStr != null ? String.format(formatStr, args) : null;
- }
-
- private static final long serialVersionUID = 1L;
- private final HttpStatusCode httpStatusCode;
- private final JsonRepresentation body;
-
- private RestfulObjectsApplicationException(final HttpStatusCode httpStatusCode, final String message, final Throwable cause, final JsonRepresentation body) {
- super(message, cause);
- this.httpStatusCode = httpStatusCode;
- this.body = body;
- }
-
- @Override
- public HttpStatusCode getHttpStatusCode() {
- return httpStatusCode;
- }
+/**
+ * For backward compatibility only.
+ */
+@Deprecated
+public class RestfulObjectsApplicationException extends org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException {
- public JsonRepresentation getBody() {
- return body;
+ public RestfulObjectsApplicationException(
+ final RestfulResponse.HttpStatusCode httpStatusCode,
+ final String message,
+ final Throwable cause,
+ final JsonRepresentation body) {
+ super(httpStatusCode, message, cause, body);
}
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
index 0c9eb4b..4236704 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
@@ -33,6 +33,8 @@ import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
+import org.apache.isis.viewer.restfulobjects.rendering.HasHttpStatusCode;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
//@Path("/") // FIXME: workaround for TomEE ... but breaks the RestEasy TCK tests so commented out:-(
@Provider
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
index 9d63296..895a250 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
@@ -35,7 +35,9 @@ import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
import org.apache.isis.viewer.restfulobjects.applib.domainobjects.DomainObjectResource;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberReprMode;
+import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
@Path("/objects")
public class DomainObjectResourceServerside extends ResourceAbstract implements DomainObjectResource {
@@ -163,7 +165,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
final DomainResourceHelper helper = getDomainResourceHelper(objectAdapter);
- return helper.propertyDetails(propertyId, ResponseGeneratorService.MemberMode.NOT_MUTATING, Caching.NONE);
+ return helper.propertyDetails(
+ propertyId,
+ MemberReprMode.READ
+ );
}
@Override
@@ -192,7 +197,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
property.set(objectAdapter, argAdapter);
- return helper.propertyDetails(propertyId, ResponseGeneratorService.MemberMode.MUTATING, Caching.NONE);
+ return helper.propertyDetails(
+ propertyId,
+ MemberReprMode.WRITE
+ );
}
@Override
@@ -216,7 +224,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
property.set(objectAdapter, null);
- return helper.propertyDetails(propertyId, ResponseGeneratorService.MemberMode.MUTATING, Caching.NONE);
+ return helper.propertyDetails(
+ propertyId,
+ MemberReprMode.WRITE
+ );
}
@Override
@@ -238,7 +249,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
final DomainResourceHelper helper = getDomainResourceHelper(objectAdapter);
- return helper.collectionDetails(collectionId, ResponseGeneratorService.MemberMode.NOT_MUTATING, Caching.NONE);
+ return helper.collectionDetails(collectionId, MemberReprMode.READ);
}
@Override
@@ -271,7 +282,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
collection.addElement(objectAdapter, argAdapter);
- return helper.collectionDetails(collectionId, ResponseGeneratorService.MemberMode.MUTATING, Caching.NONE);
+ return helper.collectionDetails(collectionId, MemberReprMode.WRITE);
}
@Override
@@ -304,7 +315,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
collection.addElement(objectAdapter, argAdapter);
- return helper.collectionDetails(collectionId, ResponseGeneratorService.MemberMode.MUTATING, Caching.NONE);
+ return helper.collectionDetails(collectionId, MemberReprMode.WRITE);
}
@Override
@@ -331,7 +342,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
collection.removeElement(objectAdapter, argAdapter);
- return helper.collectionDetails(collectionId, ResponseGeneratorService.MemberMode.MUTATING, Caching.NONE);
+ return helper.collectionDetails(collectionId, MemberReprMode.WRITE);
}
// //////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
index db04307..9b623ba 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
@@ -16,19 +16,87 @@
*/
package org.apache.isis.viewer.restfulobjects.server.resources;
+import java.util.List;
import javax.ws.rs.core.Response;
+import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.profiles.Localization;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectLinkTo;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAdapterLinkTo;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.*;
+import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.server.resources.ResourceAbstract.Caching;
-public class DomainResourceHelper implements ResponseGeneratorService.ResponseContext {
+public class DomainResourceHelper {
- private final ResponseGeneratorService generatorService;
+ static class RepresentationServiceContextAdapter implements RepresentationService.Context {
+
+ private final RendererContext rendererContext;
+ private final ObjectAdapterLinkTo adapterLinkTo;
+
+ RepresentationServiceContextAdapter(final RendererContext rendererContext, final ObjectAdapterLinkTo adapterLinkTo) {
+ this.rendererContext = rendererContext;
+ this.adapterLinkTo = adapterLinkTo;
+ }
+
+ @Override
+ public ObjectAdapterLinkTo getAdapterLinkTo() {
+ return adapterLinkTo;
+ }
+
+ @Override
+ public String urlFor(String url) {
+ return rendererContext.urlFor(url);
+ }
+
+ @Override
+ public AuthenticationSession getAuthenticationSession() {
+ return rendererContext.getAuthenticationSession();
+ }
+
+ @Override
+ public IsisConfiguration getConfiguration() {
+ return rendererContext.getConfiguration();
+ }
+
+ @Override
+ public PersistenceSession getPersistenceSession() {
+ return rendererContext.getPersistenceSession();
+ }
+
+ @Override
+ public Where getWhere() {
+ return rendererContext.getWhere();
+ }
+
+ @Override
+ public List<List<String>> getFollowLinks() {
+ return rendererContext.getFollowLinks();
+ }
+
+ @Override
+ public Localization getLocalization() {
+ return rendererContext.getLocalization();
+ }
+
+ @Override
+ public boolean canEagerlyRender(ObjectAdapter objectAdapter) {
+ return rendererContext.canEagerlyRender(objectAdapter);
+ }
+ }
+
+ private final RepresentationService representationService;
+ private RepresentationServiceContextAdapter representationServiceContext;
public DomainResourceHelper(final ResourceContext resourceContext, final ObjectAdapter objectAdapter) {
this.resourceContext = resourceContext;
@@ -36,75 +104,166 @@ public class DomainResourceHelper implements ResponseGeneratorService.ResponseCo
using(new DomainObjectLinkTo());
- generatorService = lookupService(ResponseGeneratorService.class);
+ representationService = lookupService(RepresentationService.class);
}
- public DomainResourceHelper using(final ObjectAdapterLinkTo linkTo) {
- adapterLinkTo = linkTo;
- adapterLinkTo.usingUrlBase(resourceContext).with(objectAdapter);
- return this;
- }
+ public DomainResourceHelper using(final ObjectAdapterLinkTo adapterLinkTo) {
- //region > ResponseContext impl
+ representationServiceContext = new RepresentationServiceContextAdapter(resourceContext, adapterLinkTo);
- private final ResourceContext resourceContext;
- private final ObjectAdapter objectAdapter;
- private ObjectAdapterLinkTo adapterLinkTo;
+ adapterLinkTo.usingUrlBase(resourceContext)
+ .with(objectAdapter);
- @Override
- public ResourceContext getResourceContext() {
- return resourceContext;
+ return this;
}
- @Override
- public ObjectAdapter getObjectAdapter() {
- return objectAdapter;
- }
+ private final ResourceContext resourceContext;
+ private final ObjectAdapter objectAdapter;
- @Override
- public ObjectAdapterLinkTo getAdapterLinkTo() {
- return adapterLinkTo;
- }
- //endregion
+ // //////////////////////////////////////
+ // Helpers (resource delegate here)
+ // //////////////////////////////////////
+ /**
+ * Simply delegates to the {@link org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService} to
+ * render a representation of the object.
+ */
public Response objectRepresentation() {
- return generatorService.objectRepresentation(this);
+ return representationService.objectRepresentation(representationServiceContext, objectAdapter);
}
+ /**
+ * Obtains the property (checking it is visible) of the object and then delegates to the
+ * {@link org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService} to render a representation
+ * of that property.
+ */
public Response propertyDetails(
final String propertyId,
- final ResponseGeneratorService.MemberMode memberMode,
- final Caching caching) {
- return generatorService.propertyDetails(this, propertyId, memberMode, caching);
+ final MemberReprMode memberMode) {
+
+ ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+
+ final OneToOneAssociation property = accessHelper.getPropertyThatIsVisibleForIntent(propertyId, ObjectAdapterAccessHelper.Intent.ACCESS);
+
+ return representationService.propertyDetails(representationServiceContext, new ObjectAndProperty(objectAdapter, property), memberMode);
}
+
+ /**
+ * Obtains the collection (checking it is visible) of the object and then delegates to the
+ * {@link org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService} to render a representation
+ * of that collection.
+ */
public Response collectionDetails(
final String collectionId,
- final ResponseGeneratorService.MemberMode memberMode,
- final Caching caching) {
+ final MemberReprMode memberMode) {
+
+ ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+
+ final OneToManyAssociation collection = accessHelper.getCollectionThatIsVisibleForIntent(collectionId, ObjectAdapterAccessHelper.Intent.ACCESS);
- return generatorService.collectionDetails(this, collectionId, memberMode, caching);
+ return representationService.collectionDetails(representationServiceContext, new ObjectAndCollection(objectAdapter, collection), memberMode);
}
+
+ /**
+ * Obtains the action details (arguments etc), checking it is visible, of the object and then delegates to the
+ * {@link org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService} to render a representation
+ * of that object's action (arguments).
+ */
public Response actionPrompt(final String actionId) {
- return generatorService.actionPrompt(this, actionId);
+ ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+
+ final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.ACCESS);
+
+ return representationService.actionPrompt(representationServiceContext, new ObjectAndAction(objectAdapter, action));
}
+ /**
+ * Invokes the action for the object (checking it is visible) and then delegates to the
+ * {@link org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService} to render a representation
+ * of the result of that action.
+ *
+ * <p>
+ * The action must have {@link org.apache.isis.applib.annotation.ActionSemantics.Of#SAFE safe} semantics
+ * otherwise an error response is thrown.
+ * </p>
+ */
public Response invokeActionQueryOnly(final String actionId, final JsonRepresentation arguments) {
- return generatorService.invokeActionQueryOnly(this, actionId, arguments);
+ final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+
+ final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.MUTATE);
+
+ final ActionSemantics.Of actionSemantics = action.getSemantics();
+ if (actionSemantics != ActionSemantics.Of.SAFE) {
+ throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.METHOD_NOT_ALLOWED, "Method not allowed; action '%s' is not query only", action.getId());
+ }
+
+ return invokeActionUsingAdapters(action, arguments, ActionResultReprRenderer.SelfLink.INCLUDED);
}
+ /**
+ * Invokes the action for the object (checking it is visible) and then delegates to the
+ * {@link org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService} to render a representation
+ * of the result of that action.
+ *
+ * <p>
+ * The action must have {@link org.apache.isis.applib.annotation.ActionSemantics.Of#IDEMPOTENT idempotent}
+ * semantics otherwise an error response is thrown.
+ * </p>
+ */
public Response invokeActionIdempotent(final String actionId, final JsonRepresentation arguments) {
- return generatorService.invokeActionIdempotent(this, actionId, arguments);
+ final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+
+ final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.MUTATE);
+
+ final ActionSemantics.Of actionSemantics = action.getSemantics();
+ if (!actionSemantics.isIdempotentInNature()) {
+ throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.METHOD_NOT_ALLOWED, "Method not allowed; action '%s' is not idempotent", action.getId());
+ }
+ return invokeActionUsingAdapters(action, arguments, ActionResultReprRenderer.SelfLink.EXCLUDED);
}
+ /**
+ * Invokes the action for the object (checking it is visible) and then delegates to the
+ * {@link org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService} to render a representation
+ * of the result of that action.
+ */
public Response invokeAction(final String actionId, final JsonRepresentation arguments) {
- return generatorService.invokeAction(this, actionId, arguments);
+ ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+
+ final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.MUTATE);
+
+ return invokeActionUsingAdapters(action, arguments, ActionResultReprRenderer.SelfLink.EXCLUDED);
+ }
+
+
+ private Response invokeActionUsingAdapters(
+ final ObjectAction action,
+ final JsonRepresentation arguments,
+ final ActionResultReprRenderer.SelfLink selfLink) {
+
+ final RepresentationService.Context rendererContext = representationServiceContext;
+ final ObjectAdapter objectAdapter = this.objectAdapter;
+
+ final ObjectActionArgHelper argHelper = new ObjectActionArgHelper(rendererContext, objectAdapter, action);
+
+ final List<ObjectAdapter> argAdapters = argHelper.parseAndValidateArguments(arguments);
+
+ // invoke
+ final ObjectAdapter[] argArray2 = argAdapters.toArray(new ObjectAdapter[0]);
+ final ObjectAdapter returnedAdapter = action.execute(objectAdapter, argArray2);
+
+ final ObjectAndActionInvocation objectAndActionInvocation =
+ new ObjectAndActionInvocation(this.objectAdapter, action, arguments, returnedAdapter);
+
+ // response
+ return representationService.actionResult(representationServiceContext, objectAndActionInvocation, selfLink);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
index d0ecc93..3c7ffa2 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
@@ -29,9 +29,11 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
import org.apache.isis.viewer.restfulobjects.applib.domainobjects.DomainServiceResource;
+import org.apache.isis.viewer.restfulobjects.rendering.Caching;
+import org.apache.isis.viewer.restfulobjects.rendering.Responses;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainServiceLinkTo;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
@Path("/services")
public class DomainServiceResourceServerside extends ResourceAbstract implements DomainServiceResource {
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/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 46700c3..1135ba9 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
@@ -45,7 +45,9 @@ import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
import org.apache.isis.viewer.restfulobjects.applib.domaintypes.DomainTypeResource;
import org.apache.isis.viewer.restfulobjects.applib.util.UrlEncodingUtils;
+import org.apache.isis.viewer.restfulobjects.rendering.Caching;
import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
+import org.apache.isis.viewer.restfulobjects.rendering.Responses;
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;
@@ -57,7 +59,8 @@ import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.ParentSpecAnd
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 org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
import org.apache.isis.viewer.restfulobjects.server.util.UrlParserUtils;
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageResourceServerside.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageResourceServerside.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageResourceServerside.java
index 72fef2b..675acff 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageResourceServerside.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageResourceServerside.java
@@ -31,7 +31,9 @@ import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
import org.apache.isis.viewer.restfulobjects.applib.homepage.HomePageResource;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.Caching;
+import org.apache.isis.viewer.restfulobjects.rendering.Responses;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
public class HomePageResourceServerside extends ResourceAbstract implements HomePageResource {
[2/4] git commit: ISIS-917: fixing TCK tests for RO viewer
post-refactoring.
Posted by da...@apache.org.
ISIS-917: fixing TCK tests for RO viewer post-refactoring.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/9af78330
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/9af78330
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/9af78330
Branch: refs/heads/ISIS-917
Commit: 9af78330bf092df7736997b92f8a1fb576174d4e
Parents: 064c42e
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Oct 8 16:55:53 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Oct 8 16:55:53 2014 +0100
----------------------------------------------------------------------
..._givenDisabledMembers_thenRepresentation_ok.java | 2 +-
...ivenEntityWithActions_thenRepresentation_ok.java | 2 +-
...yWithCollections_thenRepresentation_ok_TODO.java | 2 +-
...ut_whenArgsValid_thenMultiplePropertyUpdate.java | 4 ++--
.../oid/property/Get_thenRepresentation_ok.java | 10 +++++-----
.../Get_thenResponseHeaders_ContentLength_ok.java | 2 +-
.../domainobject/oid/property/Get_then_200_ok.java | 2 +-
.../Get_whenQueryArg_xRoDomainModel_ok.java | 2 +-
.../oid/property/Post_then_405_bad.java | 2 +-
.../domainobject/oid/property/Put_then_200_ok.java | 2 +-
...henArgValid_thenPrimitivePropertyUpdated_ok.java | 16 ++++++++--------
.../Delete_givenObjectResource_then_405_bad.java | 2 +-
.../id/action/Get_thenRepresentation_ok.java | 8 ++++----
.../id/action/Get_thenResponseCode_200_ok.java | 2 +-
.../Get_thenResponseHeaders_ContentLength_ok.java | 2 +-
.../action/Get_whenQueryArg_xRoDomainModel_ok.java | 2 +-
.../Post_givenObjectResource_then_405_bad.java | 2 +-
.../Put_givenObjectResource_then_405_bad.java | 2 +-
...ost_whenInvokeArgWithObjectReference_thenOK.java | 6 +++---
19 files changed, 36 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenDisabledMembers_thenRepresentation_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenDisabledMembers_thenRepresentation_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenDisabledMembers_thenRepresentation_ok.java
index 66590fc..7d87dad 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenDisabledMembers_thenRepresentation_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenDisabledMembers_thenRepresentation_ok.java
@@ -58,7 +58,7 @@ public class Get_givenDisabledMembers_thenRepresentation_ok {
public void domainObjectWithDisabledMembers() throws Exception {
// given, when
- final DomainObjectRepresentation domainObjectRepr = givenDomainObjectRepresentationFor("BSRL","74");
+ final DomainObjectRepresentation domainObjectRepr = givenDomainObjectRepresentationFor("BSRL","75");
// property ('visibleButNotEditableProperty')
final JsonRepresentation properties = domainObjectRepr.getProperties();
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenEntityWithActions_thenRepresentation_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenEntityWithActions_thenRepresentation_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenEntityWithActions_thenRepresentation_ok.java
index 8bc9a1e..a107a4f 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenEntityWithActions_thenRepresentation_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenEntityWithActions_thenRepresentation_ok.java
@@ -57,7 +57,7 @@ public class Get_givenEntityWithActions_thenRepresentation_ok {
public void thenMembers() throws Exception {
// when
- final Response jaxrsResponse = domainObjectResource.object("RTNE","77");
+ final Response jaxrsResponse = domainObjectResource.object("RTNE","78");
final RestfulResponse<DomainObjectRepresentation> restfulResponse = RestfulResponse.ofT(jaxrsResponse);
assertThat(restfulResponse.getStatus(), is(HttpStatusCode.OK));
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenEntityWithCollections_thenRepresentation_ok_TODO.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenEntityWithCollections_thenRepresentation_ok_TODO.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenEntityWithCollections_thenRepresentation_ok_TODO.java
index 3c6eca1..0ea7f76 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenEntityWithCollections_thenRepresentation_ok_TODO.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Get_givenEntityWithCollections_thenRepresentation_ok_TODO.java
@@ -56,7 +56,7 @@ public class Get_givenEntityWithCollections_thenRepresentation_ok_TODO {
public void thenCollections() throws Exception {
// when
- final Response jaxrsResponse = domainObjectResource.object("PRMV","42");
+ final Response jaxrsResponse = domainObjectResource.object("PRMV","43");
final RestfulResponse<DomainObjectRepresentation> restfulResponse = RestfulResponse.ofT(jaxrsResponse);
assertThat(restfulResponse.getStatus(), is(HttpStatusCode.OK));
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Put_whenArgsValid_thenMultiplePropertyUpdate.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Put_whenArgsValid_thenMultiplePropertyUpdate.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Put_whenArgsValid_thenMultiplePropertyUpdate.java
index 8c72794..7e53275 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Put_whenArgsValid_thenMultiplePropertyUpdate.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/Put_whenArgsValid_thenMultiplePropertyUpdate.java
@@ -76,7 +76,7 @@ public class Put_whenArgsValid_thenMultiplePropertyUpdate {
@Test
public void primitivePropertiesUpdated() throws Exception {
- final DomainObjectRepresentation domainObjectRepr = getObjectRepr("PRMV", "42");
+ final DomainObjectRepresentation domainObjectRepr = getObjectRepr("PRMV", "43");
final LinkRepresentation updateLink = domainObjectRepr.getLinkWithRel(Rel.UPDATE);
@@ -156,7 +156,7 @@ public class Put_whenArgsValid_thenMultiplePropertyUpdate {
@Test
public void jodaPropertiesUpdated() throws Exception {
- final DomainObjectRepresentation domainObjectRepr = getObjectRepr("JODA", "82");
+ final DomainObjectRepresentation domainObjectRepr = getObjectRepr("JODA", "83");
final LinkRepresentation updateLink = domainObjectRepr.getLinkWithRel(Rel.UPDATE);
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_thenRepresentation_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_thenRepresentation_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_thenRepresentation_ok.java
index f0a302c..60968e3 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_thenRepresentation_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_thenRepresentation_ok.java
@@ -60,7 +60,7 @@ public class Get_thenRepresentation_ok {
public void representation() throws Exception {
// when
- final Response idPropertyResp = domainObjectResource.propertyDetails("org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity","67", "anInt");
+ final Response idPropertyResp = domainObjectResource.propertyDetails("org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity","68", "anInt");
final RestfulResponse<ObjectPropertyRepresentation> idPropertyJsonResp = RestfulResponse.ofT(idPropertyResp);
assertThat(idPropertyJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
@@ -73,7 +73,7 @@ public class Get_thenRepresentation_ok {
final LinkRepresentation selfLink = propertyRepr.getLinkWithRel(Rel.SELF);
assertThat(selfLink, isLink(client)
.httpMethod(RestfulHttpMethod.GET)
- .href(endsWith("/objects/org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity/67/properties/anInt"))
+ .href(endsWith("/objects/org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity/68/properties/anInt"))
.returning(HttpStatusCode.OK)
.build());
@@ -81,7 +81,7 @@ public class Get_thenRepresentation_ok {
final LinkRepresentation upLink = propertyRepr.getLinkWithRel(Rel.UP);
assertThat(upLink, isLink(client)
.httpMethod(RestfulHttpMethod.GET)
- .href(endsWith("/objects/org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity/67"))
+ .href(endsWith("/objects/org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity/68"))
.returning(HttpStatusCode.OK)
.type(RepresentationType.DOMAIN_OBJECT.getMediaType())
.title("default-name")
@@ -92,7 +92,7 @@ public class Get_thenRepresentation_ok {
assertThat(modifyLink, isLink(client)
.httpMethod(RestfulHttpMethod.PUT)
.type(RepresentationType.OBJECT_PROPERTY.getMediaType())
- .href(endsWith("/objects/org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity/67/properties/anInt"))
+ .href(endsWith("/objects/org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity/68/properties/anInt"))
.build());
assertThat(modifyLink.getArguments(), is(not(nullValue())));
@@ -104,7 +104,7 @@ public class Get_thenRepresentation_ok {
assertThat(clearLink, isLink(client)
.httpMethod(RestfulHttpMethod.DELETE)
.type(RepresentationType.OBJECT_PROPERTY.getMediaType())
- .href(endsWith("/objects/org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity/67/properties/anInt"))
+ .href(endsWith("/objects/org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity/68/properties/anInt"))
.build());
// described by link
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_thenResponseHeaders_ContentLength_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_thenResponseHeaders_ContentLength_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_thenResponseHeaders_ContentLength_ok.java
index d201d23..e7c8614 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_thenResponseHeaders_ContentLength_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_thenResponseHeaders_ContentLength_ok.java
@@ -54,7 +54,7 @@ public class Get_thenResponseHeaders_ContentLength_ok {
public void propertyDetails() throws Exception {
// when
- final Response idPropertyResp = domainObjectResource.propertyDetails("org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity","67", "anInt");
+ final Response idPropertyResp = domainObjectResource.propertyDetails("org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity","68", "anInt");
//given
final RestfulResponse<ObjectPropertyRepresentation> idPropertyJsonResp = RestfulResponse.ofT(idPropertyResp);
//then
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_then_200_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_then_200_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_then_200_ok.java
index 9f6e1ad..275e202 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_then_200_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_then_200_ok.java
@@ -54,7 +54,7 @@ public class Get_then_200_ok {
public void propertyDetails() throws Exception {
// when
- final Response idPropertyResp = domainObjectResource.propertyDetails("org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity","67", "anInt");
+ final Response idPropertyResp = domainObjectResource.propertyDetails("org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity","68", "anInt");
final RestfulResponse<ObjectPropertyRepresentation> idPropertyJsonResp = RestfulResponse.ofT(idPropertyResp);
assertThat(idPropertyJsonResp.getStatus(), is(HttpStatusCode.OK));
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_whenQueryArg_xRoDomainModel_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_whenQueryArg_xRoDomainModel_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_whenQueryArg_xRoDomainModel_ok.java
index 59e5486..8f87283 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_whenQueryArg_xRoDomainModel_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Get_whenQueryArg_xRoDomainModel_ok.java
@@ -45,7 +45,7 @@ public class Get_whenQueryArg_xRoDomainModel_ok {
public void setUp() throws Exception {
final WebServer webServer = webServerRule.getWebServer();
client = new RestfulClient(webServer.getBase());
- request = client.createRequest(RestfulHttpMethod.GET, "/objects/org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity/67/properties/anInt");
+ request = client.createRequest(RestfulHttpMethod.GET, "/objects/org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity/68/properties/anInt");
}
@Test
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Post_then_405_bad.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Post_then_405_bad.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Post_then_405_bad.java
index 5e09219..fe7dd9c 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Post_then_405_bad.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Post_then_405_bad.java
@@ -56,7 +56,7 @@ public class Post_then_405_bad {
public void representation() throws Exception {
// given
- final Response idPropertyResp = domainObjectResource.propertyDetails("org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity","67", "anInt");
+ final Response idPropertyResp = domainObjectResource.propertyDetails("org.apache.isis.core.tck.dom.defaults.WithDefaultsEntity","68", "anInt");
final RestfulResponse<ObjectPropertyRepresentation> idPropertyJsonResp = RestfulResponse.ofT(idPropertyResp);
final ObjectPropertyRepresentation propertyRepr = idPropertyJsonResp.getEntity();
final LinkRepresentation selfLink = propertyRepr.getLinkWithRel(Rel.SELF);
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Put_then_200_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Put_then_200_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Put_then_200_ok.java
index 859d0e4..d8bf6b9 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Put_then_200_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Put_then_200_ok.java
@@ -79,7 +79,7 @@ public class Put_then_200_ok {
// given
final int i = 999999;
- final Response domainObjectResp = domainObjectResource.propertyDetails("PRMV", "42", "intProperty");
+ final Response domainObjectResp = domainObjectResource.propertyDetails("PRMV", "43", "intProperty");
final RestfulResponse<ObjectPropertyRepresentation> domainObjectJsonResp = RestfulResponse.ofT(domainObjectResp);
assertThat(domainObjectJsonResp.getStatus().getFamily(), is(Response.Status.Family.SUCCESSFUL));
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Put_whenArgValid_thenPrimitivePropertyUpdated_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Put_whenArgValid_thenPrimitivePropertyUpdated_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Put_whenArgValid_thenPrimitivePropertyUpdated_ok.java
index 6f77937..8759e66 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Put_whenArgValid_thenPrimitivePropertyUpdated_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobject/oid/property/Put_whenArgValid_thenPrimitivePropertyUpdated_ok.java
@@ -73,49 +73,49 @@ public class Put_whenArgValid_thenPrimitivePropertyUpdated_ok {
// byte
final byte b = (byte)99;
- modifyLink = getObjectPropertyReprModifyLink("PRMV", "42", "byteProperty");
+ modifyLink = getObjectPropertyReprModifyLink("PRMV", "43", "byteProperty");
argRepr = modifyLink.getArguments().mapPut("value", b);
assertThat(followedRepr(modifyLink,argRepr).getByte("value"), is(b));
// char
final char c = 'b';
- modifyLink = getObjectPropertyReprModifyLink("PRMV", "42", "charProperty");
+ modifyLink = getObjectPropertyReprModifyLink("PRMV", "43", "charProperty");
argRepr = modifyLink.getArguments().mapPut("value", c);
assertThat(followedRepr(modifyLink,argRepr).getChar("value"), is(c));
// double
final double d = 12345.678;
- modifyLink = getObjectPropertyReprModifyLink("PRMV", "42", "doubleProperty");
+ modifyLink = getObjectPropertyReprModifyLink("PRMV", "43", "doubleProperty");
argRepr = modifyLink.getArguments().mapPut("value", d);
assertThat(followedRepr(modifyLink,argRepr).getDouble("value"), is(d));
// float
final float f = 54321.123F;
- modifyLink = getObjectPropertyReprModifyLink("PRMV", "42", "floatProperty");
+ modifyLink = getObjectPropertyReprModifyLink("PRMV", "43", "floatProperty");
argRepr = modifyLink.getArguments().mapPut("value", f);
assertThat(followedRepr(modifyLink,argRepr).getFloat("value"), is(f));
// int
final int i = 999999;
- modifyLink = getObjectPropertyReprModifyLink("PRMV", "42", "intProperty");
+ modifyLink = getObjectPropertyReprModifyLink("PRMV", "43", "intProperty");
argRepr = modifyLink.getArguments().mapPut("value", i);
assertThat(followedRepr(modifyLink,argRepr).getInt("value"), is(i));
// long
final long l = 99999999999L;
- modifyLink = getObjectPropertyReprModifyLink("PRMV", "42", "longProperty");
+ modifyLink = getObjectPropertyReprModifyLink("PRMV", "43", "longProperty");
argRepr = modifyLink.getArguments().mapPut("value", l);
assertThat(followedRepr(modifyLink,argRepr).getLong("value"), is(l));
// short
final short s = (short)999;
- modifyLink = getObjectPropertyReprModifyLink("PRMV", "42", "shortProperty");
+ modifyLink = getObjectPropertyReprModifyLink("PRMV", "43", "shortProperty");
argRepr = modifyLink.getArguments().mapPut("value", s);
assertThat(followedRepr(modifyLink,argRepr).getShort("value"), is(s));
// boolean
final boolean z = false;
- modifyLink = getObjectPropertyReprModifyLink("PRMV", "42", "booleanProperty");
+ modifyLink = getObjectPropertyReprModifyLink("PRMV", "43", "booleanProperty");
argRepr = modifyLink.getArguments().mapPut("value", z);
assertThat(followedRepr(modifyLink,argRepr).getBoolean("value"), is(z));
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Delete_givenObjectResource_then_405_bad.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Delete_givenObjectResource_then_405_bad.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Delete_givenObjectResource_then_405_bad.java
index 09204e4..44f460f 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Delete_givenObjectResource_then_405_bad.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Delete_givenObjectResource_then_405_bad.java
@@ -55,7 +55,7 @@ public class Delete_givenObjectResource_then_405_bad {
public void representation() throws Exception {
// given
- final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "77", "contains");
+ final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "78", "contains");
final RestfulResponse<ObjectActionRepresentation> actionPromptJsonResp = RestfulResponse.ofT(actionPromptResp);
final ObjectActionRepresentation actionPromptRepr = actionPromptJsonResp.getEntity();
final LinkRepresentation selfLink = actionPromptRepr.getLinkWithRel(Rel.SELF);
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenRepresentation_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenRepresentation_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenRepresentation_ok.java
index c915614..b08c954 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenRepresentation_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenRepresentation_ok.java
@@ -59,7 +59,7 @@ public class Get_thenRepresentation_ok {
public void representation() throws Exception {
// when
- final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "77", "contains");
+ final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "78", "contains");
final RestfulResponse<ObjectActionRepresentation> actionPromptJsonResp = RestfulResponse.ofT(actionPromptResp);
assertThat(actionPromptJsonResp.getStatus().getFamily(), is(Family.SUCCESSFUL));
@@ -72,14 +72,14 @@ public class Get_thenRepresentation_ok {
final LinkRepresentation selfLink = actionPromptRepr.getLinkWithRel(Rel.SELF);
assertThat(selfLink, isLink(client)
.httpMethod(RestfulHttpMethod.GET)
- .href(endsWith("/objects/RTNE/77/actions/contains"))
+ .href(endsWith("/objects/RTNE/78/actions/contains"))
.returning(HttpStatusCode.OK));
// up link
final LinkRepresentation upLink = actionPromptRepr.getLinkWithRel(Rel.UP);
assertThat(upLink, isLink(client)
.httpMethod(RestfulHttpMethod.GET)
- .href(endsWith("/objects/RTNE/77"))
+ .href(endsWith("/objects/RTNE/78"))
.returning(HttpStatusCode.OK)
.type(RepresentationType.DOMAIN_OBJECT.getMediaType())
.title("Untitled Actions Entity"));
@@ -88,7 +88,7 @@ public class Get_thenRepresentation_ok {
final LinkRepresentation invokeLink = actionPromptRepr.getLinkWithRel(Rel.INVOKE);
assertThat(invokeLink, isLink(client)
.httpMethod(RestfulHttpMethod.GET)
- .href(endsWith("/objects/RTNE/77/actions/contains/invoke")));
+ .href(endsWith("/objects/RTNE/78/actions/contains/invoke")));
assertThat(invokeLink.getArguments(), is(not(nullValue())));
assertThat(invokeLink.getArguments().isArray(), is(false));
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenResponseCode_200_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenResponseCode_200_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenResponseCode_200_ok.java
index 5f4b467..cf51675 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenResponseCode_200_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenResponseCode_200_ok.java
@@ -52,7 +52,7 @@ public class Get_thenResponseCode_200_ok {
public void actionPrompt() throws Exception {
// when
- final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "77", "contains");
+ final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "78", "contains");
final RestfulResponse<ObjectActionRepresentation> actionPromptJsonResp = RestfulResponse.ofT(actionPromptResp);
assertThat(actionPromptJsonResp.getStatus(), is(HttpStatusCode.OK));
}
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenResponseHeaders_ContentLength_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenResponseHeaders_ContentLength_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenResponseHeaders_ContentLength_ok.java
index 29d3e67..1f9a112 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenResponseHeaders_ContentLength_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_thenResponseHeaders_ContentLength_ok.java
@@ -52,7 +52,7 @@ public class Get_thenResponseHeaders_ContentLength_ok {
@Test
public void ok() throws Exception {
// given
- final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "77", "contains");
+ final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "78", "contains");
// when
final RestfulResponse<ObjectActionRepresentation> actionPromptJsonResp = RestfulResponse.ofT(actionPromptResp);
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_whenQueryArg_xRoDomainModel_ok.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_whenQueryArg_xRoDomainModel_ok.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_whenQueryArg_xRoDomainModel_ok.java
index 80aefee..6bcce0c 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_whenQueryArg_xRoDomainModel_ok.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Get_whenQueryArg_xRoDomainModel_ok.java
@@ -46,7 +46,7 @@ public class Get_whenQueryArg_xRoDomainModel_ok {
public void setUp() throws Exception {
final WebServer webServer = webServerRule.getWebServer();
client = new RestfulClient(webServer.getBase());
- request = client.createRequest(RestfulHttpMethod.GET, "/objects/RTNE/77/actions/contains");
+ request = client.createRequest(RestfulHttpMethod.GET, "/objects/RTNE/78/actions/contains");
}
@Test
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Post_givenObjectResource_then_405_bad.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Post_givenObjectResource_then_405_bad.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Post_givenObjectResource_then_405_bad.java
index ad15699..2917e30 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Post_givenObjectResource_then_405_bad.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Post_givenObjectResource_then_405_bad.java
@@ -55,7 +55,7 @@ public class Post_givenObjectResource_then_405_bad {
public void representation() throws Exception {
// given
- final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "77", "contains");
+ final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "78", "contains");
final RestfulResponse<ObjectActionRepresentation> actionPromptJsonResp = RestfulResponse.ofT(actionPromptResp);
final ObjectActionRepresentation actionPromptRepr = actionPromptJsonResp.getEntity();
final LinkRepresentation selfLink = actionPromptRepr.getLinkWithRel(Rel.SELF);
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Put_givenObjectResource_then_405_bad.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Put_givenObjectResource_then_405_bad.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Put_givenObjectResource_then_405_bad.java
index 26978e4..83c086a 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Put_givenObjectResource_then_405_bad.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/Put_givenObjectResource_then_405_bad.java
@@ -55,7 +55,7 @@ public class Put_givenObjectResource_then_405_bad {
public void representation() throws Exception {
// given
- final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "77", "contains");
+ final Response actionPromptResp = domainObjectResource.actionPrompt("RTNE", "78", "contains");
final RestfulResponse<ObjectActionRepresentation> actionPromptJsonResp = RestfulResponse.ofT(actionPromptResp);
final ObjectActionRepresentation actionPromptRepr = actionPromptJsonResp.getEntity();
final LinkRepresentation selfLink = actionPromptRepr.getLinkWithRel(Rel.SELF);
http://git-wip-us.apache.org/repos/asf/isis/blob/9af78330/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Post_whenInvokeArgWithObjectReference_thenOK.java
----------------------------------------------------------------------
diff --git a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Post_whenInvokeArgWithObjectReference_thenOK.java b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Post_whenInvokeArgWithObjectReference_thenOK.java
index 28bdebe..2c1fc94 100644
--- a/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Post_whenInvokeArgWithObjectReference_thenOK.java
+++ b/core/tck/tck-viewer-restfulobjects/src/test/java/org/apache/isis/viewer/restfulobjects/tck/domainobjectorservice/id/action/invoke/Post_whenInvokeArgWithObjectReference_thenOK.java
@@ -73,7 +73,7 @@ public class Post_whenInvokeArgWithObjectReference_thenOK {
// given
RestfulResponse<ObjectCollectionRepresentation> childrenRestfulResponse =
- RestfulResponse.ofT(objectResource.accessCollection("PRNT", "52", "children"));
+ RestfulResponse.ofT(objectResource.accessCollection("PRNT", "53", "children"));
ObjectCollectionRepresentation childrenRepr = childrenRestfulResponse.getEntity();
JsonRepresentation collValue = childrenRepr.getValue();
@@ -85,7 +85,7 @@ public class Post_whenInvokeArgWithObjectReference_thenOK {
// when
final RestfulResponse<ObjectActionRepresentation> removeChildRestfulResponse =
- RestfulResponse.ofT(objectResource.actionPrompt("PRNT", "52", "removeChild"));
+ RestfulResponse.ofT(objectResource.actionPrompt("PRNT", "53", "removeChild"));
final ObjectActionRepresentation removeChildRepr = removeChildRestfulResponse.getEntity();
LinkRepresentation invokeLinkRepr = removeChildRepr.getLinkWithRel(Rel.INVOKE);
@@ -100,7 +100,7 @@ public class Post_whenInvokeArgWithObjectReference_thenOK {
// then
childrenRestfulResponse =
- RestfulResponse.ofT(objectResource.accessCollection("PRNT", "52", "children"));
+ RestfulResponse.ofT(objectResource.accessCollection("PRNT", "53", "children"));
childrenRepr = childrenRestfulResponse.getEntity();
collValue = childrenRepr.getValue();
[3/4] ISIS-917: further refactorings to simplify the API of the
(newly rechristened) RepresentationService.
Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java
index 97cce01..15a65da 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java
@@ -16,15 +16,18 @@
*/
package org.apache.isis.viewer.restfulobjects.server.resources;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.JsonValueEncoder;
-import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
import org.apache.isis.viewer.restfulobjects.server.util.OidUtils;
-import org.apache.isis.viewer.restfulobjects.server.util.UrlParserUtils;
/**
* Utility class that encapsulates the logic for parsing some content (JSON, or a simple string that is JSON)
@@ -33,26 +36,21 @@ import org.apache.isis.viewer.restfulobjects.server.util.UrlParserUtils;
*/
public class JsonParserHelper {
- static enum Intent {
- ACCESS, MUTATE;
+ private final static Pattern OBJECT_OID = Pattern.compile(".*objects\\/([^/]+)\\/(.+)");
- public boolean isMutate() {
- return this == MUTATE;
- }
- }
-
- private final ResourceContext resourceContext;
+ private final RendererContext rendererContext;
private final ObjectSpecification objectSpec;
- public JsonParserHelper(ResourceContext resourceContext, ObjectSpecification objectSpecification) {
+ public JsonParserHelper(
+ final RendererContext rendererContext, ObjectSpecification objectSpecification) {
this.objectSpec = objectSpecification;
- this.resourceContext = resourceContext;
+ this.rendererContext = rendererContext;
}
/**
* @param bodyAsString
- * - as per {@link Util#asStringUtf8(java.io.InputStream)}
+ * - as per {@link org.apache.isis.viewer.restfulobjects.rendering.util.Util#asStringUtf8(java.io.InputStream)}
* @return
*/
ObjectAdapter parseAsMapWithSingleValue(final String bodyAsString) {
@@ -63,7 +61,7 @@ public class JsonParserHelper {
ObjectAdapter parseAsMapWithSingleValue(final JsonRepresentation arguments) {
final JsonRepresentation representation = arguments.getRepresentation("value");
if (arguments.size() != 1 || representation == null) {
- throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, "Body should be a map with a single key 'value' whose value represents an instance of type '%s'", Util.resourceFor(objectSpec));
+ throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, "Body should be a map with a single key 'value' whose value represents an instance of type '%s'", resourceFor(objectSpec));
}
return objectAdapterFor(arguments);
@@ -122,14 +120,14 @@ public class JsonParserHelper {
argRepr.mapPut("invalidReason", reason);
throw new IllegalArgumentException(reason);
}
- final String oidFromHref = UrlParserUtils.encodedOidFromLink(argValueRepr);
+ final String oidFromHref = encodedOidFromLink(argValueRepr);
if (oidFromHref == null) {
final String reason = "Could not parse 'href' to identify the object's OID";
argRepr.mapPut("invalidReason", reason);
throw new IllegalArgumentException(reason);
}
- final ObjectAdapter objectAdapter = OidUtils.getObjectAdapterElseNull(resourceContext, oidFromHref);
+ final ObjectAdapter objectAdapter = OidUtils.getObjectAdapterElseNull(rendererContext, oidFromHref);
if (objectAdapter == null) {
final String reason = "'href' does not reference a known entity";
argRepr.mapPut("invalidReason", reason);
@@ -138,4 +136,26 @@ public class JsonParserHelper {
return objectAdapter;
}
+ static String encodedOidFromLink(final JsonRepresentation link) {
+ final String href = link.getString("href");
+
+ final Matcher matcher = OBJECT_OID.matcher(href);
+ if (!matcher.matches()) {
+ return null;
+ }
+ String domainType = matcher.group(1);
+ String instanceId = matcher.group(2);
+ return getOidMarshaller().joinAsOid(domainType, instanceId);
+ }
+
+ private static String resourceFor(final ObjectSpecification objectSpec) {
+ // TODO: should return a string in the form
+ // http://localhost:8080/types/xxx
+ return objectSpec.getFullIdentifier();
+ }
+
+ private static OidMarshaller getOidMarshaller() {
+ return new OidMarshaller();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
index 1d807a5..7bb3fa2 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
@@ -26,8 +26,8 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
-import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
/**
* Utility class that encapsulates the logic for parsing arguments to be invoked by an
@@ -35,15 +35,15 @@ import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationExc
*/
public class ObjectActionArgHelper {
- private final ResourceContext resourceContext;
+ private final RendererContext rendererContext;
private final ObjectAdapter objectAdapter;
private final ObjectAction action;
public ObjectActionArgHelper(
- final ResourceContext resourceContext,
+ final RendererContext rendererContext,
final ObjectAdapter objectAdapter,
final ObjectAction action) {
- this.resourceContext = resourceContext;
+ this.rendererContext = rendererContext;
this.objectAdapter = objectAdapter;
this.action = action;
}
@@ -58,7 +58,7 @@ public class ObjectActionArgHelper {
final JsonRepresentation argRepr = argList.get(i);
final ObjectSpecification paramSpec = parameters.get(i).getSpecification();
try {
- final ObjectAdapter argAdapter = new JsonParserHelper(resourceContext, paramSpec).objectAdapterFor(argRepr);
+ final ObjectAdapter argAdapter = new JsonParserHelper(rendererContext, paramSpec).objectAdapterFor(argRepr);
argAdapters.add(argAdapter);
// validate individual arg
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
index 6b17816..f979b81 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
@@ -23,9 +23,9 @@ import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.*;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberType;
-import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
/**
* Utility class that encapsulates the logic for checking access to the specified
@@ -33,6 +33,11 @@ import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationExc
*/
public class ObjectAdapterAccessHelper {
+ public static void throwNotFoundException(final String memberId, final MemberType memberType) {
+ final String memberTypeStr = memberType.name().toLowerCase();
+ throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.NOT_FOUND, "%s '%s' either does not exist or is not visible", memberTypeStr, memberId);
+ }
+
static enum Intent {
ACCESS, MUTATE;
@@ -42,17 +47,17 @@ public class ObjectAdapterAccessHelper {
}
private final ObjectAdapter objectAdapter;
- private final ResourceContext resourceContext;
+ private final RendererContext rendererContext;
- public ObjectAdapterAccessHelper(ResourceContext resourceContext, ObjectAdapter objectAdapter) {
+ public ObjectAdapterAccessHelper(RendererContext rendererContext, ObjectAdapter objectAdapter) {
this.objectAdapter = objectAdapter;
- this.resourceContext = resourceContext;
+ this.rendererContext = rendererContext;
}
public OneToOneAssociation getPropertyThatIsVisibleForIntent(
final String propertyId, final Intent intent) {
- final Where where = resourceContext.getWhere();
+ final Where where = rendererContext.getWhere();
final ObjectAssociation association;
try {
@@ -60,12 +65,12 @@ public class ObjectAdapterAccessHelper {
association = specification.getAssociation(propertyId);
} catch(Exception ex) {
// fall through
- Util.throwNotFoundException(propertyId, MemberType.PROPERTY);
+ throwNotFoundException(propertyId, MemberType.PROPERTY);
return null; // to keep compiler happy.
}
if (association == null || !association.isOneToOneAssociation()) {
- Util.throwNotFoundException(propertyId, MemberType.PROPERTY);
+ throwNotFoundException(propertyId, MemberType.PROPERTY);
}
final OneToOneAssociation property = (OneToOneAssociation) association;
@@ -75,18 +80,18 @@ public class ObjectAdapterAccessHelper {
public OneToManyAssociation getCollectionThatIsVisibleForIntent(
final String collectionId, final Intent intent) {
- final Where where = resourceContext.getWhere();
+ final Where where = rendererContext.getWhere();
final ObjectAssociation association;
try {
final ObjectSpecification specification = objectAdapter.getSpecification();
association = specification.getAssociation(collectionId);
} catch(Exception ex) {
// fall through
- Util.throwNotFoundException(collectionId, MemberType.COLLECTION);
+ throwNotFoundException(collectionId, MemberType.COLLECTION);
return null; // to keep compiler happy.
}
if (association == null || !association.isOneToManyAssociation()) {
- Util.throwNotFoundException(collectionId, MemberType.COLLECTION);
+ throwNotFoundException(collectionId, MemberType.COLLECTION);
}
final OneToManyAssociation collection = (OneToManyAssociation) association;
return memberThatIsVisibleForIntent(collection, MemberType.COLLECTION, intent);
@@ -95,18 +100,18 @@ public class ObjectAdapterAccessHelper {
public ObjectAction getObjectActionThatIsVisibleForIntent(
final String actionId, final Intent intent) {
- final Where where = resourceContext.getWhere();
+ final Where where = rendererContext.getWhere();
final ObjectAction action;
try {
final ObjectSpecification specification = objectAdapter.getSpecification();
action = specification.getObjectAction(actionId);
} catch(Exception ex) {
- Util.throwNotFoundException(actionId, MemberType.ACTION);
+ throwNotFoundException(actionId, MemberType.ACTION);
return null; // to keep compiler happy.
}
if (action == null) {
- Util.throwNotFoundException(actionId, MemberType.ACTION);
+ throwNotFoundException(actionId, MemberType.ACTION);
}
return memberThatIsVisibleForIntent(action, MemberType.ACTION, intent);
}
@@ -114,12 +119,12 @@ public class ObjectAdapterAccessHelper {
public <T extends ObjectMember> T memberThatIsVisibleForIntent(
final T objectMember, final MemberType memberType, final Intent intent) {
- final Where where = resourceContext.getWhere();
+ final Where where = rendererContext.getWhere();
final String memberId = objectMember.getId();
- final AuthenticationSession authenticationSession = resourceContext.getAuthenticationSession();
+ final AuthenticationSession authenticationSession = rendererContext.getAuthenticationSession();
if (objectMember.isVisible(authenticationSession, objectAdapter, where).isVetoed()) {
- Util.throwNotFoundException(memberId, memberType);
+ throwNotFoundException(memberId, memberType);
}
if (intent.isMutate()) {
final Consent usable = objectMember.isUsable(authenticationSession, objectAdapter, where);
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
index 7855b71..3bac4b4 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
@@ -18,14 +18,11 @@
*/
package org.apache.isis.viewer.restfulobjects.server.resources;
-import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.*;
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.map.JsonMappingException;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.profiles.Localization;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -35,46 +32,19 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
import org.apache.isis.core.metamodel.services.ServiceUtil;
-import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
import org.apache.isis.viewer.restfulobjects.server.util.OidUtils;
import org.apache.isis.viewer.restfulobjects.server.util.UrlDecoderUtils;
public abstract class ResourceAbstract {
-
- protected final static JsonMapper jsonMapper = JsonMapper.instance();
-
- public enum Caching {
- ONE_DAY(24 * 60 * 60), ONE_HOUR(60 * 60), NONE(0);
-
- private final CacheControl cacheControl;
-
- private Caching(final int maxAge) {
- this.cacheControl = new CacheControl();
- if (maxAge > 0) {
- cacheControl.setMaxAge(maxAge);
- } else {
- cacheControl.setNoCache(true);
- }
- }
-
- public CacheControl getCacheControl() {
- return cacheControl;
- }
- }
-
- // nb: SET is excluded; we simply flatten contributed actions.
- public final static ActionType[] ACTION_TYPES = { ActionType.USER, ActionType.DEBUG, ActionType.EXPLORATION };
-
@Context
HttpHeaders httpHeaders;
@@ -138,29 +108,9 @@ public abstract class ResourceAbstract {
}
// //////////////////////////////////////////////////////////////
- // Rendering
- // //////////////////////////////////////////////////////////////
-
- protected static String jsonFor(final Object object) {
- try {
- return jsonMapper.write(object);
- } catch (final JsonGenerationException e) {
- throw new RuntimeException(e);
- } catch (final JsonMappingException e) {
- throw new RuntimeException(e);
- } catch (final IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- // //////////////////////////////////////////////////////////////
// Isis integration
// //////////////////////////////////////////////////////////////
- protected ObjectSpecification getSpecification(final String specFullName) {
- return getSpecificationLoader().loadSpecification(specFullName);
- }
-
protected ObjectAdapter getObjectAdapterElseThrowNotFound(String domainType, final String instanceId) {
ObjectAdapter objectAdapter = getObjectAdapterElseNull(domainType, instanceId);
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResponseGeneratorService.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResponseGeneratorService.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResponseGeneratorService.java
deleted file mode 100644
index dcddc6d..0000000
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResponseGeneratorService.java
+++ /dev/null
@@ -1,269 +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.server.resources;
-
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.List;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.*;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer.SelfLink;
-import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
-import org.apache.isis.viewer.restfulobjects.server.resources.ResourceAbstract.Caching;
-
-@DomainService
-public class ResponseGeneratorService {
-
- private static final DateFormat ETAG_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-
- public static interface ResponseContext {
- public ResourceContext getResourceContext();
- public ObjectAdapter getObjectAdapter();
- public ObjectAdapterLinkTo getAdapterLinkTo();
- }
-
-
- // //////////////////////////////////////////////////////////////
- // objectRepresentation
- // //////////////////////////////////////////////////////////////
-
- @Programmatic
- public Response objectRepresentation(final ResponseContext responseContext) {
-
- final ResourceContext resourceContext = responseContext.getResourceContext();
- final ObjectAdapter objectAdapter = responseContext.getObjectAdapter();
-
- final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(resourceContext, null, JsonRepresentation.newMap());
- renderer.with(objectAdapter).includesSelf();
-
- final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
-
- final Version version = objectAdapter.getVersion();
- if (version != null && version.getTime() != null) {
- responseBuilder.tag(ETAG_FORMAT.format(version.getTime()));
- }
- return buildResponse(responseBuilder);
- }
-
- // //////////////////////////////////////////////////////////////
- // propertyDetails
- // //////////////////////////////////////////////////////////////
-
- public enum MemberMode {
- NOT_MUTATING {
- @Override
- public void apply(final AbstractObjectMemberReprRenderer<?, ?> renderer) {
- renderer.asStandalone();
- }
- },
- MUTATING {
- @Override
- public void apply(final AbstractObjectMemberReprRenderer<?, ?> renderer) {
- renderer.asMutated();
- }
- };
-
- public abstract void apply(AbstractObjectMemberReprRenderer<?, ?> renderer);
- }
-
- @Programmatic
- public Response propertyDetails(
- final ResponseContext responseContext,
- final String propertyId, final MemberMode memberMode, final Caching caching) {
-
- final ResourceContext resourceContext = responseContext.getResourceContext();
- final ObjectAdapter objectAdapter = responseContext.getObjectAdapter();
- final ObjectAdapterLinkTo adapterLinkTo = responseContext.getAdapterLinkTo();
-
- ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
-
- final OneToOneAssociation property = accessHelper.getPropertyThatIsVisibleForIntent(propertyId, ObjectAdapterAccessHelper.Intent.ACCESS);
-
- final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(resourceContext, null, null, JsonRepresentation.newMap());
-
- renderer.with(new ObjectAndProperty(objectAdapter, property)).usingLinkTo(adapterLinkTo);
-
- memberMode.apply(renderer);
-
- return Responses.ofOk(renderer, caching).build();
- }
-
- // //////////////////////////////////////////////////////////////
- // collectionDetails
- // //////////////////////////////////////////////////////////////
-
- @Programmatic
- public Response collectionDetails(
- final ResponseContext responseContext,
- final String collectionId, final MemberMode memberMode, final Caching caching) {
-
- final ResourceContext resourceContext = responseContext.getResourceContext();
- final ObjectAdapter objectAdapter = responseContext.getObjectAdapter();
- final ObjectAdapterLinkTo adapterLinkTo = responseContext.getAdapterLinkTo();
-
- ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
-
- final OneToManyAssociation collection = accessHelper.getCollectionThatIsVisibleForIntent(collectionId, ObjectAdapterAccessHelper.Intent.ACCESS);
-
- final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(resourceContext, null, null, JsonRepresentation.newMap());
-
- renderer.with(new ObjectAndCollection(objectAdapter, collection)).usingLinkTo(adapterLinkTo);
-
- memberMode.apply(renderer);
-
- final ResponseBuilder responseBuilder = Responses.ofOk(renderer, caching);
- return buildResponse(responseBuilder);
- }
-
- // //////////////////////////////////////////////////////////////
- // action Prompt
- // //////////////////////////////////////////////////////////////
-
- @Programmatic
- public Response actionPrompt(
- final ResponseContext responseContext,
- final String actionId) {
-
- final ResourceContext resourceContext = responseContext.getResourceContext();
- final ObjectAdapter objectAdapter = responseContext.getObjectAdapter();
- final ObjectAdapterLinkTo adapterLinkTo = responseContext.getAdapterLinkTo();
-
- ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
-
- final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.ACCESS);
-
- final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(resourceContext, null, null, JsonRepresentation.newMap());
-
- renderer.with(new ObjectAndAction(objectAdapter, action)).usingLinkTo(adapterLinkTo).asStandalone();
-
- final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
- return buildResponse(responseBuilder);
- }
-
- // //////////////////////////////////////////////////////////////
- // invoke action
- // //////////////////////////////////////////////////////////////
-
- @Programmatic
- public Response invokeActionQueryOnly(
- final ResponseContext responseContext,
- final String actionId, final JsonRepresentation arguments) {
-
- final ResourceContext resourceContext = responseContext.getResourceContext();
- final ObjectAdapter objectAdapter = responseContext.getObjectAdapter();
- final ObjectAdapterLinkTo adapterLinkTo = responseContext.getAdapterLinkTo();
-
- final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
-
- final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.MUTATE);
-
- final ActionSemantics.Of actionSemantics = action.getSemantics();
- if (actionSemantics != ActionSemantics.Of.SAFE) {
- throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.METHOD_NOT_ALLOWED, "Method not allowed; action '%s' is not query only", action.getId());
- }
-
- final ResponseBuilder responseBuilder = invokeActionUsingAdapters(responseContext, action, arguments, SelfLink.INCLUDED);
- return buildResponse(responseBuilder);
- }
-
- @Programmatic
- public Response invokeActionIdempotent(
- final ResponseContext responseContext,
- final String actionId, final JsonRepresentation arguments) {
-
- final ResourceContext resourceContext = responseContext.getResourceContext();
- final ObjectAdapter objectAdapter = responseContext.getObjectAdapter();
-
- final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
-
- final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.MUTATE);
-
- final ActionSemantics.Of actionSemantics = action.getSemantics();
- if (!actionSemantics.isIdempotentInNature()) {
- throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.METHOD_NOT_ALLOWED, "Method not allowed; action '%s' is not idempotent", action.getId());
- }
- final ResponseBuilder responseBuilder = invokeActionUsingAdapters(responseContext, action, arguments, SelfLink.EXCLUDED);
- return buildResponse(responseBuilder);
- }
-
- @Programmatic
- public Response invokeAction(
- final ResponseContext responseContext,
- final String actionId, final JsonRepresentation arguments) {
-
- final ResourceContext resourceContext = responseContext.getResourceContext();
- final ObjectAdapter objectAdapter = responseContext.getObjectAdapter();
-
- ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
-
- final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.MUTATE);
-
- final ResponseBuilder responseBuilder = invokeActionUsingAdapters(responseContext, action, arguments, SelfLink.EXCLUDED);
- return buildResponse(responseBuilder);
- }
-
- /**
- * Overridable to allow further customization.
- */
- protected Response buildResponse(final ResponseBuilder responseBuilder) {
- return responseBuilder.build();
- }
-
- //region > helpers
- private ResponseBuilder invokeActionUsingAdapters(
- final ResponseContext responseContext,
- final ObjectAction action, final JsonRepresentation arguments, SelfLink selfLink) {
-
- final ResourceContext resourceContext = responseContext.getResourceContext();
- final ObjectAdapter objectAdapter = responseContext.getObjectAdapter();
- final ObjectAdapterLinkTo adapterLinkTo = responseContext.getAdapterLinkTo();
-
- final ObjectActionArgHelper argHelper = new ObjectActionArgHelper(resourceContext, objectAdapter, action);
-
- final List<ObjectAdapter> argAdapters = argHelper.parseAndValidateArguments(arguments);
-
- // invoke
- final ObjectAdapter[] argArray2 = argAdapters.toArray(new ObjectAdapter[0]);
- final ObjectAdapter returnedAdapter = action.execute(objectAdapter, argArray2);
-
- // response
- final ActionResultReprRenderer renderer = new ActionResultReprRenderer(resourceContext, null, selfLink, JsonRepresentation.newMap());
-
- renderer.with(new ObjectAndActionInvocation(objectAdapter, action, arguments, returnedAdapter)).using(adapterLinkTo);
-
- final ResponseBuilder respBuilder = Responses.ofOk(renderer, Caching.NONE);
-
- final Version version = objectAdapter.getVersion();
- Responses.addLastModifiedAndETagIfAvailable(respBuilder, version);
-
- return respBuilder;
- }
- //endregion
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/Responses.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/Responses.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/Responses.java
deleted file mode 100644
index da3bef2..0000000
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/Responses.java
+++ /dev/null
@@ -1,64 +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.server.resources;
-
-import java.util.Date;
-import javax.ws.rs.core.EntityTag;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import org.joda.time.DateTime;
-import org.joda.time.format.ISODateTimeFormat;
-import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRenderer;
-
-public final class Responses {
-
- private Responses(){}
-
- public static Response.ResponseBuilder ofNoContent() {
- return of(RestfulResponse.HttpStatusCode.NO_CONTENT);
- }
-
- public static Response.ResponseBuilder ofOk(final ReprRenderer<?, ?> renderer, final ResourceAbstract.Caching caching) {
- return ofOk(renderer, caching, null);
- }
-
- public static Response.ResponseBuilder ofOk(final ReprRenderer<?, ?> renderer, final ResourceAbstract.Caching caching, final Version version) {
- final MediaType mediaType = renderer.getMediaType();
- final Response.ResponseBuilder response = of(RestfulResponse.HttpStatusCode.OK).type(mediaType).cacheControl(caching.getCacheControl()).entity(ResourceAbstract.jsonFor(renderer.render()));
- return addLastModifiedAndETagIfAvailable(response, version);
- }
-
- protected static Response.ResponseBuilder of(final RestfulResponse.HttpStatusCode httpStatusCode) {
- return Response.status(httpStatusCode.getJaxrsStatusType()).type(MediaType.APPLICATION_JSON_TYPE);
- }
-
- public static Response.ResponseBuilder addLastModifiedAndETagIfAvailable(final Response.ResponseBuilder responseBuilder, final Version version) {
- if (version != null && version.getTime() != null) {
- final Date time = version.getTime();
- responseBuilder.lastModified(time);
- responseBuilder.tag(asETag(time));
- }
- return responseBuilder;
- }
-
- private static EntityTag asETag(final Date time) {
- final String utcTime = ISODateTimeFormat.basicDateTime().print(new DateTime(time));
- return new EntityTag(utcTime, true);
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
index e226fa0..9d1b0c6 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
@@ -28,7 +28,9 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
import org.apache.isis.viewer.restfulobjects.applib.user.UserResource;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.Caching;
+import org.apache.isis.viewer.restfulobjects.rendering.Responses;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
public class UserResourceServerside extends ResourceAbstract implements UserResource {
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/Util.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/Util.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/Util.java
deleted file mode 100644
index 4af8803..0000000
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/Util.java
+++ /dev/null
@@ -1,124 +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.server.resources;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import com.google.common.base.Charsets;
-import com.google.common.io.ByteStreams;
-import org.codehaus.jackson.JsonParseException;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
-import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberType;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
-
-public final class Util {
-
- private Util(){}
-
- // //////////////////////////////////////////////////////////////
- // parsing
- // //////////////////////////////////////////////////////////////
-
- /**
- * Parse {@link java.io.InputStream} to String, else throw exception
- */
- public static String asStringUtf8(final InputStream body) {
- try {
- final byte[] byteArray = ByteStreams.toByteArray(body);
- return new String(byteArray, Charsets.UTF_8);
- } catch (final IOException e) {
- throw RestfulObjectsApplicationException.createWithCauseAndMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, e, "could not read body");
- }
- }
-
- /**
- * Parse (body) string to {@link org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation}, else throw exception
- */
- public static JsonRepresentation readAsMap(final String body) {
- if (body == null) {
- return JsonRepresentation.newMap();
- }
- final String bodyTrimmed = body.trim();
- if (bodyTrimmed.isEmpty()) {
- return JsonRepresentation.newMap();
- }
- return read(bodyTrimmed, "body");
- }
-
- /**
- * Parse (query) string to {@link org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation}, else throw exception
- */
- public static JsonRepresentation readQueryStringAsMap(final String queryString) {
- if (queryString == null) {
- return JsonRepresentation.newMap();
- }
- final String queryStringTrimmed = queryString.trim();
- if (queryStringTrimmed.isEmpty()) {
- return JsonRepresentation.newMap();
- }
- return read(queryStringTrimmed, "query string");
- }
-
- /**
- * REVIEW - looks similar to above methods, but now unused; can it be deleted?
- */
- public static JsonRepresentation readParameterMapAsMap(final Map<String, String[]> parameterMap) {
- final JsonRepresentation map = JsonRepresentation.newMap();
- for (final Map.Entry<String, String[]> parameter : parameterMap.entrySet()) {
- map.mapPut(parameter.getKey(), parameter.getValue()[0]);
- }
- return map;
- }
-
- private static JsonRepresentation read(final String args, final String argsNature) {
- try {
- final JsonRepresentation jsonRepr = JsonMapper.instance().read(args);
- if (!jsonRepr.isMap()) {
- throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, "could not read %s as a JSON map", argsNature);
- }
- return jsonRepr;
- } catch (final JsonParseException e) {
- throw RestfulObjectsApplicationException.createWithCauseAndMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, e, "could not parse %s", argsNature);
- } catch (final JsonMappingException e) {
- throw RestfulObjectsApplicationException.createWithCauseAndMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, e, "could not read %s as JSON", argsNature);
- } catch (final IOException e) {
- throw RestfulObjectsApplicationException.createWithCauseAndMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, e, "could not parse %s", argsNature);
- }
- }
-
-
- // //////////////////////////////////////////////////////////////
- // misc
- // //////////////////////////////////////////////////////////////
-
- static String resourceFor(final ObjectSpecification objectSpec) {
- // TODO: should return a string in the form
- // http://localhost:8080/types/xxx
- return objectSpec.getFullIdentifier();
- }
-
-
- public static void throwNotFoundException(final String memberId, final MemberType memberType) {
- final String memberTypeStr = memberType.name().toLowerCase();
- throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.NOT_FOUND, "%s '%s' either does not exist or is not visible", memberTypeStr, memberId);
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionResourceServerside.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionResourceServerside.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionResourceServerside.java
index 3e78a9c..c2d3da9 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionResourceServerside.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionResourceServerside.java
@@ -32,7 +32,9 @@ import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
import org.apache.isis.viewer.restfulobjects.applib.version.VersionResource;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.Caching;
+import org.apache.isis.viewer.restfulobjects.rendering.Responses;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
/**
* Implementation note: it seems to be necessary to annotate the implementation
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/NOTUSED_PathUtils.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/NOTUSED_PathUtils.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/NOTUSED_PathUtils.java
new file mode 100644
index 0000000..cf7d080
--- /dev/null
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/NOTUSED_PathUtils.java
@@ -0,0 +1,40 @@
+/*
+ * 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.server.util;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+public final class NOTUSED_PathUtils {
+
+ private NOTUSED_PathUtils() {
+ }
+
+ public static String combine(final HttpServletRequest request, final String... pathElements) {
+ final StringBuilder buf = new StringBuilder(request.getContextPath());
+ for (final String pathElement : pathElements) {
+ if (!pathElement.startsWith("/")) {
+ buf.append("/");
+ }
+ buf.append(pathElement);
+ }
+ return buf.toString();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
index d55ba71..a4856ba 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/OidUtils.java
@@ -39,22 +39,27 @@ public final class OidUtils {
/**
* @return {@code null} if not persistent and not a view model.
*/
- public static ObjectAdapter getObjectAdapterElseNull(final RendererContext resourceContext,
- final String domainType, final String instanceIdEncoded) {
+ public static ObjectAdapter getObjectAdapterElseNull(
+ final RendererContext rendererContext,
+ final String domainType, final String instanceIdEncoded) {
final String instanceIdUnencoded = UrlDecoderUtils.urlDecode(instanceIdEncoded);
String oidStrUnencoded = getOidMarshaller().joinAsOid(domainType, instanceIdUnencoded);
- return getObjectAdapter(resourceContext, oidStrUnencoded);
+ return getObjectAdapter(rendererContext, oidStrUnencoded);
}
/**
* see {@link #getObjectAdapterElseNull(org.apache.isis.viewer.restfulobjects.rendering.RendererContext, String, String)}
*/
- public static ObjectAdapter getObjectAdapterElseNull(final RendererContext resourceContext, final String oidStrEncoded) {
+ public static ObjectAdapter getObjectAdapterElseNull(
+ final RendererContext rendererContext,
+ final String oidStrEncoded) {
String oidStrUnencoded = UrlDecoderUtils.urlDecode(oidStrEncoded);
- return getObjectAdapter(resourceContext, oidStrUnencoded);
+ return getObjectAdapter(rendererContext, oidStrUnencoded);
}
- private static ObjectAdapter getObjectAdapter(RendererContext resourceContext, String oidStrUnencoded) {
+ private static ObjectAdapter getObjectAdapter(
+ final RendererContext rendererContext,
+ final String oidStrUnencoded) {
RootOidDefault rootOid = RootOidDefault.deString(oidStrUnencoded, getOidMarshaller());
final ObjectSpecId specId = rootOid.getObjectSpecId();
@@ -65,7 +70,7 @@ public final class OidUtils {
}
// TODO: the logic to figure out which PersistenceSession API to call should be pushed down into PersistenceSession itself.
- final PersistenceSession persistenceSession = resourceContext.getPersistenceSession();
+ final PersistenceSession persistenceSession = rendererContext.getPersistenceSession();
if(spec.containsFacet(ViewModelFacet.class)) {
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/PathUtils.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/PathUtils.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/PathUtils.java
deleted file mode 100644
index 2410679..0000000
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/PathUtils.java
+++ /dev/null
@@ -1,40 +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.server.util;
-
-import javax.servlet.http.HttpServletRequest;
-
-
-public final class PathUtils {
-
- private PathUtils() {
- }
-
- public static String combine(final HttpServletRequest request, final String... pathElements) {
- final StringBuilder buf = new StringBuilder(request.getContextPath());
- for (final String pathElement : pathElements) {
- if (!pathElement.startsWith("/")) {
- buf.append("/");
- }
- buf.append(pathElement);
- }
- return buf.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/UrlParserUtils.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/UrlParserUtils.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/UrlParserUtils.java
index 4921a1b..ec7f71c 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/UrlParserUtils.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/util/UrlParserUtils.java
@@ -20,26 +20,13 @@ package org.apache.isis.viewer.restfulobjects.server.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-
-import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
public final class UrlParserUtils {
- private final static Pattern OBJECT_OID = Pattern.compile(".*objects\\/([^/]+)\\/(.+)");;
- private final static Pattern DOMAIN_TYPE = Pattern.compile(".*domain-types\\/([^/]+).*");;
+ private UrlParserUtils(){}
- public final static String encodedOidFromLink(final JsonRepresentation link) {
- final String href = link.getString("href");
-
- final Matcher matcher = OBJECT_OID.matcher(href);
- if (!matcher.matches()) {
- return null;
- }
- String domainType = matcher.group(1);
- String instanceId = matcher.group(2);
- return getOidMarshaller().joinAsOid(domainType, instanceId);
- }
+ private final static Pattern DOMAIN_TYPE = Pattern.compile(".*domain-types\\/([^/]+).*");;
public final static String domainTypeFrom(final JsonRepresentation link) {
return domainTypeFrom(link.getString("href"));
@@ -53,8 +40,5 @@ public final class UrlParserUtils {
return matcher.group(1);
}
- private static OidMarshaller getOidMarshaller() {
- return new OidMarshaller();
- }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_ensureCompatibleAcceptHeader.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_ensureCompatibleAcceptHeader.java b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_ensureCompatibleAcceptHeader.java
index f83eb59..824db47 100644
--- a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_ensureCompatibleAcceptHeader.java
+++ b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_ensureCompatibleAcceptHeader.java
@@ -32,6 +32,7 @@ import org.junit.Before;
import org.junit.Test;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapperTest.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapperTest.java b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapperTest.java
index b900a62..8dae5e9 100644
--- a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapperTest.java
+++ b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapperTest.java
@@ -31,6 +31,7 @@ import org.junit.Test;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
public class RestfulObjectsApplicationExceptionMapperTest {
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelperTest_readBodyAsMap.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelperTest_readBodyAsMap.java b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelperTest_readBodyAsMap.java
index c694d49..b119ba9 100644
--- a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelperTest_readBodyAsMap.java
+++ b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelperTest_readBodyAsMap.java
@@ -24,7 +24,8 @@ import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
public class DomainResourceHelperTest_readBodyAsMap {
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelpTest.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelpTest.java b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelpTest.java
new file mode 100644
index 0000000..8d64a93
--- /dev/null
+++ b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelpTest.java
@@ -0,0 +1,36 @@
+/*
+ * 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.server.resources;
+
+import org.junit.Test;
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+
+import static org.junit.Assert.assertEquals;
+
+public class JsonParserHelpTest {
+
+ @Test
+ public void oidFromLink() throws Exception {
+ final JsonRepresentation link = JsonRepresentation.newMap();
+ link.mapPut("href", "http://localhost/objects/OID/1");
+ final String oidFromHref = JsonParserHelper.encodedOidFromLink(link);
+ assertEquals("OID:1", oidFromHref);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/util/UrlParserUtilsTest.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/util/UrlParserUtilsTest.java b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/util/UrlParserUtilsTest.java
index edbff05..b659df4 100644
--- a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/util/UrlParserUtilsTest.java
+++ b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/util/UrlParserUtilsTest.java
@@ -18,21 +18,12 @@
*/
package org.apache.isis.viewer.restfulobjects.server.util;
-import static org.junit.Assert.assertEquals;
-
import org.junit.Test;
-
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-public class UrlParserUtilsTest {
+import static org.junit.Assert.assertEquals;
- @Test
- public void oidFromLink() throws Exception {
- final JsonRepresentation link = JsonRepresentation.newMap();
- link.mapPut("href", "http://localhost/objects/OID/1");
- final String oidFromHref = UrlParserUtils.encodedOidFromLink(link);
- assertEquals("OID:1", oidFromHref);
- }
+public class UrlParserUtilsTest {
@Test
public void domainTypeFromLink() throws Exception {
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/example/application/todoapp/webapp/src/main/java/webapp/CustomRepresentationService.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/java/webapp/CustomRepresentationService.java b/example/application/todoapp/webapp/src/main/java/webapp/CustomRepresentationService.java
new file mode 100644
index 0000000..9cf70af
--- /dev/null
+++ b/example/application/todoapp/webapp/src/main/java/webapp/CustomRepresentationService.java
@@ -0,0 +1,32 @@
+/*
+ * 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 webapp;
+
+import javax.ws.rs.core.Response;
+import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationServiceForRestfulObjects;
+
+public class CustomRepresentationService extends RepresentationServiceForRestfulObjects {
+
+ @Override
+ protected Response buildResponse(Response.ResponseBuilder responseBuilder) {
+ responseBuilder.header("X-ResponseGeneratedBy", getClass().getCanonicalName());
+ return super.buildResponse(responseBuilder);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/example/application/todoapp/webapp/src/main/java/webapp/CustomResponseGeneratorService.java
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/java/webapp/CustomResponseGeneratorService.java b/example/application/todoapp/webapp/src/main/java/webapp/CustomResponseGeneratorService.java
deleted file mode 100644
index 7fb1c9a..0000000
--- a/example/application/todoapp/webapp/src/main/java/webapp/CustomResponseGeneratorService.java
+++ /dev/null
@@ -1,32 +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 webapp;
-
-import javax.ws.rs.core.Response;
-import org.apache.isis.viewer.restfulobjects.server.resources.ResponseGeneratorService;
-
-public class CustomResponseGeneratorService extends ResponseGeneratorService {
-
- @Override
- protected Response buildResponse(Response.ResponseBuilder responseBuilder) {
- responseBuilder.header("X-ResponseGeneratedBy", getClass().getCanonicalName());
- return super.buildResponse(responseBuilder);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6907534b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
index 2b70530..11f9141 100644
--- a/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/todoapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -149,7 +149,7 @@ isis.services = \
org.apache.isis.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore,\
#,\
1:webapp.CustomMementoService,\
- 1:webapp.CustomResponseGeneratorService
+ 1:webapp.CustomRepresentationService
# Specify the (optional) test fixtures