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;
+}