You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/11/29 13:44:48 UTC
isis git commit: ISIS-1274: started with new ContentNegotiationService
Repository: isis
Updated Branches:
refs/heads/ISIS-1274 [created] 0bd001f92
ISIS-1274: started with new ContentNegotiationService
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/0bd001f9
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/0bd001f9
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/0bd001f9
Branch: refs/heads/ISIS-1274
Commit: 0bd001f9263a5adf0e8cd3ce76407dc1a2cefe9c
Parents: 587a8bd
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun Nov 29 12:42:51 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sun Nov 29 12:43:12 2015 +0000
----------------------------------------------------------------------
.../ContentNegotiationServiceAbstract.java | 20 +++
.../ContentNegotiationServiceSimplified.java | 121 +++++++++++++++++++
2 files changed, 141 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/0bd001f9/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
index 16cebe6..936ed73 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
@@ -18,11 +18,14 @@
*/
package org.apache.isis.viewer.restfulobjects.rendering.service.conneg;
+import java.util.List;
import java.util.Map;
+import java.util.Objects;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.xml.bind.annotation.XmlRootElement;
@@ -30,6 +33,7 @@ import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.core.commons.factory.InstanceUtil;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
@@ -125,6 +129,22 @@ public abstract class ContentNegotiationServiceAbstract implements ContentNegoti
xRoDomainType, domainObject.getClass().getName());
}
}
+
+ protected boolean canAccept(
+ final RepresentationType representationType,
+ final List<MediaType> acceptableMediaTypes,
+ final String profileValue) {
+ for (MediaType mediaType : acceptableMediaTypes) {
+ if(representationType.matchesJsonProfile(mediaType)) {
+ final String paramValue = mediaType.getParameters().get("profile");
+ if (Objects.equals(paramValue, profileValue)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
//endregion
@Inject
http://git-wip-us.apache.org/repos/asf/isis/blob/0bd001f9/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceSimplified.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceSimplified.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceSimplified.java
new file mode 100644
index 0000000..1d95e57
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceSimplified.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restfulobjects.rendering.service.conneg;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.spec.feature.Contributed;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
+import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
+import org.apache.isis.viewer.restfulobjects.rendering.Caching;
+import org.apache.isis.viewer.restfulobjects.rendering.Responses;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndActionInvocation;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndProperty;
+import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
+
+public class ContentNegotiationServiceSimplified extends ContentNegotiationServiceAbstract {
+
+ private static final DateFormat ETAG_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
+
+ private static final String ACCEPT_OBJECT = "urn:org.apache.isis:repr-types/object/v1";
+
+ public Response.ResponseBuilder buildResponse(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAdapter objectAdapter) {
+
+ final RepresentationType representationType = RepresentationType.DOMAIN_OBJECT;
+ final List<MediaType> acceptableMediaTypes = renderContext2.getAcceptableMediaTypes();
+
+ boolean canAccept = canAccept(representationType, acceptableMediaTypes, ACCEPT_OBJECT);
+ if(!canAccept) {
+ return null;
+ }
+
+ JsonRepresentation representation = JsonRepresentation.newMap();
+
+ List<OneToOneAssociation> properties = objectAdapter.getSpecification().getProperties(Contributed.INCLUDED);
+ for (OneToOneAssociation property : properties) {
+ Consent visibility = property.isVisible(objectAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE);
+ if(visibility.isAllowed()) {
+
+ }
+ }
+
+ final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(renderContext2, null, representation);
+
+ renderer.with(objectAdapter).includesSelf();
+
+ final Response.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 null;
+ }
+
+ @Programmatic
+ public Response.ResponseBuilder buildResponse(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAndProperty objectAndProperty) {
+ return null;
+ }
+
+ @Programmatic
+ public Response.ResponseBuilder buildResponse(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAndCollection objectAndCollection) {
+ return null;
+ }
+
+ @Programmatic
+ public Response.ResponseBuilder buildResponse(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAndAction objectAndAction) {
+ return null;
+ }
+
+ @Programmatic
+ public Response.ResponseBuilder buildResponse(
+ final RepresentationService.Context2 renderContext2,
+ final ObjectAndActionInvocation objectAndActionInvocation) {
+ return null;
+ }
+
+ @Inject
+ protected DomainObjectContainer container;
+}