Author: reto
Date: Thu Sep 30 14:10:33 2010
New Revision: 1003068

URL: http://svn.apache.org/viewvc?rev=1003068&view=rev
Log:
CLEREZZA-299: added support for custom-404 in platform content, necessary fixes 
in triaxrs

Added:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/
   (props changed)
      - copied from r1000384, 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.fsadaptor/
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/scala/org/apache/clerezza/platform/content/default404/
      - copied from r1000384, 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.fsadaptor/src/main/scala/org/apache/clerezza/platform/content/fsadaptor/
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/scala/org/apache/clerezza/platform/content/default404/DefaultPageNotFoundService.scala
      - copied, changed from r1000384, 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.fsadaptor/src/main/scala/org/apache/clerezza/platform/content/fsadaptor/BundleFsLoader.scala
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/PageNotFoundService.java
Removed:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/scala/org/apache/clerezza/platform/content/default404/BundleFsLoader.scala
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/scala/org/apache/clerezza/platform/content/default404/Logger.scala
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/scala/org/apache/clerezza/platform/content/default404/PathNode2MGraph.scala
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/scala/org/apache/clerezza/platform/content/fsadaptor/
Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/pom.xml
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/resources/OSGI-INF/serviceComponents.xml
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/DiscobitsTypeHandler.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.storageless.parent/pom.xml
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/JaxRsHandler.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/ResponseProcessor.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/delegate/ResponseBuilderImpl.java
    incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml

Propchange: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Sep 30 14:10:33 2010
@@ -0,0 +1 @@
+target

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/pom.xml?rev=1003068&r1=1000384&r2=1003068&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/pom.xml
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/pom.xml
 Thu Sep 30 14:10:33 2010
@@ -6,13 +6,12 @@
                <version>0.2-incubating-SNAPSHOT</version>
        </parent>
        <groupId>org.apache.clerezza</groupId>
-       <artifactId>org.apache.clerezza.platform.content.fsadaptor</artifactId>
+       <artifactId>org.apache.clerezza.platform.content.default404</artifactId>
        <version>0.1-incubating-SNAPSHOT</version>
        <packaging>bundle</packaging>
-       <name>Clerezza - Platform Content Filesystem Adaptor</name>
+       <name>Clerezza - Platform Content Default 404 response provider</name>
        <description>
-               Makes directories appear as a graph describing the files and 
theits
-               contents with the discobits ontology.
+               Provides a default implementation of PageNotFoundService
        </description>
 
        <dependencies>
@@ -22,19 +21,7 @@
                </dependency>
                <dependency>
                        <groupId>org.apache.clerezza</groupId>
-                       
<artifactId>org.apache.clerezza.platform.graphprovider.content</artifactId>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.clerezza</groupId>
-                       <artifactId>org.apache.clerezza.rdf.core</artifactId>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.clerezza</groupId>
-                       
<artifactId>org.apache.clerezza.rdf.scala.utils</artifactId>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.clerezza</groupId>
-                       
<artifactId>org.apache.clerezza.web.fileserver</artifactId>
+                       
<artifactId>org.apache.clerezza.platform.content</artifactId>
                </dependency>
                <dependency>
                        <groupId>javax.ws.rs</groupId>
@@ -79,7 +66,7 @@
                                <configuration>
                                        <instructions>
                                                
<Service-Component>OSGI-INF/serviceComponents.xml</Service-Component>
-                                               
<Export-Package>org.apache.clerezza.platform.content.fsadaptor</Export-Package>
+                                               
<Export-Package>org.apache.clerezza.platform.content.default404</Export-Package>
                                                <!-- 
<Bundle-SymbolicName>org.apache.clerezza.platform.users.core</Bundle-SymbolicName>
 -->
                                        </instructions>
                                </configuration>

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/resources/OSGI-INF/serviceComponents.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/resources/OSGI-INF/serviceComponents.xml?rev=1003068&r1=1000384&r2=1003068&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/resources/OSGI-INF/serviceComponents.xml
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/resources/OSGI-INF/serviceComponents.xml
 Thu Sep 30 14:10:33 2010
