You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/02/26 00:28:30 UTC
[24/24] git commit: ISIS-233-ro: testing domainservices_services
resource
Updated Branches:
refs/heads/dan/ISIS-233-ro 0744aad24 -> 3c7b08fa5 (forced update)
ISIS-233-ro: testing domainservices_services resource
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/3c7b08fa
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/3c7b08fa
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/3c7b08fa
Branch: refs/heads/dan/ISIS-233-ro
Commit: 3c7b08fa51786cdefbc7794179006c5195774727
Parents: 6b9d42a
Author: Dan Haywood <da...@apache.org>
Authored: Mon Feb 25 23:16:38 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Mon Feb 25 23:16:38 2013 +0000
----------------------------------------------------------------------
.../isis/viewer/restfulobjects/applib/Rel.java | 94 ++--
.../restfulobjects/applib/RelDefinition.java | 53 ++
.../restfulobjects/applib/RepresentationType.java | 25 +
.../applib/client/RestfulRequest.java | 2 +-
.../applib/client/RestfulResponse.java | 22 +-
.../viewer/restfulobjects/applib/util/Parser.java | 1 -
.../RestfulRequestDomainModelTest_parser.java | 40 --
...RestfulRequestRequestParameterTest_valueOf.java | 92 ----
.../RestfulRequest_DomainModelTest_parser.java | 40 ++
...equestParameterTest_valueOf_xrodomainmodel.java | 55 ++
...equestParameterTest_valueOf_xrofollowlinks.java | 94 ++++
.../client/RestfulResponse_HeaderTest_Warning.java | 43 ++
.../restfulobjects/rendering/ReprRenderer.java | 4 +-
.../rendering/ReprRendererAbstract.java | 30 +-
.../AbstractObjectMemberReprRenderer.java | 2 +
.../domainobjects/DomainObjectReprRenderer.java | 4 +
.../DomainServicesListReprRenderer.java | 54 --
.../rendering/domainobjects/ListReprRenderer.java | 13 +-
.../domainobjects/ScalarValueReprRenderer.java | 6 +-
.../AbstractTypeMemberReprRenderer.java | 2 +-
.../domaintypes/TypeActionResultReprRenderer.java | 5 +
.../rendering/LinkFollowSpecsTest_follow.java | 1 -
.../restfulobjects/server/ResourceContext.java | 94 ++--
.../RestfulObjectsApplicationExceptionMapper.java | 4 +-
.../resources/DomainServiceResourceServerside.java | 10 +-
.../resources/DomainServicesListReprRenderer.java | 70 +++
.../resources/DomainTypeResourceServerside.java | 1 +
.../server/resources/ResourceAbstract.java | 6 +-
.../restfulobjects/tck/RepresentationMatchers.java | 12 +-
...Test_serverSideException_exceptionHandling.java | 65 +++
...sourceTest_serviceId_request_header_accept.java | 110 ++++
..._serviceId_request_queryarg_xrodomainmodel.java | 75 +++
..._serviceId_request_queryarg_xrofollowlinks.java | 99 ++++
...iceResourceTest_serviceId_response_headers.java | 66 +++
...urceTest_serviceId_response_representation.java | 88 ++++
...viceResourceTest_serviceId_status_notFound.java | 70 +++
...ServiceResourceTest_services_header_accept.java | 105 ++++
...ourceTest_services_queryarg_xrofollowlinks.java | 152 ++++++
...viceResourceTest_services_response_headers.java | 82 +++
...ourceTest_services_response_representation.java | 128 +++++
.../restfulobjects/tck/domainservice/Util.java | 49 ++
.../HomePageResourceTest_root_header_accept.java | 106 ++++
...ResourceTest_root_queryargs_xrofollowlinks.java | 168 ++++++
...HomePageResourceTest_root_response_headers.java | 79 +++
...eResourceTest_root_response_representation.java | 111 ++++
...Test_serverSideException_exceptionHandling.java | 72 ---
...nServiceResourceTest_services_acceptHeader.java | 106 ----
...erviceResourceTest_services_representation.java | 137 -----
...rviceResourceTest_services_responseHeaders.java | 82 ---
...erviceResourceTest_services_xrofollowlinks.java | 122 -----
.../home/HomePageResourceTest_acceptHeader.java | 106 ----
.../home/HomePageResourceTest_representation.java | 111 ----
.../home/HomePageResourceTest_responseHeaders.java | 79 ---
.../home/HomePageResourceTest_xrofollowlinks.java | 168 ------
.../resources/object/DomainObjectResourceTest.java | 401 ---------------
.../DomainServiceResourceTest_invokeAction.java | 265 ----------
...DomainServiceResourceTest_serviceId_accept.java | 102 ----
...mainServiceResourceTest_serviceId_notFound.java | 65 ---
...rceTest_serviceId_representationAndHeaders.java | 129 -----
...rviceResourceTest_serviceId_xrofollowlinks.java | 97 ----
.../user/UserResourceTest_acceptHeader.java | 105 ----
.../user/UserResourceTest_representation.java | 104 ----
.../user/UserResourceTest_responseHeaders.java | 96 ----
.../user/UserResourceTest_xrofollowlinks.java | 92 ----
.../version/VersionResourceTest_acceptHeader.java | 110 ----
.../VersionResourceTest_representation.java | 113 ----
.../VersionResourceTest_responseHeaders.java | 82 ---
.../VersionResourceTest_xrofollowlinks.java | 88 ----
.../restfulobjects/tck/stories/UserStoryTest.java | 86 ---
...serResourceTest_root_request_header_accept.java | 105 ++++
...Test_root_request_queryargs_xrofollowlinks.java | 92 ++++
.../UserResourceTest_root_response_headers.java | 96 ++++
...rResourceTest_root_response_representation.java | 104 ++++
...ionResourceTest_root_request_header_accept.java | 110 ++++
...Test_root_request_queryargs_xrofollowlinks.java | 88 ++++
.../VersionResourceTest_root_response_headers.java | 82 +++
...nResourceTest_root_response_representation.java | 113 ++++
...nstanceid_get_response_header_cacheControl.java | 61 +++
...est_instanceid_get_response_representation.java | 401 +++++++++++++++
...ServiceResourceTest_serviceId_invokeAction.java | 265 ++++++++++
...rceTest_serviceId_invokeAction_returnsList.java | 13 +
...eTest_serviceId_invokeAction_returnsObject.java | 13 +
...eTest_serviceId_invokeAction_returnsScalar.java | 13 +
...rceTest_serviceId_invokeAction_returnsVoid.java | 13 +
...rceTest_serviceId_invokeAction_throwsError.java | 13 +
...bjectsOfTypeResourceTest_domainTypeId_post.java | 13 +
.../tck/zzztodo/stories/UserStoryTest.java | 86 +++
87 files changed, 3808 insertions(+), 3223 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
index 7184f59..c52b49a 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/Rel.java
@@ -19,71 +19,67 @@
package org.apache.isis.viewer.restfulobjects.applib;
public enum Rel {
-
- // IANA registered
- SELF("self"),
- DESCRIBEDBY("describedby"),
- UP("up"),
- PREVIOUS("previous"),
- NEXT("next"),
- HELP("help"),
- ICON("icon"),
+
+ SELF(RelDefinition.IANA, "self"),
+ DESCRIBEDBY(RelDefinition.IANA, "describedby"),
+ UP(RelDefinition.IANA,"up"),
+ PREVIOUS(RelDefinition.IANA,"previous"),
+ NEXT(RelDefinition.IANA,"next"),
+ HELP(RelDefinition.IANA,"help"),
+ ICON(RelDefinition.IANA,"icon"),
// Restful Objects namespace
- ACTION(Spec.REL_PREFIX + "action"),
- ACTION_PARAM(Spec.REL_PREFIX + "action-param"),
- ADD_TO(Spec.REL_PREFIX + "add-to"),
- ATTACHMENT(Spec.REL_PREFIX + "attachment"),
- CHOICE(Spec.REL_PREFIX + "choice"),
- CLEAR(Spec.REL_PREFIX + "clear"),
- COLLECTION(Spec.REL_PREFIX + "collection"),
- DEFAULT(Spec.REL_PREFIX + "default"),
- DELETE(Spec.REL_PREFIX + "delete"),
- DETAILS(Spec.REL_PREFIX + "details"),
- DOMAIN_TYPE(Spec.REL_PREFIX + "domain-type"),
- DOMAIN_TYPES(Spec.REL_PREFIX + "domain-types"),
- ELEMENT(Spec.REL_PREFIX + "element"),
- ELEMENT_TYPE(Spec.REL_PREFIX + "element-type"),
- INVOKE(Spec.REL_PREFIX + "invoke"),
- MODIFY(Spec.REL_PREFIX + "modify"),
- PERSIST(Spec.REL_PREFIX + "persist"),
- PROPERTY(Spec.REL_PREFIX + "property"),
- REMOVE_FROM(Spec.REL_PREFIX + "remove-from"),
- RETURN_TYPE(Spec.REL_PREFIX + "return-type"),
- SERVICE(Spec.REL_PREFIX + "service"),
- SERVICES(Spec.REL_PREFIX + "services"),
- UPDATE(Spec.REL_PREFIX + "update"),
- USER(Spec.REL_PREFIX + "user"),
- VALUE(Spec.REL_PREFIX + "value"),
- VERSION(Spec.REL_PREFIX + "version"),
+ ACTION(RelDefinition.RO_SPEC, "action"),
+ ACTION_PARAM(RelDefinition.RO_SPEC, "action-param"),
+ ADD_TO(RelDefinition.RO_SPEC, "add-to"),
+ ATTACHMENT(RelDefinition.RO_SPEC, "attachment"),
+ CHOICE(RelDefinition.RO_SPEC, "choice"),
+ CLEAR(RelDefinition.RO_SPEC, "clear"),
+ COLLECTION(RelDefinition.RO_SPEC, "collection"),
+ DEFAULT(RelDefinition.RO_SPEC, "default"),
+ DELETE(RelDefinition.RO_SPEC, "delete"),
+ DETAILS(RelDefinition.RO_SPEC, "details"),
+ DOMAIN_TYPE(RelDefinition.RO_SPEC, "domain-type"),
+ DOMAIN_TYPES(RelDefinition.RO_SPEC, "domain-types"),
+ ELEMENT(RelDefinition.RO_SPEC, "element"),
+ ELEMENT_TYPE(RelDefinition.RO_SPEC, "element-type"),
+ INVOKE(RelDefinition.RO_SPEC, "invoke"),
+ MODIFY(RelDefinition.RO_SPEC, "modify"),
+ PERSIST(RelDefinition.RO_SPEC, "persist"),
+ PROPERTY(RelDefinition.RO_SPEC, "property"),
+ REMOVE_FROM(RelDefinition.RO_SPEC, "remove-from"),
+ RETURN_TYPE(RelDefinition.RO_SPEC, "return-type"),
+ SERVICE(RelDefinition.RO_SPEC, "service"),
+ SERVICES(RelDefinition.RO_SPEC, "services"),
+ UPDATE(RelDefinition.RO_SPEC, "update"),
+ USER(RelDefinition.RO_SPEC, "user"),
+ VALUE(RelDefinition.RO_SPEC, "value"),
+ VERSION(RelDefinition.RO_SPEC, "version"),
// implementation specific
- CONTRIBUTED_BY(Impl.REL_PREFIX + "contributed-by");
+ CONTRIBUTED_BY(RelDefinition.IMPL, "contributed-by");
- private final String name;
+ private final RelDefinition relDef;
+ private final String relSuffix;
- private Rel(final String name) {
- this.name = name;
+ private Rel(final RelDefinition relDef, final String name) {
+ this.relDef = relDef;
+ this.relSuffix = name;
}
public String getName() {
- return name;
+ return relDef.nameOf(relSuffix);
}
/**
* For those {@link Rel}s that also take a param
*/
public String andParam(String paramName, String paramValue) {
- return name + ";" + paramName + "=" + "\"" + paramValue + "\"";
- }
-
- private static class Spec {
- final static String REL_PREFIX = "urn:org.restfulobjects:rels/";
- }
-
- private static class Impl {
- final static String REL_PREFIX = "urn:org.apache.isis.restfulobjects:rels/";
+ return getName() +
+ (relDef.canAddParams()
+ ?";" + paramName + "=" + "\"" + paramValue + "\""
+ :"");
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RelDefinition.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RelDefinition.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RelDefinition.java
new file mode 100644
index 0000000..efb269e
--- /dev/null
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RelDefinition.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restfulobjects.applib;
+
+/**
+ * Enumerates the organization that defined a {@link Rel}.
+ */
+public enum RelDefinition {
+
+ /**
+ * {@link Rel} defined by IANA.
+ */
+ IANA(null, false),
+ /**
+ * {@link Rel} defined by the Restful Objects spec.
+ */
+ RO_SPEC("urn:org.restfulobjects:rels/", true),
+ /**
+ * Proprietary rel defined by implementation.
+ */
+ IMPL("urn:org.apache.isis.restfulobjects:rels/", true);
+
+ private final String relPrefix;
+ private final boolean addParams;
+
+ private RelDefinition(String relPrefix, boolean canAddParams) {
+ this.relPrefix = relPrefix;
+ this.addParams = canAddParams;
+ }
+
+ public String nameOf(String relSuffix) {
+ return (relPrefix != null? relPrefix:"") +relSuffix;
+ }
+ public boolean canAddParams() {
+ return addParams;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
index c0fd7f9..1a2a005 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
@@ -19,6 +19,9 @@
package org.apache.isis.viewer.restfulobjects.applib;
+import java.util.Collections;
+import java.util.Map;
+
import javax.ws.rs.core.MediaType;
import org.apache.isis.applib.util.Enums;
@@ -41,6 +44,8 @@ import org.apache.isis.viewer.restfulobjects.applib.user.UserRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.util.Parser;
import org.apache.isis.viewer.restfulobjects.applib.version.VersionRepresentation;
+import com.google.common.collect.Maps;
+
public enum RepresentationType {
HOME_PAGE(RestfulMediaType.APPLICATION_JSON_HOME_PAGE, HomePageRepresentation.class),
@@ -84,6 +89,24 @@ public enum RepresentationType {
return mediaType;
}
+ /**
+ * Clones the (immutable) {@link #getMediaType() media type}, adding in one additional
+ * parameter value.
+ */
+ public MediaType getMediaType(String parameter, String paramValue) {
+ return getMediaType(Collections.singletonMap(parameter, paramValue));
+ }
+
+ /**
+ * Clones the (immutable) {@link #getMediaType() media type}, adding all provided
+ * parameters.
+ */
+ public MediaType getMediaType(Map<String, String> mediaTypeParams) {
+ Map<String, String> parameters = Maps.newHashMap(mediaType.getParameters());
+ parameters.putAll(mediaTypeParams);
+ return new MediaType(mediaType.getType(), mediaType.getSubtype(), parameters);
+ }
+
public String getMediaTypeProfile() {
return getMediaType().getParameters().get("profile");
}
@@ -124,4 +147,6 @@ public enum RepresentationType {
};
}
+
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest.java
index fa3f0e1..22e7bea 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest.java
@@ -64,7 +64,7 @@ public final class RestfulRequest {
public static RequestParameter<Integer> PAGE = new RequestParameter<Integer>("x-ro-page", Parser.forInteger(), 1);
public static RequestParameter<Integer> PAGE_SIZE = new RequestParameter<Integer>("x-ro-page-size", Parser.forInteger(), 25);
public static RequestParameter<List<String>> SORT_BY = new RequestParameter<List<String>>("x-ro-sort-by", Parser.forListOfStrings(), Collections.<String> emptyList());
- public static RequestParameter<DomainModel> DOMAIN_MODEL = new RequestParameter<DomainModel>("x-ro-domain-model", DomainModel.parser(), DomainModel.SIMPLE);
+ public static RequestParameter<DomainModel> DOMAIN_MODEL = new RequestParameter<DomainModel>("x-ro-domain-model", DomainModel.parser(), DomainModel.FORMAL);
public static RequestParameter<Boolean> VALIDATE_ONLY = new RequestParameter<Boolean>("x-ro-validate-only", Parser.forBoolean(), false);
private final String name;
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulResponse.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulResponse.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulResponse.java
index 17b8818..6c96b1e 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulResponse.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulResponse.java
@@ -30,6 +30,7 @@ import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.Response.Status.Family;
import javax.ws.rs.core.Response.StatusType;
+import org.apache.isis.core.commons.lang.StringUtils;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
@@ -37,6 +38,7 @@ import org.apache.isis.viewer.restfulobjects.applib.util.Parser;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
+import com.google.common.base.Strings;
import com.google.common.collect.Maps;
public class RestfulResponse<T> {
@@ -239,7 +241,7 @@ public class RestfulResponse<T> {
public static class Header<X> {
- public final static Header<String> WARNING = new Header<String>("Warning", Parser.forString());
+ public final static Header<String> WARNING = new Header<String>("Warning", warningParser());
public final static Header<Date> LAST_MODIFIED = new Header<Date>("Last-Modified", Parser.forDate());
public final static Header<CacheControl> CACHE_CONTROL = new Header<CacheControl>("Cache-Control", Parser.forCacheControl());
public final static Header<MediaType> CONTENT_TYPE = new Header<MediaType>("Content-Type", Parser.forJaxRsMediaType());
@@ -260,6 +262,24 @@ public class RestfulResponse<T> {
return parser.valueOf(value);
}
+ private static Parser<String> warningParser() {
+ return new Parser<String>(){
+ private static final String PREFIX = "199 RestfulObjects ";
+
+ @Override
+ public String valueOf(String str) {
+ return stripPrefix(str, PREFIX);
+ }
+
+ @Override
+ public String asString(String str) {
+ return PREFIX + str;
+ }
+ private String stripPrefix(String str, String prefix) {
+ return str.startsWith(prefix) ? str.substring(prefix.length()) : str;
+ }
+ };
+ }
}
private final Response response;
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Parser.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Parser.java b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Parser.java
index 706de82..846e0ea 100644
--- a/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Parser.java
+++ b/component/viewer/restfulobjects/applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Parser.java
@@ -164,7 +164,6 @@ public abstract class Parser<T> {
public String asString(final com.google.common.net.MediaType t) {
return t.toString();
}
-
};
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequestDomainModelTest_parser.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequestDomainModelTest_parser.java b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequestDomainModelTest_parser.java
deleted file mode 100644
index a690927..0000000
--- a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequestDomainModelTest_parser.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.applib.client;
-
-import static org.junit.Assert.assertSame;
-
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.DomainModel;
-import org.apache.isis.viewer.restfulobjects.applib.util.Parser;
-import org.junit.Test;
-
-public class RestfulRequestDomainModelTest_parser {
-
- @Test
- public void parser_roundtrips() {
- final Parser<DomainModel> parser = RestfulRequest.DomainModel.parser();
- for (final DomainModel domainModel : DomainModel.values()) {
- final String asString = parser.asString(domainModel);
- final DomainModel roundtripped = parser.valueOf(asString);
- assertSame(roundtripped, domainModel);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequestRequestParameterTest_valueOf.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequestRequestParameterTest_valueOf.java b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequestRequestParameterTest_valueOf.java
deleted file mode 100644
index 60b737f..0000000
--- a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequestRequestParameterTest_valueOf.java
+++ /dev/null
@@ -1,92 +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.applib.client;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-import java.util.List;
-
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest;
-import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.RequestParameter;
-import org.junit.Before;
-import org.junit.Test;
-
-public class RestfulRequestRequestParameterTest_valueOf {
-
- private final RequestParameter<List<List<String>>> requestParameter = RestfulRequest.RequestParameter.FOLLOW_LINKS;
-
- private JsonRepresentation repr;
-
- @Before
- public void setUp() throws Exception {
- repr = JsonRepresentation.newMap();
- }
-
- @Test
- public void mapContainsList() {
- repr.mapPut("x-ro-follow-links", "a,b.c");
- final List<List<String>> valueOf = requestParameter.valueOf(repr);
-
- assertThat(valueOf.size(), is(2));
- assertThat(valueOf.get(0).size(), is(1));
- assertThat(valueOf.get(0).get(0), is("a"));
- assertThat(valueOf.get(1).size(), is(2));
- assertThat(valueOf.get(1).get(0), is("b"));
- assertThat(valueOf.get(1).get(1), is("c"));
- }
-
- @Test
- public void mapHasNoKey() {
- repr.mapPut("something-else", "a,b.c");
- final List<List<String>> valueOf = requestParameter.valueOf(repr);
-
- assertThat(valueOf.size(), is(0));
- }
-
- @Test
- public void mapIsEmpty() {
- final List<List<String>> valueOf = requestParameter.valueOf(repr);
-
- assertThat(valueOf.size(), is(0));
- }
-
- @Test
- public void mapIsNull() {
- final List<List<String>> valueOf = requestParameter.valueOf(null);
-
- assertThat(valueOf.size(), is(0));
- }
-
- @Test
- public void mapContainsCommaSeparatedList() {
-
- repr.mapPut("x-ro-follow-links", "a,b.c");
- final List<List<String>> valueOf = requestParameter.valueOf(repr);
-
- assertThat(valueOf.size(), is(2));
- assertThat(valueOf.get(0).size(), is(1));
- assertThat(valueOf.get(0).get(0), is("a"));
- assertThat(valueOf.get(1).size(), is(2));
- assertThat(valueOf.get(1).get(0), is("b"));
- assertThat(valueOf.get(1).get(1), is("c"));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_DomainModelTest_parser.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_DomainModelTest_parser.java b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_DomainModelTest_parser.java
new file mode 100644
index 0000000..2949bf0
--- /dev/null
+++ b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_DomainModelTest_parser.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.applib.client;
+
+import static org.junit.Assert.assertSame;
+
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.DomainModel;
+import org.apache.isis.viewer.restfulobjects.applib.util.Parser;
+import org.junit.Test;
+
+public class RestfulRequest_DomainModelTest_parser {
+
+ @Test
+ public void parser_roundtrips() {
+ final Parser<DomainModel> parser = RestfulRequest.DomainModel.parser();
+ for (final DomainModel domainModel : DomainModel.values()) {
+ final String asString = parser.asString(domainModel);
+ final DomainModel roundtripped = parser.valueOf(asString);
+ assertSame(roundtripped, domainModel);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_RequestParameterTest_valueOf_xrodomainmodel.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_RequestParameterTest_valueOf_xrodomainmodel.java b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_RequestParameterTest_valueOf_xrodomainmodel.java
new file mode 100644
index 0000000..3d4da4a
--- /dev/null
+++ b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_RequestParameterTest_valueOf_xrodomainmodel.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restfulobjects.applib.client;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.DomainModel;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.RequestParameter;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RestfulRequest_RequestParameterTest_valueOf_xrodomainmodel {
+
+ private final RequestParameter<DomainModel> requestParameter = RestfulRequest.RequestParameter.DOMAIN_MODEL;
+
+ private JsonRepresentation repr;
+
+ @Before
+ public void setUp() throws Exception {
+ repr = JsonRepresentation.newMap();
+ }
+
+ @Test
+ public void simple() {
+ repr.mapPut("x-ro-domain-model", "simple");
+ final DomainModel valueOf = requestParameter.valueOf(repr);
+
+ assertThat(valueOf, is(DomainModel.SIMPLE));
+ }
+
+ @Test
+ public void whenNone() {
+ final DomainModel valueOf = requestParameter.valueOf(repr);
+
+ assertThat(valueOf, is(DomainModel.FORMAL));
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_RequestParameterTest_valueOf_xrofollowlinks.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_RequestParameterTest_valueOf_xrofollowlinks.java b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_RequestParameterTest_valueOf_xrofollowlinks.java
new file mode 100644
index 0000000..4b32a8e
--- /dev/null
+++ b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulRequest_RequestParameterTest_valueOf_xrofollowlinks.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restfulobjects.applib.client;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.RequestParameter;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RestfulRequest_RequestParameterTest_valueOf_xrofollowlinks {
+
+ private final RequestParameter<List<List<String>>> requestParameter = RestfulRequest.RequestParameter.FOLLOW_LINKS;
+
+ private JsonRepresentation repr;
+
+ @Before
+ public void setUp() throws Exception {
+ repr = JsonRepresentation.newMap();
+ }
+
+ @Test
+ public void mapContainsList() {
+ repr.mapPut("x-ro-follow-links", "a,b.c");
+ final List<List<String>> valueOf = requestParameter.valueOf(repr);
+
+ assertThat(valueOf.size(), is(2));
+ assertThat(valueOf.get(0).size(), is(1));
+ assertThat(valueOf.get(0).get(0), is("a"));
+ assertThat(valueOf.get(1).size(), is(2));
+ assertThat(valueOf.get(1).get(0), is("b"));
+ assertThat(valueOf.get(1).get(1), is("c"));
+ }
+
+ @Test
+ public void mapHasNoKey() {
+ repr.mapPut("something-else", "a,b.c");
+ final List<List<String>> valueOf = requestParameter.valueOf(repr);
+
+ assertThat(valueOf.size(), is(0));
+ }
+
+ @Test
+ public void mapIsEmpty() {
+ final List<List<String>> valueOf = requestParameter.valueOf(repr);
+
+ assertThat(valueOf.size(), is(0));
+ }
+
+ @Test
+ public void mapIsNull() {
+ final List<List<String>> valueOf = requestParameter.valueOf(null);
+
+ assertThat(valueOf.size(), is(0));
+ }
+
+ @Test
+ public void mapContainsCommaSeparatedList() {
+
+ repr.mapPut("x-ro-follow-links", "a,b.c");
+ final List<List<String>> valueOf = requestParameter.valueOf(repr);
+
+ assertThat(valueOf.size(), is(2));
+ assertThat(valueOf.get(0).size(), is(1));
+ assertThat(valueOf.get(0).get(0), is("a"));
+ assertThat(valueOf.get(1).size(), is(2));
+ assertThat(valueOf.get(1).get(0), is("b"));
+ assertThat(valueOf.get(1).get(1), is("c"));
+ }
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulResponse_HeaderTest_Warning.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulResponse_HeaderTest_Warning.java b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulResponse_HeaderTest_Warning.java
new file mode 100644
index 0000000..294cab7
--- /dev/null
+++ b/component/viewer/restfulobjects/applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/client/RestfulResponse_HeaderTest_Warning.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.applib.client;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+public class RestfulResponse_HeaderTest_Warning {
+
+
+ @Test
+ public void nonEmptyString() throws Exception {
+ assertThat(RestfulResponse.Header.WARNING.parse("199 RestfulObjects abc"), is("abc"));
+ }
+
+ @Test
+ public void emptyString() throws Exception {
+ assertThat(RestfulResponse.Header.WARNING.parse("199 RestfulObjects "), is(""));
+ }
+
+ @Test
+ public void noPrefix() throws Exception {
+ assertThat(RestfulResponse.Header.WARNING.parse("199 RestfulObject prefix is missing an 's'"), is("199 RestfulObject prefix is missing an 's'"));
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRenderer.java
index 81a03da..d0633ad 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRenderer.java
@@ -18,12 +18,14 @@
*/
package org.apache.isis.viewer.restfulobjects.rendering;
+import javax.ws.rs.core.MediaType;
+
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
public interface ReprRenderer<R extends ReprRenderer<R, T>, T> {
- RepresentationType getRepresentationType();
+ MediaType getMediaType();
R with(T t);
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
index fe57485..155eb96 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
@@ -19,8 +19,10 @@
package org.apache.isis.viewer.restfulobjects.rendering;
import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.core.MediaType;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -31,12 +33,15 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.DomainTypeReprRenderer;
+import com.google.common.collect.Maps;
+
public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>, T> implements ReprRenderer<R, T> {
protected final RendererContext rendererContext;
private final LinkFollowSpecs linkFollower;
private final RepresentationType representationType;
protected final JsonRepresentation representation;
+ private final Map<String,String> mediaTypeParams = Maps.newLinkedHashMap();
protected boolean includesSelf;
@@ -63,8 +68,12 @@ public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>,
}
@Override
- public RepresentationType getRepresentationType() {
- return representationType;
+ public MediaType getMediaType() {
+ return representationType.getMediaType(mediaTypeParams);
+ }
+
+ protected void addMediaTypeParams(String param, String paramValue) {
+ mediaTypeParams.put(param, paramValue);
}
@SuppressWarnings("unchecked")
@@ -73,10 +82,6 @@ public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>,
return (R) this;
}
- public R withSelf(final JsonRepresentation link) {
- return withLink(Rel.SELF, link);
- }
-
public R withLink(final Rel rel, final String href) {
if (href != null) {
getLinks().arrayAdd(LinkBuilder.newBuilder(rendererContext, rel.getName(), representationType, href).build());
@@ -113,7 +118,16 @@ public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>,
return;
}
final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getRendererContext(), rel, objectSpec);
- getLinks().arrayAdd(linkBuilder.build());
+ JsonRepresentation link = linkBuilder.build();
+ getLinks().arrayAdd(link);
+
+ final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
+ if (linkFollower.matches(link)) {
+ final DomainTypeReprRenderer renderer = new DomainTypeReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap())
+ .with(objectSpec);
+ link.mapPut("value", renderer.render());
+ }
+
}
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
index d824d6a..47357d4 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
@@ -16,6 +16,8 @@
*/
package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
+import javax.ws.rs.core.MediaType;
+
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index 65aef76..e8e8454 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -46,6 +46,8 @@ import org.apache.isis.viewer.restfulobjects.rendering.util.OidUtils;
public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectReprRenderer, ObjectAdapter> {
+ private static final String X_RO_DOMAIN_TYPE = "x-ro-domain-type";
+
public static LinkBuilder newLinkToBuilder(final RendererContext rendererContext, final Rel rel, final ObjectAdapter objectAdapter) {
String domainType = OidUtils.getDomainType(objectAdapter);
String instanceId = OidUtils.getInstanceId(rendererContext, objectAdapter);
@@ -104,9 +106,11 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
@Override
public DomainObjectReprRenderer with(final ObjectAdapter objectAdapter) {
this.objectAdapter = objectAdapter;
+ addMediaTypeParams(X_RO_DOMAIN_TYPE, objectAdapter.getSpecification().getFullIdentifier());
return this;
}
+
@Override
public JsonRepresentation render() {
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServicesListReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServicesListReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServicesListReprRenderer.java
deleted file mode 100644
index 2cf08ae..0000000
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServicesListReprRenderer.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
-
-import java.util.Collection;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.Rel;
-import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
-import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
-import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
-
-public class DomainServicesListReprRenderer extends ListReprRenderer {
-
- private ObjectAdapterLinkTo linkTo;
- private Collection<ObjectAdapter> objectAdapters;
- private ObjectSpecification elementType;
- private ObjectSpecification returnType;
-
- public DomainServicesListReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
- super(resourceContext, linkFollower, representation);
- }
-
- @Override
- public JsonRepresentation render() {
- super.render();
-
- addLink(Rel.RETURN_TYPE, returnType);
- addLink(Rel.ELEMENT_TYPE, elementType);
-
- getExtensions();
-
- return representation;
- }
-
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
index 94e1e65..8896243 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
@@ -64,8 +64,8 @@ public class ListReprRenderer extends ReprRendererAbstract<ListReprRenderer, Col
public JsonRepresentation render() {
addValue();
- addLink(Rel.RETURN_TYPE, returnType);
- addLink(Rel.ELEMENT_TYPE, elementType);
+ addLinkToReturnType();
+ addLinkToElementType();
getExtensions();
@@ -97,4 +97,13 @@ public class ListReprRenderer extends ReprRendererAbstract<ListReprRenderer, Col
representation.mapPut("value", values);
}
+
+ protected void addLinkToReturnType() {
+ addLink(Rel.RETURN_TYPE, returnType);
+ }
+
+ protected void addLinkToElementType() {
+ addLink(Rel.ELEMENT_TYPE, elementType);
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
index f549211..f5eb48a 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
@@ -16,6 +16,8 @@
*/
package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
+import javax.ws.rs.core.MediaType;
+
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -43,8 +45,8 @@ public class ScalarValueReprRenderer extends ReprRendererAbstract<ScalarValueRep
* In case I forget in the future that scalar values don't have a representation.
*/
@Override
- public RepresentationType getRepresentationType() {
- throw new UnsupportedOperationException("no representationType defined for scalar values");
+ public MediaType getMediaType() {
+ throw new UnsupportedOperationException("no mediaType defined for scalar values");
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeMemberReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeMemberReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeMemberReprRenderer.java
index 904b278..b449ddf 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeMemberReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeMemberReprRenderer.java
@@ -68,7 +68,7 @@ public abstract class AbstractTypeMemberReprRenderer<R extends ReprRendererAbstr
}
final ObjectMember objectMember = getObjectFeature();
- final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.SELF.getName(), getRepresentationType(), "domainTypes/%s/%s%s", getParentSpecification().getFullIdentifier(), getMemberType().getUrlPart(), objectMember.getId());
+ final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.SELF.getName(), getMediaType(), "domainTypes/%s/%s%s", getParentSpecification().getFullIdentifier(), getMemberType().getUrlPart(), objectMember.getId());
getLinks().arrayAdd(linkBuilder.build());
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeActionResultReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeActionResultReprRenderer.java b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeActionResultReprRenderer.java
index 62d69fc..1da62ab 100644
--- a/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeActionResultReprRenderer.java
+++ b/component/viewer/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeActionResultReprRenderer.java
@@ -19,6 +19,7 @@ package org.apache.isis.viewer.restfulobjects.rendering.domaintypes;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.LinkRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.Rel;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
@@ -45,6 +46,10 @@ public class TypeActionResultReprRenderer extends ReprRendererAbstract<TypeActio
return this;
}
+ public TypeActionResultReprRenderer withSelf(final JsonRepresentation link) {
+ return withLink(Rel.SELF, link);
+ }
+
@Override
public JsonRepresentation render() {
if (includesSelf && selfLink != null) {
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/LinkFollowSpecsTest_follow.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/LinkFollowSpecsTest_follow.java b/component/viewer/restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/LinkFollowSpecsTest_follow.java
index fab909e..3ad5e90 100644
--- a/component/viewer/restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/LinkFollowSpecsTest_follow.java
+++ b/component/viewer/restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/LinkFollowSpecsTest_follow.java
@@ -22,7 +22,6 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.util.List;
-import java.util.Map;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.util.Parser;
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
index e5c0ebd..016002d 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
@@ -39,6 +39,7 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.DomainModel;
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;
@@ -68,21 +69,13 @@ public class ResourceContext implements RendererContext {
private List<List<String>> followLinks;
- private final static Predicate<MediaType> MEDIA_TYPE_NOT_GENERIC_APPLICATION_JSON = new Predicate<MediaType>() {
- @Override
- public boolean apply(final MediaType mediaType) {
- return !mediaType.equals(MediaType.APPLICATION_JSON_TYPE);
- }
- };
- private final static Predicate<MediaType> MEDIA_TYPE_CONTAINS_PROFILE = new Predicate<MediaType>() {
- @Override
- public boolean apply(final MediaType mediaType) {
- return mediaType.getParameters().containsKey("profile");
- }
- };
private final Where where;
private JsonRepresentation readQueryStringAsMap;
+ //////////////////////////////////////////////////////////////////
+ // constructor and init
+ //////////////////////////////////////////////////////////////////
+
public ResourceContext(
final RepresentationType representationType,
final HttpHeaders httpHeaders, final UriInfo uriInfo,
@@ -112,9 +105,47 @@ public class ResourceContext implements RendererContext {
void init(final RepresentationType representationType) {
ensureCompatibleAcceptHeader(representationType);
+ ensureDomainModelQueryParamSupported();
+
this.followLinks = Collections.unmodifiableList(getArg(RequestParameter.FOLLOW_LINKS));
}
+ private void ensureDomainModelQueryParamSupported() {
+ final DomainModel domainModel = getArg(RequestParameter.DOMAIN_MODEL);
+ if(domainModel != DomainModel.FORMAL) {
+ throw RestfulObjectsApplicationException.create(HttpStatusCode.BAD_REQUEST,
+ "x-ro-domain-model of '%s' is not supported", domainModel);
+ }
+ }
+
+ private void ensureCompatibleAcceptHeader(final RepresentationType representationType) {
+ if (representationType == null) {
+ return;
+ }
+
+ // RestEasy will check the basic media types...
+ // ... so we just need to check the profile paramter
+ final String producedProfile = representationType.getMediaTypeProfile();
+ if(producedProfile != null) {
+ for (MediaType mediaType : httpHeaders.getAcceptableMediaTypes()) {
+ String acceptedProfileValue = mediaType.getParameters().get("profile");
+ if(acceptedProfileValue == null) {
+ continue;
+ }
+ if(!producedProfile.equals(acceptedProfileValue)) {
+ throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_ACCEPTABLE);
+ }
+ }
+ }
+ }
+
+
+
+ //////////////////////////////////////////////////////////////////
+ //
+ //////////////////////////////////////////////////////////////////
+
+
public HttpHeaders getHttpHeaders() {
return httpHeaders;
}
@@ -155,39 +186,13 @@ public class ResourceContext implements RendererContext {
return securityContext;
}
- private void ensureCompatibleAcceptHeader(final RepresentationType representationType) {
- if (representationType == null) {
- return;
- }
-
- // RestEasy will check the basic media types...
- // ... so we just need to check the profile paramter
- final String producedProfile = representationType.getMediaTypeProfile();
- if(producedProfile != null) {
- for (MediaType mediaType : httpHeaders.getAcceptableMediaTypes()) {
- String acceptedProfileValue = mediaType.getParameters().get("profile");
- if(acceptedProfileValue == null) {
- continue;
- }
- if(!producedProfile.equals(acceptedProfileValue)) {
- throw RestfulObjectsApplicationException.create(HttpStatusCode.NOT_ACCEPTABLE);
- }
- }
- }
- }
-
- protected boolean contains(final com.google.common.net.MediaType producedType, final List<MediaType> acceptableMediaTypes) {
- return acceptableMediaTypes.contains(producedType);
- }
public List<List<String>> getFollowLinks() {
return followLinks;
}
- public String urlFor(final String url) {
- return getUriInfo().getBaseUri().toString() + url;
- }
+
public Localization getLocalization() {
return localization;
}
@@ -215,5 +220,14 @@ public class ResourceContext implements RendererContext {
public Where getWhere() {
return where;
}
-
+
+
+ //////////////////////////////////////////////////////////////////
+ //
+ //////////////////////////////////////////////////////////////////
+
+ public String urlFor(final String url) {
+ return getUriInfo().getBaseUri().toString() + url;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
index d75a1ed..2b9bbc2 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplicationExceptionMapper.java
@@ -37,12 +37,14 @@ import org.apache.isis.viewer.restfulobjects.applib.util.JsonMapper;
@Provider
public class RestfulObjectsApplicationExceptionMapper implements ExceptionMapper<RestfulObjectsApplicationException> {
+ private static final String WARNING_HEADER_PREFIX = "199 RestfulObjects ";
+
@Override
public Response toResponse(final RestfulObjectsApplicationException ex) {
final ResponseBuilder builder = Response.status(ex.getHttpStatusCode().getJaxrsStatusType()).type(RestfulMediaType.APPLICATION_JSON_ERROR).entity(jsonFor(ex));
final String message = ex.getMessage();
if (message != null) {
- builder.header(RestfulResponse.Header.WARNING.getName(), message);
+ builder.header(RestfulResponse.Header.WARNING.getName(), WARNING_HEADER_PREFIX + message);
}
return builder.build();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
index c537b7b..9913481 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
@@ -32,13 +32,14 @@ import javax.ws.rs.core.Response;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.isis.viewer.restfulobjects.applib.Rel;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.DomainModel;
+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.applib.domainobjects.DomainServiceResource;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainServiceLinkTo;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ListReprRenderer;
import org.apache.isis.viewer.restfulobjects.server.resources.DomainResourceHelper.MemberMode;
@Path("/services")
@@ -50,12 +51,13 @@ public class DomainServiceResourceServerside extends ResourceAbstract implements
@Produces({ MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_LIST, RestfulMediaType.APPLICATION_JSON_ERROR })
public Response services() {
init(RepresentationType.LIST, Where.STANDALONE_TABLES);
+
final List<ObjectAdapter> serviceAdapters = getResourceContext().getServiceAdapters();
- final ListReprRenderer renderer = new ListReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
+ final DomainServicesListReprRenderer renderer = new DomainServicesListReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
renderer.usingLinkToBuilder(new DomainServiceLinkTo())
- .withLink(Rel.SELF, "services")
+ .includesSelf()
.with(serviceAdapters);
return responseOfOk(renderer, Caching.ONE_DAY).build();
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServicesListReprRenderer.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServicesListReprRenderer.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServicesListReprRenderer.java
new file mode 100644
index 0000000..815aba4
--- /dev/null
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServicesListReprRenderer.java
@@ -0,0 +1,70 @@
+/**
+ * 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.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.Rel;
+import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
+import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
+import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ListReprRenderer;
+
+public class DomainServicesListReprRenderer extends ListReprRenderer {
+
+ public DomainServicesListReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+ super(resourceContext, linkFollower, representation);
+ }
+
+
+ @Override
+ public JsonRepresentation render() {
+ super.render();
+ if (includesSelf) {
+ addLinkToSelf();
+ addLinkToUp();
+ }
+ getExtensions();
+ return representation;
+ }
+
+
+ private void addLinkToSelf() {
+ final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.SELF.getName(), RepresentationType.LIST, "services").build();
+
+ final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
+ if (linkFollower.matches(link)) {
+ final DomainServicesListReprRenderer renderer = new DomainServicesListReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+ renderer.with(getServiceAdapters());
+ link.mapPut("value", renderer.render());
+ }
+
+ getLinks().arrayAdd(link);
+ }
+
+ private void addLinkToUp() {
+ final JsonRepresentation link = LinkBuilder.newBuilder(rendererContext, Rel.UP.getName(), RepresentationType.HOME_PAGE, "").build();
+
+ final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
+ if (linkFollower.matches(link)) {
+ final HomePageReprRenderer renderer = new HomePageReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+ link.mapPut("value", renderer.render());
+ }
+ getLinks().arrayAdd(link);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
index 7835356..4bfcbef 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainTypeResourceServerside.java
@@ -237,6 +237,7 @@ public class DomainTypeResourceServerside extends ResourceAbstract implements Do
return responseOfOk(renderer, Caching.ONE_DAY).build();
}
+
@Override
@GET
@Path("/{domainType}/typeactions/isSupertypeOf/invoke")
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
index 5a8d4ca..5d1e6fb 100644
--- a/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
+++ b/component/viewer/restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
@@ -191,12 +191,12 @@ public abstract class ResourceAbstract {
}
public static ResponseBuilder responseOfOk(final ReprRenderer<?, ?> renderer, final Caching caching, final Version version) {
- final RepresentationType representationType = renderer.getRepresentationType();
- final ResponseBuilder response = responseOf(HttpStatusCode.OK).type(representationType.getMediaType()).cacheControl(caching.getCacheControl()).entity(jsonFor(renderer.render()));
+ final MediaType mediaType = renderer.getMediaType();
+ final ResponseBuilder response = responseOf(HttpStatusCode.OK).type(mediaType).cacheControl(caching.getCacheControl()).entity(jsonFor(renderer.render()));
return addLastModifiedAndETagIfAvailable(response, version);
}
- private static ResponseBuilder responseOf(final HttpStatusCode httpStatusCode) {
+ protected static ResponseBuilder responseOf(final HttpStatusCode httpStatusCode) {
return Response.status(httpStatusCode.getJaxrsStatusType()).type(MediaType.APPLICATION_JSON_TYPE);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/RepresentationMatchers.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/RepresentationMatchers.java b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/RepresentationMatchers.java
index 117dc1f..b8a0c2c 100644
--- a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/RepresentationMatchers.java
+++ b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/RepresentationMatchers.java
@@ -254,6 +254,10 @@ public class RepresentationMatchers {
if (rel != null) {
description.appendText(" with rel '").appendText(rel).appendText("'");
}
+ if (relNameMatcher != null) {
+ description.appendText(" with rel '");
+ relNameMatcher.describeTo(description);
+ }
if (href != null) {
description.appendText(" with href '").appendText(href).appendText("'");
}
@@ -292,7 +296,7 @@ public class RepresentationMatchers {
description.appendText(" and");
}
if (selfHref != null) {
- description.appendText(" an response whose self.href is " + selfHref);
+ description.appendText(" has a response whose self.href is " + selfHref);
}
}
}
@@ -306,7 +310,7 @@ public class RepresentationMatchers {
if (rel != null && !rel.equals(link.getRel())) {
return false;
}
- if (relNameMatcher != null && !relNameMatcher.matches(link.getHref())) {
+ if (relNameMatcher != null && !relNameMatcher.matches(link.getRel())) {
return false;
}
if (href != null && !href.equals(link.getHref())) {
@@ -331,7 +335,7 @@ public class RepresentationMatchers {
if (novalue != null && novalue && link.getValue() != null) {
return false;
}
- if (valueMatcher != null && !valueMatcher.matches(link)) {
+ if (valueMatcher != null && !valueMatcher.matches(link.getValue())) {
return false;
}
@@ -364,7 +368,7 @@ public class RepresentationMatchers {
if(entity == null) {
return false;
}
- LinkRepresentation selfLink = entity.getLink("self");
+ LinkRepresentation selfLink = entity.getLink("links[rel=self]");
if(selfLink == null) {
return false;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3c7b08fa/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/any/AnyResourceTest_serverSideException_exceptionHandling.java
----------------------------------------------------------------------
diff --git a/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/any/AnyResourceTest_serverSideException_exceptionHandling.java b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/any/AnyResourceTest_serverSideException_exceptionHandling.java
new file mode 100644
index 0000000..f71fc48
--- /dev/null
+++ b/component/viewer/restfulobjects/tck/src/test/java/org/apache/isis/viewer/restfulobjects/tck/any/AnyResourceTest_serverSideException_exceptionHandling.java
@@ -0,0 +1,65 @@
+/*
+ * 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.tck.any;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.apache.isis.core.webserver.WebServer;
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulClient;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.Header;
+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.util.Parser;
+import org.apache.isis.viewer.restfulobjects.tck.IsisWebServerRule;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class AnyResourceTest_serverSideException_exceptionHandling {
+
+ @Rule
+ public IsisWebServerRule webServerRule = new IsisWebServerRule();
+
+ private RestfulClient client;
+
+ @Before
+ public void setUp() throws Exception {
+ final WebServer webServer = webServerRule.getWebServer();
+ client = new RestfulClient(webServer.getBase());
+ }
+
+ @Test
+ public void runtimeException_isMapped() throws Exception {
+
+ // given
+ final RestfulRequest restfulReq = client.createRequest(RestfulHttpMethod.GET, "version");
+ final Header<Boolean> header = new Header<Boolean>("X-FAIL", Parser.forBoolean());
+ restfulReq.withHeader(header, true);
+
+ // when
+ final RestfulResponse<JsonRepresentation> jsonResp = restfulReq.execute();
+
+ // then
+ assertThat(jsonResp.getStatus(), is(HttpStatusCode.METHOD_FAILURE));
+ }
+}