@@ -1,10 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <components xmlns:scr="http://www.osgi.org/xmlns/scr/v1.0.0";>
-       <scr:component enabled="true" immediate="true" 
name="org.apache.clerezza.platform.content.fsadaptor.BundleFsLoader">
-               <implementation 
class="org.apache.clerezza.platform.content.fsadaptor.BundleFsLoader"/>
-               <reference name="tcManager" 
interface="org.apache.clerezza.rdf.core.access.TcManager"
-               cardinality="1..1" policy="static" bind="bindTcManager" 
unbind="unbindTcManager"/>
-               <reference name="parser" 
interface="org.apache.clerezza.platform.graphprovider.content.ContentGraphProvider"
-               cardinality="1..1" policy="static" 
bind="bindContentGraphProvider" unbind="unbindContentGraphProvider"/>
+       <scr:component enabled="true" immediate="true" 
name="org.apache.clerezza.platform.content.default404.DefaultPageNotFoundService">
+               <implementation 
class="org.apache.clerezza.platform.content.default404.DefaultPageNotFoundService"/>
+               <service>
+                       <provide 
interface="org.apache.clerezza.platform.content.PageNotFoundService" />
+               </service>
        </scr:component>
 </components>

Copied: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/scala/org/apache/clerezza/platform/content/default404/DefaultPageNotFoundService.scala
 (from r1000384, 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.fsadaptor/src/main/scala/org/apache/clerezza/platform/content/fsadaptor/BundleFsLoader.scala)
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/scala/org/apache/clerezza/platform/content/default404/DefaultPageNotFoundService.scala?p2=incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/scala/org/apache/clerezza/platform/content/default404/DefaultPageNotFoundService.scala&p1=incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.fsadaptor/src/main/scala/org/apache/clerezza/platform/content/fsadaptor/BundleFsLoader.scala&r1=1000384&r2=1003068&rev=1003068&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.fsadaptor/src/main/scala/org/apache/clerezza/platform/content/fsadaptor/BundleFsLoader.scala
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.default404/src/main/scala/org/apache/clerezza/platform/content/default404/DefaultPageNotFoundService.scala
 Thu Sep 30 14:10:33 2010
@@ -17,92 +17,48 @@
  * under the License.
  */
 
-package org.apache.clerezza.platform.content.fsadaptor
+package org.apache.clerezza.platform.content.default404
 
-import java.util.Collections
-import org.apache.clerezza.platform.Constants
-import org.apache.clerezza.platform.graphprovider.content.ContentGraphProvider
-import org.apache.clerezza.rdf.core.MGraph
-import org.apache.clerezza.rdf.core.UriRef
-import org.apache.clerezza.rdf.core.access.NoSuchEntityException
-import org.apache.clerezza.rdf.core.access.TcManager
-import org.apache.clerezza.rdf.core.access.security.TcPermission
-import org.apache.clerezza.utils.osgi.BundlePathNode
-import org.osgi.framework.Bundle
-import org.osgi.framework.BundleEvent
-import org.osgi.framework.BundleListener
-import org.osgi.service.component.ComponentContext
-import org.slf4j.LoggerFactory
-
-object BundleFsLoader {
-       private val log = LoggerFactory.getLogger(classOf[BundleFsLoader])
-}
-class BundleFsLoader extends BundleListener with Logger {
-
-       private val MGRAPH_NAME = new 
UriRef("http://zz.localhost/web-resources.graph";)
+import org.apache.clerezza.platform.content.PageNotFoundService
+import javax.ws.rs.core.UriInfo
+import java.io.FileNotFoundException
+import java.io.InputStream
+import java.net.URL
+import java.security.AccessController
+import java.security.PrivilegedAction
+import javax.ws.rs.core.Response
+import javax.ws.rs.core.Response.Status
+
+/**
+ * This returns the content of the resource /page-not-found dereferenced as uri
+ * with the same authority section as the request.
+ */
+class DefaultPageNotFoundService extends PageNotFoundService {
 
-       private var tcManager: TcManager = null
-       private var cgProvider: ContentGraphProvider = null
+       private val notFoundPagePath = "/page-not-found"
 
-       protected def activate(context: ComponentContext) {
-               try {
-                       tcManager.getMGraph(MGRAPH_NAME);
-               } catch {
-                       case e: NoSuchEntityException => {
-                               tcManager.createMGraph(MGRAPH_NAME);
-                               
tcManager.getTcAccessController.setRequiredReadPermissions(
-                                       MGRAPH_NAME, Collections.singleton(new 
TcPermission(Constants.CONTENT_GRAPH_URI_STRING, TcPermission.READ)))
+       override def createResponse(uriInfo: UriInfo) = {
+               if (uriInfo.getPath == notFoundPagePath) {
+                       Response.status(Status.NOT_FOUND).build();
+               } else {
+                       val pageNotFoundUrl = new URL(uriInfo.getBaseUri.toURL, 
notFoundPagePath)
+                       AccessController.doPrivileged(
+                               new PrivilegedAction[Option[(String, 
InputStream)]] {
+                                       def run() = {
+                                               val connection = 
pageNotFoundUrl.openConnection()
+                                               try {
+                                                       
Some(connection.getContentType, connection.getInputStream)
+                                               } catch {
+                                                       case _: 
FileNotFoundException => None
+                                               }
+                                       }
+                               }
+                       ) match {
+                               case Some((mediaTypeString, in)) => 
Response.status(Status.NOT_FOUND).`type`(mediaTypeString).entity(in).build();
+                               case None => 
Response.status(Status.NOT_FOUND).build();
                        }
-                       case e => throw e
-               }
-               for (bundle <- context.getBundleContext().getBundles()) {
-                       addToGraph(bundle);
-               }
-               context.getBundleContext().addBundleListener(this);
-               cgProvider.addTemporaryAdditionGraph(MGRAPH_NAME)
-       }
-       protected def deactivate(context: ComponentContext) {
-               context.getBundleContext().removeBundleListener(this);
-               cgProvider.removeTemporaryAdditionGraph(MGRAPH_NAME)
-               tcManager.deleteTripleCollection(MGRAPH_NAME);
-       }
 
-       def bundleChanged(event: BundleEvent) {
-               val bundle = event.getBundle();
-               event.getType() match  {
-                       case BundleEvent.STARTED =>
-                               addToGraph(bundle);
-                       case BundleEvent.STOPPED =>
-                               removeFromGraph(bundle);
-                       case _ => BundleFsLoader.log.debug("only reacting on 
bundle start and stop")
                }
        }
        
-       def addToGraph(bundle: Bundle) {
-               val pathNode = new BundlePathNode(bundle, 
"CLEREZZA-INF/web-resources");
-               val mGraph: MGraph = tcManager.getMGraph(MGRAPH_NAME);
-               PathNode2MGraph.describeInGraph(pathNode, mGraph);
-               BundleFsLoader.log.info("size of mgraph after adding resources 
of {}: {}", bundle, mGraph.size)
-               //log.info("size of mgraph after adding resources of {}: {}", 
bundle, mGraph.size)
-       }
-
-       def removeFromGraph(bundle: Bundle) {
-
-       }
-
-       def bindTcManager(tcManager: TcManager) {
-               this.tcManager = tcManager;
-       }
-
-       def unbindTcManager(tcManager: TcManager) {
-               this.tcManager = null;
-       }
-
-       def bindContentGraphProvider(p: ContentGraphProvider) {
-               cgProvider = p
-       }
-
-       def unbindContentGraphProvider(p: ContentGraphProvider) {
-               cgProvider = null
-       }
 }

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/DiscobitsTypeHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/DiscobitsTypeHandler.java?rev=1003068&r1=1003067&r2=1003068&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/DiscobitsTypeHandler.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/DiscobitsTypeHandler.java
 Thu Sep 30 14:10:33 2010
@@ -117,6 +117,9 @@ public class DiscobitsTypeHandler extend
 
        @Reference
        protected ContentGraphProvider cgProvider;
+
+       @Reference
+       PageNotFoundService notFoundPageService;
        
        private static final Logger logger = 
LoggerFactory.getLogger(DiscobitsTypeHandler.class);
 
@@ -143,7 +146,7 @@ public class DiscobitsTypeHandler extend
                final UriRef uri = new 
UriRef(uriInfo.getAbsolutePath().toString());
                final GraphNode graphNode = getResourceAsGraphNode(uriInfo);
                if (graphNode == null) {
-                       return checkIfOppositExistsAndRedirectIfSo(uri, 
uriInfo);
+                       return resourceUnavailable(uri, uriInfo);
                }
                InfoDiscobit infoDiscobit = 
InfoDiscobit.createInstance(graphNode);
                if (infoDiscobit != null) {
@@ -260,7 +263,7 @@ public class DiscobitsTypeHandler extend
                        @Context HttpHeaders headers, DOMSource body) {
                final UriRef nodeUri = new 
UriRef(uriInfo.getAbsolutePath().toString());
                if (!nodeAtUriExists(nodeUri)) {
-                       return checkIfOppositExistsAndRedirectIfSo(nodeUri, 
uriInfo);
+                       return resourceUnavailable(nodeUri, uriInfo);
                }
                        Map<UriRef, PropertyMap> result;
                try {
@@ -337,7 +340,7 @@ public class DiscobitsTypeHandler extend
        public Response proppatch(@Context UriInfo uriInfo, DOMSource body) {
                UriRef nodeUri = new 
UriRef(uriInfo.getAbsolutePath().toString());
                if (!nodeAtUriExists(nodeUri)) {
-                       return checkIfOppositExistsAndRedirectIfSo(nodeUri, 
uriInfo);
+                       return resourceUnavailable(nodeUri, uriInfo);
                }
                try {
                        Document requestDoc = 
WebDavUtils.sourceToDocument(body);
@@ -464,7 +467,7 @@ public class DiscobitsTypeHandler extend
        public Response options(@Context UriInfo uriInfo) {
                final UriRef nodeUri = new 
UriRef(uriInfo.getAbsolutePath().toString());
                if (!nodeAtUriExists(nodeUri)) {
-                       return checkIfOppositExistsAndRedirectIfSo(nodeUri, 
uriInfo);
+                       return resourceUnavailable(nodeUri, uriInfo);
                }
                        Response.ResponseBuilder builder = Response.ok();
                        builder.header(HeaderName.DAV.toString(), "1");
@@ -518,14 +521,16 @@ public class DiscobitsTypeHandler extend
                                || mGraph.filter(null, null, nodeUri).hasNext();
        }
 
-       private Response checkIfOppositExistsAndRedirectIfSo(UriRef nodeUri,
+       private Response resourceUnavailable(UriRef nodeUri,
                        UriInfo uriInfo) {
                UriRef oppositUri = makeOppositeUriRef(nodeUri);
                if (nodeAtUriExists(oppositUri)) {
                        return RedirectUtil.createSeeOtherResponse(
                                        oppositUri.getUnicodeString(), uriInfo);
+               } else {
+                       return notFoundPageService.createResponse(uriInfo);
                }
-               return Response.status(Status.NOT_FOUND).build();
+               //return Response.status(Status.NOT_FOUND).build();
        }
        /**
         * add trailing slash if none present, remove otherwise

Added: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/PageNotFoundService.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/PageNotFoundService.java?rev=1003068&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/PageNotFoundService.java
 (added)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content/src/main/java/org/apache/clerezza/platform/content/PageNotFoundService.java
 Thu Sep 30 14:10:33 2010
@@ -0,0 +1,40 @@
+/*
+ *  Copyright 2010 reto.
+ * 
+ *  Licensed 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.
+ *  under the License.
+ */
+
+package org.apache.clerezza.platform.content;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+/**
+ * An instance of this service is called by DiscoBitHandler if a resource
+ * is not found in the content graph.
+ *
+ * @author reto
+ */
+public interface PageNotFoundService {
+
+       /**
+        * Creates a response when a resource could not be found in the Content 
+        * Graph, this is a 404 response.
+        * 
+        * @param uriInfo
+        * @return
+        */
+       public Response createResponse(UriInfo uriInfo);
+
+}

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.storageless.parent/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.storageless.parent/pom.xml?rev=1003068&r1=1003067&r2=1003068&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.storageless.parent/pom.xml
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.storageless.parent/pom.xml
 Thu Sep 30 14:10:33 2010
@@ -232,6 +232,11 @@
                </dependency>
                <dependency>
                        <groupId>org.apache.clerezza</groupId>
+                       
<artifactId>org.apache.clerezza.platform.content.default404</artifactId>
+                       <scope>runtime</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.clerezza</groupId>
                        
<artifactId>org.apache.clerezza.platform.content.fsadaptor</artifactId>
                        <scope>runtime</scope>
                </dependency>

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/JaxRsHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/JaxRsHandler.java?rev=1003068&r1=1003067&r2=1003068&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/JaxRsHandler.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/JaxRsHandler.java
 Thu Sep 30 14:10:33 2010
@@ -504,13 +504,14 @@ public class JaxRsHandler implements Han
                                                request, 
resourceAndPathMatching.getRootResource(),
                                                
pathMatching.getRemainingURIPath(), pathMatching.getParameters());
                        }
+                       ProcessableResponse processableResponse;
                        try {
-                               ProcessableResponse processableResponse = 
(ProcessableResponse) methodResponse;
-                               ResponseProcessor.handleReturnValue(request, 
response, processableResponse);
+                               processableResponse = (ProcessableResponse) 
methodResponse;
                        } catch (ClassCastException e) {
                                throw new RuntimeException("processing of other 
MethodResponse" +
                                                " implementations not yet 
supported");
                        }
+                       ResponseProcessor.handleReturnValue(request, response, 
processableResponse);
                        
                } catch (ResourceMethodException ex) {
                        Throwable cause = ex.getCause();

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/ResponseProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/ResponseProcessor.java?rev=1003068&r1=1003067&r2=1003068&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/ResponseProcessor.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/ResponseProcessor.java
 Thu Sep 30 14:10:33 2010
@@ -54,6 +54,7 @@ import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.ext.MessageBodyWriter;
 import javax.ws.rs.ext.RuntimeDelegate;
+import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -262,7 +263,13 @@ class ResponseProcessor {
                List<Object> contentTypeList = jaxResponse.getMetadata().get(
                                HttpHeaders.CONTENT_TYPE);
                if ((contentTypeList != null) && (contentTypeList.size() > 0)) {
-                       mediaType = (MediaType) contentTypeList.get(0);
+                       Object mediaTypeObject = contentTypeList.get(0);
+                       if (mediaTypeObject instanceof MediaType) {
+                               mediaType = (MediaType) mediaTypeObject;
+                       } else {
+                               String mediaTypeString = 
getStringValueFromHeader(mediaTypeObject);
+                               mediaType = MediaType.valueOf(mediaTypeString);
+                       }
                } else {
                        headerMap.add(HttpHeaders.CONTENT_TYPE, mediaType);
                }
@@ -464,14 +471,19 @@ class ResponseProcessor {
                for (String headerNameString : headerMap.keySet()) {
                        List<Object> values = headerMap.get(headerNameString);
                        for (Object object : values) {
-                               RuntimeDelegate.HeaderDelegate headerDelegate = 
RuntimeDelegate.getInstance().createHeaderDelegate(object.getClass());
-                               final String stringValue = headerDelegate == 
null ? object.toString() : headerDelegate.toString(object);
+                               final String stringValue = 
getStringValueFromHeader(object);
                                
response.setHeader(HeaderName.get(headerNameString),
                                                stringValue);
                        }
                }
        }
 
+       private static <T> String getStringValueFromHeader(T headerObject) {
+               HeaderDelegate<T> headerDelegate = 
RuntimeDelegate.getInstance().createHeaderDelegate((Class<T>)headerObject.getClass());
+               String mediaTypeString = headerDelegate != null ? 
headerDelegate.toString(headerObject) : headerObject.toString();
+               return mediaTypeString;
+       }
+
        private static MediaType getConcreteMediaTypeFromPattern(
                        final MediaType mediaType) {
                if (mediaType.isWildcardSubtype()) {

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/delegate/ResponseBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/delegate/ResponseBuilderImpl.java?rev=1003068&r1=1003067&r2=1003068&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/delegate/ResponseBuilderImpl.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/delegate/ResponseBuilderImpl.java
 Thu Sep 30 14:10:33 2010
@@ -84,7 +84,11 @@ class ResponseBuilderImpl extends Respon
 
        @Override
        public ResponseBuilder type(String type) {
-               throw new UnsupportedOperationException("Not supported yet.");
+               if (type == null) {
+                       headers.remove(HttpHeaders.CONTENT_TYPE);
+               }
+               headers.putSingle(HttpHeaders.CONTENT_TYPE, type);
+               return this;
        }
 
        @Override

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml?rev=1003068&r1=1003067&r2=1003068&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml Thu Sep 30 
14:10:33 2010
@@ -45,6 +45,7 @@
                <module>org.apache.clerezza.platform.config.gui</module>
                
<module>org.apache.clerezza.platform.content.imagemetadata</module>
                <module>org.apache.clerezza.platform.content</module>
+               <module>org.apache.clerezza.platform.content.default404</module>
                <module>org.apache.clerezza.platform.content.fsadaptor</module>
                
<module>org.apache.clerezza.platform.content.representations</module>
                <module>org.apache.clerezza.platform.dashboard</module>
@@ -731,6 +732,11 @@
                        </dependency>
                        <dependency>
                                <groupId>org.apache.clerezza</groupId>
+                               
<artifactId>org.apache.clerezza.platform.content.default404</artifactId>
+                               <version>0.1-incubating-SNAPSHOT</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>org.apache.clerezza</groupId>
                                
<artifactId>org.apache.clerezza.platform.content.fsadaptor</artifactId>
                                <version>0.1-incubating-SNAPSHOT</version>
                        </dependency>


Reply via email to