Author: lresende
Date: Sat May  2 02:04:03 2009
New Revision: 770880

URL: http://svn.apache.org/viewvc?rev=770880&view=rev
Log:
TUSCANY-2968 - Renaming new binding.http module to avoid confusion with the 
oasis draft, as we are not really implementing the whole spec but just 
following the wireFormat and operationSelector options implemented in 
binding.jms

Added:
    tuscany/branches/sca-java-1.x/modules/binding-http-new/
      - copied from r770878, 
tuscany/branches/sca-java-1.x/modules/binding-http-oasis/
    tuscany/branches/sca-java-1.x/modules/binding-http-new-jsonrpc/
      - copied from r770878, 
tuscany/branches/sca-java-1.x/modules/binding-http-oasis-jsonrpc/
    tuscany/branches/sca-java-1.x/modules/binding-http-new-jsonrpc-runtime/
      - copied from r770878, 
tuscany/branches/sca-java-1.x/modules/binding-http-oasis-jsonrpc-runtime/
    tuscany/branches/sca-java-1.x/modules/binding-http-new-runtime/
      - copied from r770878, 
tuscany/branches/sca-java-1.x/modules/binding-http-oasis-runtime/
Removed:
    tuscany/branches/sca-java-1.x/modules/binding-http-oasis/
    tuscany/branches/sca-java-1.x/modules/binding-http-oasis-jsonrpc/
    tuscany/branches/sca-java-1.x/modules/binding-http-oasis-jsonrpc-runtime/
    tuscany/branches/sca-java-1.x/modules/binding-http-oasis-runtime/
Modified:
    
tuscany/branches/sca-java-1.x/modules/binding-http-new-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPBindingListenerServlet.java
    
tuscany/branches/sca-java-1.x/modules/binding-http-new/src/main/java/org/apache/tuscany/sca/binding/http/HTTPCacheContext.java
    tuscany/branches/sca-java-1.x/modules/pom.xml

Modified: 
tuscany/branches/sca-java-1.x/modules/binding-http-new-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPBindingListenerServlet.java
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-http-new-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPBindingListenerServlet.java?rev=770880&r1=770878&r2=770880&view=diff
==============================================================================
--- 
tuscany/branches/sca-java-1.x/modules/binding-http-new-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPBindingListenerServlet.java
 (original)
+++ 
tuscany/branches/sca-java-1.x/modules/binding-http-new-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPBindingListenerServlet.java
 Sat May  2 02:04:03 2009
@@ -1,516 +1,516 @@
-/*
- * 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.tuscany.sca.binding.http.provider;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URLDecoder;
-import java.text.ParseException;
-import java.util.List;
-
-import javax.servlet.ServletException;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.namespace.QName;
-
-import org.apache.tuscany.sca.assembly.Binding;
-import org.apache.tuscany.sca.binding.http.HTTPCacheContext;
-import org.apache.tuscany.sca.binding.http.util.HTTPHeadersParser;
-import org.apache.tuscany.sca.invocation.Invoker;
-import org.apache.tuscany.sca.invocation.Message;
-import org.apache.tuscany.sca.invocation.MessageFactory;
-import org.apache.tuscany.sca.policy.Intent;
-import org.apache.tuscany.sca.policy.PolicySet;
-import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
-import 
org.apache.tuscany.sca.policy.authentication.basic.BasicAuthenticationPolicy;
-
-/**
- * Servlet responsible for dispatching HTTP requests to the
- * target component implementation.
- *
- * @version $Rev$ $Date$
- */
-public class HTTPBindingListenerServlet extends HttpServlet {
-    private static final long serialVersionUID = 2865466417329430610L;
-    
-    private static final QName AUTEHTICATION_INTENT = new 
QName("http://www.osoa.org/xmlns/sca/1.0","authentication";);
-    
-    transient private Binding binding;
-
-    transient private boolean requiresAuthentication = false;
-    transient private BasicAuthenticationPolicy basicAuthenticationPolicy = 
null;
-
-    private MessageFactory messageFactory;
-    private Invoker getInvoker;
-    private Invoker conditionalGetInvoker;
-    private Invoker putInvoker;
-    private Invoker conditionalPutInvoker;
-    private Invoker postInvoker;
-    private Invoker conditionalPostInvoker;
-    private Invoker deleteInvoker;
-    private Invoker conditionalDeleteInvoker;
-    
-    /**
-     * Constructs a new HTTPServiceListenerServlet.
-     */
-    public HTTPBindingListenerServlet(Binding binding, MessageFactory 
messageFactory) {
-        this.binding = binding;
-        this.messageFactory = messageFactory;
-        
-
-        // find out which policies are active
-        if (binding instanceof PolicySetAttachPoint) {
-            List<Intent> intents = 
((PolicySetAttachPoint)binding).getRequiredIntents();
-            for(Intent intent : intents) {
-                if(intent.getName().equals(AUTEHTICATION_INTENT)) {
-                    requiresAuthentication = true;
-                }
-            }
-
-
-            List<PolicySet> policySets = 
((PolicySetAttachPoint)binding).getApplicablePolicySets();
-            for (PolicySet ps : policySets) {
-                for (Object p : ps.getPolicies()) {
-                    if (BasicAuthenticationPolicy.class.isInstance(p)) {
-                        basicAuthenticationPolicy = 
(BasicAuthenticationPolicy)p;
-                    } else {
-                        // etc. check for other types of policy being present
-                    }
-                }
-            }
-        }        
-    }
-
-    
-    @Override
-    protected void service(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
-
-        if(requiresAuthentication) {
-            if(! hasAuthorization(request, response)) {
-                response.setHeader("WWW-Authenticate", "BASIC 
realm=\"Tuscany\"");
-                response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
-            }
-        }
-        
-        super.service(request, response);
-    }    
-    
-    @Override
-    protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
-        // Get the request path
-        String path = 
URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()),
 "UTF-8");
-        if (path.length() ==0) {            
-            // Redirect to a URL ending with / to make relative hrefs work
-            // relative to the served resource.
-            
response.sendRedirect(request.getRequestURL().append('/').toString());
-            return;
-        }
-
-        // Invoke the get operation on the service implementation
-        Message requestMessage = messageFactory.createMessage();
-
-        //store http headers to message
-        
requestMessage.getHeaders().addAll(HTTPHeadersParser.getHeaders(request));
-        
-        String id = path.substring(1);
-        
-        Message responseMessage = null;
-        HTTPCacheContext cacheContext = null;
-        try { 
-           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
-        } catch (ParseException e) {           
-        }
-
-        // Route message based on availability of cache info and cache methods
-        if (( cacheContext != null ) && (cacheContext.isEnabled()) && 
(conditionalGetInvoker != null )) {        
-               requestMessage.setBody(new Object[] {id, cacheContext});
-               responseMessage = conditionalGetInvoker.invoke(requestMessage);
-        } else {
-               requestMessage.setBody(new Object[] {id});
-               responseMessage = getInvoker.invoke(requestMessage);
-        }
-        if (responseMessage.isFault()) {
-               Object body = responseMessage.getBody();
-               
-               int index = -1;
-               if ( -1 < (index = body.getClass().getName().indexOf( 
"NotModifiedException")) ) {
-                       if ( index > -1 ) 
-                       response.sendError( 
HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index ));
-                       else
-                       response.sendError( HttpServletResponse.SC_NOT_MODIFIED 
);
-                       return;
-               } else if ( -1 < (index = body.getClass().getName().indexOf( 
"PreconditionFailedException")) ) {
-                       if ( index > -1 ) 
-                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index ));
-                       else
-                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED );
-                       return;                         
-            }
-                                       
-            throw new ServletException((Throwable)responseMessage.getBody());
-        }
-        
-        // Write the response from the service implementation to the response
-        // output stream
-        InputStream is = (InputStream)responseMessage.getBody();
-        OutputStream os = response.getOutputStream(); 
-        byte[] buffer = new byte[2048];
-        for (;;) {
-            int n = is.read(buffer);
-            if (n <= 0)
-                break;
-            os.write(buffer, 0, n);
-        }
-        os.flush();
-        os.close();        
-    }
-
-    @Override
-    protected void doDelete(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
-        // Get the request path
-        String path = 
URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()),
 "UTF-8");
-        if (path.length() ==0) {            
-            // Redirect to a URL ending with / to make relative hrefs work
-            // relative to the served resource.
-            
response.sendRedirect(request.getRequestURL().append('/').toString());
-            return;
-        }
-
-        // Invoke the get operation on the service implementation
-        Message requestMessage = messageFactory.createMessage();
-        String id = path.substring(1);
-        
-        Message responseMessage = null;
-        HTTPCacheContext cacheContext = null;
-        try { 
-           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
-        } catch (ParseException e) {           
-        }
-        
-        // Route message based on availability of cache info and cache methods
-        if (( cacheContext != null ) && (cacheContext.isEnabled()) && 
(conditionalDeleteInvoker != null )) {        
-               requestMessage.setBody(new Object[] {id, cacheContext});
-               responseMessage = 
conditionalDeleteInvoker.invoke(requestMessage);
-        } else {
-               requestMessage.setBody(new Object[] {id});
-               responseMessage = deleteInvoker.invoke(requestMessage);
-        }
-        if (responseMessage.isFault()) {
-               Object body = responseMessage.getBody();
-               
-               int index = -1;
-               if ( -1 < (index = body.getClass().getName().indexOf( 
"NotModifiedException")) ) {
-                       if ( index > -1 ) 
-                       response.sendError( 
HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index ));
-                       else
-                       response.sendError( HttpServletResponse.SC_NOT_MODIFIED 
);
-                       return;
-               } else if ( -1 < (index = body.getClass().getName().indexOf( 
"PreconditionFailedException")) ) {
-                       if ( index > -1 ) 
-                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index ));
-                       else
-                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED );
-                       return;                         
-            }                  
-               
-            throw new ServletException((Throwable)responseMessage.getBody());
-        }
-        
-        // Write the response from the service implementation to the response
-        // output stream
-        InputStream is = (InputStream)responseMessage.getBody();
-        OutputStream os = response.getOutputStream(); 
-        byte[] buffer = new byte[2048];
-        for (;;) {
-            int n = is.read(buffer);
-            if (n <= 0)
-                break;
-            os.write(buffer, 0, n);
-        }
-        os.flush();
-        os.close();        
-    }
-
-    @Override
-    protected void doPut(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
-        // Get the request path
-        String path = 
URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()),
 "UTF-8");
-        if (path.length() ==0) {            
-            // Redirect to a URL ending with / to make relative hrefs work
-            // relative to the served resource.
-            
response.sendRedirect(request.getRequestURL().append('/').toString());
-            return;
-        }
-
-        // Invoke the get operation on the service implementation
-        Message requestMessage = messageFactory.createMessage();
-        String id = path.substring(1);
-        
-        Message responseMessage = null;
-        HTTPCacheContext cacheContext = null;
-        try { 
-           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
-        } catch (ParseException e) {           
-        }
-        
-        // Route message based on availability of cache info and cache methods
-        if (( cacheContext != null ) && (cacheContext.isEnabled()) && 
(conditionalPutInvoker != null )) {        
-               requestMessage.setBody(new Object[] {id, cacheContext});
-               responseMessage = conditionalPutInvoker.invoke(requestMessage);
-        } else {
-               requestMessage.setBody(new Object[] {id});
-               responseMessage = putInvoker.invoke(requestMessage);
-        }
-        if (responseMessage.isFault()) {
-               Object body = responseMessage.getBody();
-               
-               int index = -1;
-               if ( -1 < (index = body.getClass().getName().indexOf( 
"NotModifiedException")) ) {
-                       if ( index > -1 ) 
-                       response.sendError( 
HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index ));
-                       else
-                       response.sendError( HttpServletResponse.SC_NOT_MODIFIED 
);
-                       return;
-               } else if ( -1 < (index = body.getClass().getName().indexOf( 
"PreconditionFailedException")) ) {
-                       if ( index > -1 ) 
-                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index ));
-                       else
-                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED );
-                       return;                         
-            }                  
-               
-            throw new ServletException((Throwable)responseMessage.getBody());
-        }
-        
-        // Write the response from the service implementation to the response
-        // output stream
-        InputStream is = (InputStream)responseMessage.getBody();
-        OutputStream os = response.getOutputStream(); 
-        byte[] buffer = new byte[2048];
-        for (;;) {
-            int n = is.read(buffer);
-            if (n <= 0)
-                break;
-            os.write(buffer, 0, n);
-        }
-        os.flush();
-        os.close();        
-    }
-
-    @Override
-    protected void doPost(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
-        // Get the request path
-        String path = 
URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()),
 "UTF-8");
-        if (path.length() ==0) {            
-            // Redirect to a URL ending with / to make relative hrefs work
-            // relative to the served resource.
-            
response.sendRedirect(request.getRequestURL().append('/').toString());
-            return;
-        }
-
-        // Invoke the get operation on the service implementation
-        Message requestMessage = messageFactory.createMessage();
-        // String id = path.substring(1);
-        
-        Message responseMessage = null;
-        HTTPCacheContext cacheContext = null;
-        try { 
-           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
-        } catch (ParseException e) {           
-        }
-        
-        // Route message based on availability of cache info and cache methods
-        if (( cacheContext != null ) && (cacheContext.isEnabled()) && 
(conditionalPostInvoker != null )) {        
-               requestMessage.setBody(new Object[] {cacheContext});
-               responseMessage = conditionalPostInvoker.invoke(requestMessage);
-        } else {
-               requestMessage.setBody(new Object[] {});
-               responseMessage = postInvoker.invoke(requestMessage);
-        }
-        if (responseMessage.isFault()) {
-               Object body = responseMessage.getBody();
-               
-               int index = -1;
-               if ( -1 < (index = body.getClass().getName().indexOf( 
"NotModifiedException")) ) {
-                       if ( index > -1 ) 
-                       response.sendError( 
HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index ));
-                       else
-                       response.sendError( HttpServletResponse.SC_NOT_MODIFIED 
);
-                       return;
-               } else if ( -1 < (index = body.getClass().getName().indexOf( 
"PreconditionFailedException")) ) {
-                       if ( index > -1 ) 
-                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index ));
-                       else
-                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED );
-                       return;                         
-            }                  
-               
-            throw new ServletException((Throwable)responseMessage.getBody());
-        }
-
-
-        // Test if the ETag and LastModified are returned as a cache context.
-       Object body = responseMessage.getBody();
-       if ( body.getClass() == HTTPCacheContext.class ) {
-               // Transfer to header if so.
-               HTTPCacheContext cc = 
(HTTPCacheContext)responseMessage.getBody();
-               if (( cc != null ) && ( cc.isEnabled() )) {
-                       String eTag = cc.getETag();
-               if ( eTag != null )
-                       response.setHeader( "ETag", cc.getETag() );
-               String lastModified = cc.getLastModified();
-               if ( lastModified != null)
-                       response.setHeader( "LastModified", 
cc.getLastModified() );
-               }
-       }
-    }
-
-    /**
-     * @return the getInvoker
-     */
-    public Invoker getGetInvoker() {
-        return getInvoker;
-    }
-
-    /**
-     * @param getInvoker the getInvoker to set
-     */
-    public void setGetInvoker(Invoker getInvoker) {
-        this.getInvoker = getInvoker;
-    }
-
-    /**
-     * @return the conditionalGetInvoker
-     */
-    public Invoker getConditionalGetInvoker() {
-        return conditionalGetInvoker;
-    }
-
-    /**
-     * @param conditionalGetInvoker the conditionalGetInvoker to set
-     */
-    public void setConditionalGetInvoker(Invoker conditionalGetInvoker) {
-        this.conditionalGetInvoker = conditionalGetInvoker;
-    }
-
-    /**
-     * @return the putInvoker
-     */
-    public Invoker getPutInvoker() {
-        return putInvoker;
-    }
-
-    /**
-     * @param putInvoker the putInvoker to set
-     */
-    public void setPutInvoker(Invoker putInvoker) {
-        this.putInvoker = putInvoker;
-    }
-
-    /**
-     * @return the conditionalPutInvoker
-     */
-    public Invoker getConditionalPutInvoker() {
-        return conditionalPutInvoker;
-    }
-
-    /**
-     * @param conditionalPutInvoker the conditionalPutInvoker to set
-     */
-    public void setConditionalPutInvoker(Invoker conditionalPutInvoker) {
-        this.conditionalPutInvoker = conditionalPutInvoker;
-    }
-
-    /**
-     * @return the postInvoker
-     */
-    public Invoker getPostInvoker() {
-        return postInvoker;
-    }
-
-    /**
-     * @param postInvoker the postInvoker to set
-     */
-    public void setPostInvoker(Invoker postInvoker) {
-        this.postInvoker = postInvoker;
-    }
-
-    /**
-     * @return the conditionalPostInvoker
-     */
-    public Invoker getConditionalPostInvoker() {
-        return conditionalPostInvoker;
-    }
-
-    /**
-     * @param conditionalPostInvoker the conditionalPostInvoker to set
-     */
-    public void setConditionalPostInvoker(Invoker conditionalPostInvoker) {
-        this.conditionalPostInvoker = conditionalPostInvoker;
-    }
-
-    /**
-     * @return the deleteInvoker
-     */
-    public Invoker getDeleteInvoker() {
-        return deleteInvoker;
-    }
-
-    /**
-     * @param deleteInvoker the deleteInvoker to set
-     */
-    public void setDeleteInvoker(Invoker deleteInvoker) {
-        this.deleteInvoker = deleteInvoker;
-    }
-
-    /**
-     * @return the conditionalDeleteInvoker
-     */
-    public Invoker getConditionalDeleteInvoker() {
-        return conditionalDeleteInvoker;
-    }
-
-    /**
-     * @param conditionalDeleteInvoker the conditionalDeleteInvoker to set
-     */
-    public void setConditionalDeleteInvoker(Invoker conditionalDeleteInvoker) {
-        this.conditionalDeleteInvoker = conditionalDeleteInvoker;
-    }
-
-    
-    /** 
-     * Utility Methods related to Policy
-     */
-    
-
-    private boolean hasAuthorization(HttpServletRequest request, 
ServletResponse response) {
-        boolean result = false;
-        if(request.getHeader("Authorization") != null) {
-            result = true;
-        }
-        
-        return result;
-    }
-
-
-}
+/*
+ * 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.tuscany.sca.binding.http.provider;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLDecoder;
+import java.text.ParseException;
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.binding.http.HTTPCacheContext;
+import org.apache.tuscany.sca.binding.http.util.HTTPHeadersParser;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.invocation.Message;
+import org.apache.tuscany.sca.invocation.MessageFactory;
+import org.apache.tuscany.sca.policy.Intent;
+import org.apache.tuscany.sca.policy.PolicySet;
+import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
+import 
org.apache.tuscany.sca.policy.authentication.basic.BasicAuthenticationPolicy;
+
+/**
+ * Servlet responsible for dispatching HTTP requests to the
+ * target component implementation.
+ *
+ * @version $Rev$ $Date$
+ */
+public class HTTPBindingListenerServlet extends HttpServlet {
+    private static final long serialVersionUID = 2865466417329430610L;
+    
+    private static final QName AUTEHTICATION_INTENT = new 
QName("http://www.osoa.org/xmlns/sca/1.0","authentication";);
+    
+    transient private Binding binding;
+
+    transient private boolean requiresAuthentication = false;
+    transient private BasicAuthenticationPolicy basicAuthenticationPolicy = 
null;
+
+    private MessageFactory messageFactory;
+    private Invoker getInvoker;
+    private Invoker conditionalGetInvoker;
+    private Invoker putInvoker;
+    private Invoker conditionalPutInvoker;
+    private Invoker postInvoker;
+    private Invoker conditionalPostInvoker;
+    private Invoker deleteInvoker;
+    private Invoker conditionalDeleteInvoker;
+    
+    /**
+     * Constructs a new HTTPServiceListenerServlet.
+     */
+    public HTTPBindingListenerServlet(Binding binding, MessageFactory 
messageFactory) {
+        this.binding = binding;
+        this.messageFactory = messageFactory;
+        
+
+        // find out which policies are active
+        if (binding instanceof PolicySetAttachPoint) {
+            List<Intent> intents = 
((PolicySetAttachPoint)binding).getRequiredIntents();
+            for(Intent intent : intents) {
+                if(intent.getName().equals(AUTEHTICATION_INTENT)) {
+                    requiresAuthentication = true;
+                }
+            }
+
+
+            List<PolicySet> policySets = 
((PolicySetAttachPoint)binding).getApplicablePolicySets();
+            for (PolicySet ps : policySets) {
+                for (Object p : ps.getPolicies()) {
+                    if (BasicAuthenticationPolicy.class.isInstance(p)) {
+                        basicAuthenticationPolicy = 
(BasicAuthenticationPolicy)p;
+                    } else {
+                        // etc. check for other types of policy being present
+                    }
+                }
+            }
+        }        
+    }
+
+    
+    @Override
+    protected void service(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
+
+        if(requiresAuthentication) {
+            if(! hasAuthorization(request, response)) {
+                response.setHeader("WWW-Authenticate", "BASIC 
realm=\"Tuscany\"");
+                response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
+            }
+        }
+        
+        super.service(request, response);
+    }    
+    
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
+        // Get the request path
+        String path = 
URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()),
 "UTF-8");
+        if (path.length() ==0) {            
+            // Redirect to a URL ending with / to make relative hrefs work
+            // relative to the served resource.
+            
response.sendRedirect(request.getRequestURL().append('/').toString());
+            return;
+        }
+
+        // Invoke the get operation on the service implementation
+        Message requestMessage = messageFactory.createMessage();
+
+        //store http headers to message
+        
requestMessage.getHeaders().addAll(HTTPHeadersParser.getHeaders(request));
+        
+        String id = path.substring(1);
+        
+        Message responseMessage = null;
+        HTTPCacheContext cacheContext = null;
+        try { 
+           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
+        } catch (ParseException e) {           
+        }
+
+        // Route message based on availability of cache info and cache methods
+        if (( cacheContext != null ) && (cacheContext.isEnabled()) && 
(conditionalGetInvoker != null )) {        
+               requestMessage.setBody(new Object[] {id, cacheContext});
+               responseMessage = conditionalGetInvoker.invoke(requestMessage);
+        } else {
+               requestMessage.setBody(new Object[] {id});
+               responseMessage = getInvoker.invoke(requestMessage);
+        }
+        if (responseMessage.isFault()) {
+               Object body = responseMessage.getBody();
+               
+               int index = -1;
+               if ( -1 < (index = body.getClass().getName().indexOf( 
"NotModifiedException")) ) {
+                       if ( index > -1 ) 
+                       response.sendError( 
HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index ));
+                       else
+                       response.sendError( HttpServletResponse.SC_NOT_MODIFIED 
);
+                       return;
+               } else if ( -1 < (index = body.getClass().getName().indexOf( 
"PreconditionFailedException")) ) {
+                       if ( index > -1 ) 
+                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index ));
+                       else
+                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED );
+                       return;                         
+            }
+                                       
+            throw new ServletException((Throwable)responseMessage.getBody());
+        }
+        
+        // Write the response from the service implementation to the response
+        // output stream
+        InputStream is = (InputStream)responseMessage.getBody();
+        OutputStream os = response.getOutputStream(); 
+        byte[] buffer = new byte[2048];
+        for (;;) {
+            int n = is.read(buffer);
+            if (n <= 0)
+                break;
+            os.write(buffer, 0, n);
+        }
+        os.flush();
+        os.close();        
+    }
+
+    @Override
+    protected void doDelete(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
+        // Get the request path
+        String path = 
URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()),
 "UTF-8");
+        if (path.length() ==0) {            
+            // Redirect to a URL ending with / to make relative hrefs work
+            // relative to the served resource.
+            
response.sendRedirect(request.getRequestURL().append('/').toString());
+            return;
+        }
+
+        // Invoke the get operation on the service implementation
+        Message requestMessage = messageFactory.createMessage();
+        String id = path.substring(1);
+        
+        Message responseMessage = null;
+        HTTPCacheContext cacheContext = null;
+        try { 
+           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
+        } catch (ParseException e) {           
+        }
+        
+        // Route message based on availability of cache info and cache methods
+        if (( cacheContext != null ) && (cacheContext.isEnabled()) && 
(conditionalDeleteInvoker != null )) {        
+               requestMessage.setBody(new Object[] {id, cacheContext});
+               responseMessage = 
conditionalDeleteInvoker.invoke(requestMessage);
+        } else {
+               requestMessage.setBody(new Object[] {id});
+               responseMessage = deleteInvoker.invoke(requestMessage);
+        }
+        if (responseMessage.isFault()) {
+               Object body = responseMessage.getBody();
+               
+               int index = -1;
+               if ( -1 < (index = body.getClass().getName().indexOf( 
"NotModifiedException")) ) {
+                       if ( index > -1 ) 
+                       response.sendError( 
HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index ));
+                       else
+                       response.sendError( HttpServletResponse.SC_NOT_MODIFIED 
);
+                       return;
+               } else if ( -1 < (index = body.getClass().getName().indexOf( 
"PreconditionFailedException")) ) {
+                       if ( index > -1 ) 
+                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index ));
+                       else
+                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED );
+                       return;                         
+            }                  
+               
+            throw new ServletException((Throwable)responseMessage.getBody());
+        }
+        
+        // Write the response from the service implementation to the response
+        // output stream
+        InputStream is = (InputStream)responseMessage.getBody();
+        OutputStream os = response.getOutputStream(); 
+        byte[] buffer = new byte[2048];
+        for (;;) {
+            int n = is.read(buffer);
+            if (n <= 0)
+                break;
+            os.write(buffer, 0, n);
+        }
+        os.flush();
+        os.close();        
+    }
+
+    @Override
+    protected void doPut(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
+        // Get the request path
+        String path = 
URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()),
 "UTF-8");
+        if (path.length() ==0) {            
+            // Redirect to a URL ending with / to make relative hrefs work
+            // relative to the served resource.
+            
response.sendRedirect(request.getRequestURL().append('/').toString());
+            return;
+        }
+
+        // Invoke the get operation on the service implementation
+        Message requestMessage = messageFactory.createMessage();
+        String id = path.substring(1);
+        
+        Message responseMessage = null;
+        HTTPCacheContext cacheContext = null;
+        try { 
+           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
+        } catch (ParseException e) {           
+        }
+        
+        // Route message based on availability of cache info and cache methods
+        if (( cacheContext != null ) && (cacheContext.isEnabled()) && 
(conditionalPutInvoker != null )) {        
+               requestMessage.setBody(new Object[] {id, cacheContext});
+               responseMessage = conditionalPutInvoker.invoke(requestMessage);
+        } else {
+               requestMessage.setBody(new Object[] {id});
+               responseMessage = putInvoker.invoke(requestMessage);
+        }
+        if (responseMessage.isFault()) {
+               Object body = responseMessage.getBody();
+               
+               int index = -1;
+               if ( -1 < (index = body.getClass().getName().indexOf( 
"NotModifiedException")) ) {
+                       if ( index > -1 ) 
+                       response.sendError( 
HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index ));
+                       else
+                       response.sendError( HttpServletResponse.SC_NOT_MODIFIED 
);
+                       return;
+               } else if ( -1 < (index = body.getClass().getName().indexOf( 
"PreconditionFailedException")) ) {
+                       if ( index > -1 ) 
+                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index ));
+                       else
+                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED );
+                       return;                         
+            }                  
+               
+            throw new ServletException((Throwable)responseMessage.getBody());
+        }
+        
+        // Write the response from the service implementation to the response
+        // output stream
+        InputStream is = (InputStream)responseMessage.getBody();
+        OutputStream os = response.getOutputStream(); 
+        byte[] buffer = new byte[2048];
+        for (;;) {
+            int n = is.read(buffer);
+            if (n <= 0)
+                break;
+            os.write(buffer, 0, n);
+        }
+        os.flush();
+        os.close();        
+    }
+
+    @Override
+    protected void doPost(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
+        // Get the request path
+        String path = 
URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()),
 "UTF-8");
+        if (path.length() ==0) {            
+            // Redirect to a URL ending with / to make relative hrefs work
+            // relative to the served resource.
+            
response.sendRedirect(request.getRequestURL().append('/').toString());
+            return;
+        }
+
+        // Invoke the get operation on the service implementation
+        Message requestMessage = messageFactory.createMessage();
+        // String id = path.substring(1);
+        
+        Message responseMessage = null;
+        HTTPCacheContext cacheContext = null;
+        try { 
+           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
+        } catch (ParseException e) {           
+        }
+        
+        // Route message based on availability of cache info and cache methods
+        if (( cacheContext != null ) && (cacheContext.isEnabled()) && 
(conditionalPostInvoker != null )) {        
+               requestMessage.setBody(new Object[] {cacheContext});
+               responseMessage = conditionalPostInvoker.invoke(requestMessage);
+        } else {
+               requestMessage.setBody(new Object[] {});
+               responseMessage = postInvoker.invoke(requestMessage);
+        }
+        if (responseMessage.isFault()) {
+               Object body = responseMessage.getBody();
+               
+               int index = -1;
+               if ( -1 < (index = body.getClass().getName().indexOf( 
"NotModifiedException")) ) {
+                       if ( index > -1 ) 
+                       response.sendError( 
HttpServletResponse.SC_NOT_MODIFIED, body.toString().substring( index ));
+                       else
+                       response.sendError( HttpServletResponse.SC_NOT_MODIFIED 
);
+                       return;
+               } else if ( -1 < (index = body.getClass().getName().indexOf( 
"PreconditionFailedException")) ) {
+                       if ( index > -1 ) 
+                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED, body.toString().substring( index ));
+                       else
+                       response.sendError( 
HttpServletResponse.SC_PRECONDITION_FAILED );
+                       return;                         
+            }                  
+               
+            throw new ServletException((Throwable)responseMessage.getBody());
+        }
+
+
+        // Test if the ETag and LastModified are returned as a cache context.
+       Object body = responseMessage.getBody();
+       if ( body.getClass() == HTTPCacheContext.class ) {
+               // Transfer to header if so.
+               HTTPCacheContext cc = 
(HTTPCacheContext)responseMessage.getBody();
+               if (( cc != null ) && ( cc.isEnabled() )) {
+                       String eTag = cc.getETag();
+               if ( eTag != null )
+                       response.setHeader( "ETag", cc.getETag() );
+               String lastModified = cc.getLastModified();
+               if ( lastModified != null)
+                       response.setHeader( "LastModified", 
cc.getLastModified() );
+               }
+       }
+    }
+
+    /**
+     * @return the getInvoker
+     */
+    public Invoker getGetInvoker() {
+        return getInvoker;
+    }
+
+    /**
+     * @param getInvoker the getInvoker to set
+     */
+    public void setGetInvoker(Invoker getInvoker) {
+        this.getInvoker = getInvoker;
+    }
+
+    /**
+     * @return the conditionalGetInvoker
+     */
+    public Invoker getConditionalGetInvoker() {
+        return conditionalGetInvoker;
+    }
+
+    /**
+     * @param conditionalGetInvoker the conditionalGetInvoker to set
+     */
+    public void setConditionalGetInvoker(Invoker conditionalGetInvoker) {
+        this.conditionalGetInvoker = conditionalGetInvoker;
+    }
+
+    /**
+     * @return the putInvoker
+     */
+    public Invoker getPutInvoker() {
+        return putInvoker;
+    }
+
+    /**
+     * @param putInvoker the putInvoker to set
+     */
+    public void setPutInvoker(Invoker putInvoker) {
+        this.putInvoker = putInvoker;
+    }
+
+    /**
+     * @return the conditionalPutInvoker
+     */
+    public Invoker getConditionalPutInvoker() {
+        return conditionalPutInvoker;
+    }
+
+    /**
+     * @param conditionalPutInvoker the conditionalPutInvoker to set
+     */
+    public void setConditionalPutInvoker(Invoker conditionalPutInvoker) {
+        this.conditionalPutInvoker = conditionalPutInvoker;
+    }
+
+    /**
+     * @return the postInvoker
+     */
+    public Invoker getPostInvoker() {
+        return postInvoker;
+    }
+
+    /**
+     * @param postInvoker the postInvoker to set
+     */
+    public void setPostInvoker(Invoker postInvoker) {
+        this.postInvoker = postInvoker;
+    }
+
+    /**
+     * @return the conditionalPostInvoker
+     */
+    public Invoker getConditionalPostInvoker() {
+        return conditionalPostInvoker;
+    }
+
+    /**
+     * @param conditionalPostInvoker the conditionalPostInvoker to set
+     */
+    public void setConditionalPostInvoker(Invoker conditionalPostInvoker) {
+        this.conditionalPostInvoker = conditionalPostInvoker;
+    }
+
+    /**
+     * @return the deleteInvoker
+     */
+    public Invoker getDeleteInvoker() {
+        return deleteInvoker;
+    }
+
+    /**
+     * @param deleteInvoker the deleteInvoker to set
+     */
+    public void setDeleteInvoker(Invoker deleteInvoker) {
+        this.deleteInvoker = deleteInvoker;
+    }
+
+    /**
+     * @return the conditionalDeleteInvoker
+     */
+    public Invoker getConditionalDeleteInvoker() {
+        return conditionalDeleteInvoker;
+    }
+
+    /**
+     * @param conditionalDeleteInvoker the conditionalDeleteInvoker to set
+     */
+    public void setConditionalDeleteInvoker(Invoker conditionalDeleteInvoker) {
+        this.conditionalDeleteInvoker = conditionalDeleteInvoker;
+    }
+
+    
+    /** 
+     * Utility Methods related to Policy
+     */
+    
+
+    private boolean hasAuthorization(HttpServletRequest request, 
ServletResponse response) {
+        boolean result = false;
+        if(request.getHeader("Authorization") != null) {
+            result = true;
+        }
+        
+        return result;
+    }
+
+
+}

Modified: 
tuscany/branches/sca-java-1.x/modules/binding-http-new/src/main/java/org/apache/tuscany/sca/binding/http/HTTPCacheContext.java
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-http-new/src/main/java/org/apache/tuscany/sca/binding/http/HTTPCacheContext.java?rev=770880&r1=770878&r2=770880&view=diff
==============================================================================
--- 
tuscany/branches/sca-java-1.x/modules/binding-http-new/src/main/java/org/apache/tuscany/sca/binding/http/HTTPCacheContext.java
 (original)
+++ 
tuscany/branches/sca-java-1.x/modules/binding-http-new/src/main/java/org/apache/tuscany/sca/binding/http/HTTPCacheContext.java
 Sat May  2 02:04:03 2009
@@ -1,257 +1,257 @@
-/*
- * 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.tuscany.sca.binding.http;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * A class to store cache settings for Atom and HTTP requests and responses.
- * 
- * Predicates are statements that work in conjunction with
- * ETags and LastModified dates to determine if a precondition
- * or postcondition is satisfied.
- * See HTTP specification for how predicates wrk:
- * http://tools.ietf.org/html/rfc2616
- * Example predicates in HTTP include If-Match, If-None-Match,
- * If-Modified-Since, If-Unmodified-Since, If-Range.
-
- */
-public class HTTPCacheContext {
-    public static final SimpleDateFormat RFC822DateFormat = new 
SimpleDateFormat( "EEE, dd MMM yyyy HH:mm:ss Z" ); // RFC 822 date time
-    
-    public boolean enabled;
-       public String eTag;
-       public String lastModified;
-       public Date lastModifiedDate;
-       public boolean ifModifiedSince;
-       public boolean ifUnmodifiedSince;
-       public boolean ifMatch;
-       public boolean ifNoneMatch;
-       public boolean ifRange;
-
-       /**
-        * An ETag is a unique ID for an item. It changes when
-        * a field in the item or the update date changes.
-        * See HTTP specification for how ETags work:
-        * http://tools.ietf.org/html/rfc2616
-        * @return the eTag
-        */
-       public String getETag() {
-               return eTag;
-       }
-       /**
-        * @param tag the eTag to set
-        */
-       public void setETag(String tag) {
-               eTag = tag;
-               enabled = true;
-       }
-       /**
-        * The LastModified date is the time the item was last 
-        * changed. See HTTP specification for how ETags work:
-        * http://tools.ietf.org/html/rfc2616
-        * @return the lastModified
-        */
-       public String getLastModified() {
-               return lastModified;
-       }
-       /**
-        * The LastModified date is the time the item was last 
-        * changed. See HTTP specification for how ETags work:
-        * http://tools.ietf.org/html/rfc2616
-        * @return the lastModified
-        */
-       public Date getLastModifiedAsDate() {
-               return lastModifiedDate;
-       }
-       /**
-        * @param lastModified the lastModified to set
-        */
-       public void setLastModified(String lastModified) throws 
java.text.ParseException {
-               this.lastModified = lastModified;
-               // Catch date formatting on input to help debugging.
-               lastModifiedDate = RFC822DateFormat.parse( lastModified );
-               enabled = true;
-       }
-       
-       /**
-        * @param lastModified the lastModified to set
-        */
-       public void setLastModified(Date updated) {
-               this.lastModified = RFC822DateFormat.format( updated );
-               lastModifiedDate = updated;
-               enabled = true;
-       }
-       
-       /**
-        * @return the ifModifedSince
-        */
-       public boolean isIfModifiedSince() {
-               return ifModifiedSince;
-       }
-       /**
-        * @param ifModifedSince the ifModifedSince to set
-        */
-       public void setIfModifiedSince(boolean ifModifiedSince) {
-               this.ifModifiedSince = ifModifiedSince;
-               if ( ifModifiedSince )
-                       enabled = true;
-       }
-       /**
-        * @return the ifUnModifiedSince
-        */
-       public boolean isIfUnmodifiedSince() {
-               return ifUnmodifiedSince;
-       }
-       /**
-        * @param ifUnModifiedSince the ifUnModifiedSince to set
-        */
-       public void setIfUnmodifiedSince(boolean ifUnmodifiedSince) {
-               this.ifUnmodifiedSince = ifUnmodifiedSince;
-               if ( ifUnmodifiedSince )
-                       enabled = true;
-       }
-       /**
-        * @return the ifMatch
-        */
-       public boolean isIfMatch() {
-               return ifMatch;
-       }
-       /**
-        * @param ifMatch the ifMatch to set
-        */
-       public void setIfMatch(boolean ifMatch) {
-               this.ifMatch = ifMatch;
-               if ( ifMatch )
-                       enabled = true;
-       }
-       /**
-        * @return the ifNoneMatch
-        */
-       public boolean isIfNoneMatch() {
-               return ifNoneMatch;
-       }
-       /**
-        * @param ifNoneMatch the ifNoneMatch to set
-        */
-       public void setIfNoneMatch(boolean ifNoneMatch) {
-               this.ifNoneMatch = ifNoneMatch;
-               if ( ifNoneMatch )
-                       enabled = true;
-       }
-       /**
-        * @return the ifRange
-        */
-       public boolean isIfRange() {
-               return ifRange;
-       }
-       /**
-        * @param ifRange the ifRange to set
-        */
-       public void setIfRange(boolean ifRange) {
-               this.ifRange = ifRange;
-               if ( ifRange )
-                       enabled = true;
-       }
-
-    public String toString() {
-       final String PREDPREFIX = ", predicates=";
-               StringBuffer sb = new StringBuffer(PREDPREFIX);
-               if ( ifMatch || ifNoneMatch || ifModifiedSince || 
ifUnmodifiedSince || ifRange ) {
-                       if ( ifMatch ) {
-                               if ( sb.length() > PREDPREFIX.length() ) 
sb.append( ", ");
-                               sb.append("If-Match");
-                       }
-                       if ( ifNoneMatch ) {
-                               if ( sb.length() > PREDPREFIX.length() ) 
sb.append( ", ");
-                               sb.append("If-None-Match");
-                       }
-                       if ( ifModifiedSince ) {
-                               if ( sb.length() > PREDPREFIX.length() ) 
sb.append( ", ");
-                               sb.append("If-Modified-Since");
-                       }
-                       if ( ifUnmodifiedSince ) {
-                               if ( sb.length() > PREDPREFIX.length() ) 
sb.append( ", ");
-                               sb.append("If-UnModified-Since");
-                       }
-                       if ( ifRange ) {
-                               if ( sb.length() > PREDPREFIX.length() ) 
sb.append( ", ");
-                               sb.append("If-Range");
-                       }
-               } else {
-                       sb.append("null");
-               }
-
-               return "eTag=" + eTag + ", lastModified=" + lastModified
-                               + sb.toString();
-       }
-
-    /**
-     * Gets the cache context information (ETag, LastModified, predicates) 
from the Http request.
-     * @param request
-     * @return
-     */
-    public static HTTPCacheContext getCacheContextFromRequest( 
HttpServletRequest request ) throws java.text.ParseException {
-       HTTPCacheContext context = new HTTPCacheContext();
-       
-       String eTag = request.getHeader( "If-Match" );          
-       if ( eTag != null ) {
-          context.setETag( eTag );
-          context.setIfMatch( true );
-       }
-       eTag = request.getHeader( "If-None-Match" );            
-       if ( eTag != null ) {
-          context.setETag( eTag );
-          context.setIfNoneMatch( true );
-       }
-        String lastModifiedString = request.getHeader( "If-Modified-Since" );  
      
-       if ( lastModifiedString != null ) {
-          context.setLastModified( lastModifiedString );
-          context.setIfModifiedSince( true );
-       }
-        lastModifiedString = request.getHeader( "If-Unmodified-Since" );       
 
-       if ( lastModifiedString != null ) {
-          context.setLastModified( lastModifiedString );
-          context.setIfUnmodifiedSince( true );
-       }
-        lastModifiedString = request.getHeader( "If-Range" );        
-       if ( lastModifiedString != null ) {
-          context.setLastModified( lastModifiedString );
-          context.setIfRange( true );
-       }
-       return context;
-    }
-       /**
-        * Enabled is true whenever ETag, LastModified, or predicate is set.
-        * @return the enabled
-        */
-       public boolean isEnabled() {
-               return enabled;
-       }
-       /**
-        * @param enabled the enabled to set
-        */
-       public void setEnabled(boolean enabled) {
-               this.enabled = enabled;
-       }
-}
+/*
+ * 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.tuscany.sca.binding.http;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * A class to store cache settings for Atom and HTTP requests and responses.
+ * 
+ * Predicates are statements that work in conjunction with
+ * ETags and LastModified dates to determine if a precondition
+ * or postcondition is satisfied.
+ * See HTTP specification for how predicates wrk:
+ * http://tools.ietf.org/html/rfc2616
+ * Example predicates in HTTP include If-Match, If-None-Match,
+ * If-Modified-Since, If-Unmodified-Since, If-Range.
+
+ */
+public class HTTPCacheContext {
+    public static final SimpleDateFormat RFC822DateFormat = new 
SimpleDateFormat( "EEE, dd MMM yyyy HH:mm:ss Z" ); // RFC 822 date time
+    
+    public boolean enabled;
+       public String eTag;
+       public String lastModified;
+       public Date lastModifiedDate;
+       public boolean ifModifiedSince;
+       public boolean ifUnmodifiedSince;
+       public boolean ifMatch;
+       public boolean ifNoneMatch;
+       public boolean ifRange;
+
+       /**
+        * An ETag is a unique ID for an item. It changes when
+        * a field in the item or the update date changes.
+        * See HTTP specification for how ETags work:
+        * http://tools.ietf.org/html/rfc2616
+        * @return the eTag
+        */
+       public String getETag() {
+               return eTag;
+       }
+       /**
+        * @param tag the eTag to set
+        */
+       public void setETag(String tag) {
+               eTag = tag;
+               enabled = true;
+       }
+       /**
+        * The LastModified date is the time the item was last 
+        * changed. See HTTP specification for how ETags work:
+        * http://tools.ietf.org/html/rfc2616
+        * @return the lastModified
+        */
+       public String getLastModified() {
+               return lastModified;
+       }
+       /**
+        * The LastModified date is the time the item was last 
+        * changed. See HTTP specification for how ETags work:
+        * http://tools.ietf.org/html/rfc2616
+        * @return the lastModified
+        */
+       public Date getLastModifiedAsDate() {
+               return lastModifiedDate;
+       }
+       /**
+        * @param lastModified the lastModified to set
+        */
+       public void setLastModified(String lastModified) throws 
java.text.ParseException {
+               this.lastModified = lastModified;
+               // Catch date formatting on input to help debugging.
+               lastModifiedDate = RFC822DateFormat.parse( lastModified );
+               enabled = true;
+       }
+       
+       /**
+        * @param lastModified the lastModified to set
+        */
+       public void setLastModified(Date updated) {
+               this.lastModified = RFC822DateFormat.format( updated );
+               lastModifiedDate = updated;
+               enabled = true;
+       }
+       
+       /**
+        * @return the ifModifedSince
+        */
+       public boolean isIfModifiedSince() {
+               return ifModifiedSince;
+       }
+       /**
+        * @param ifModifedSince the ifModifedSince to set
+        */
+       public void setIfModifiedSince(boolean ifModifiedSince) {
+               this.ifModifiedSince = ifModifiedSince;
+               if ( ifModifiedSince )
+                       enabled = true;
+       }
+       /**
+        * @return the ifUnModifiedSince
+        */
+       public boolean isIfUnmodifiedSince() {
+               return ifUnmodifiedSince;
+       }
+       /**
+        * @param ifUnModifiedSince the ifUnModifiedSince to set
+        */
+       public void setIfUnmodifiedSince(boolean ifUnmodifiedSince) {
+               this.ifUnmodifiedSince = ifUnmodifiedSince;
+               if ( ifUnmodifiedSince )
+                       enabled = true;
+       }
+       /**
+        * @return the ifMatch
+        */
+       public boolean isIfMatch() {
+               return ifMatch;
+       }
+       /**
+        * @param ifMatch the ifMatch to set
+        */
+       public void setIfMatch(boolean ifMatch) {
+               this.ifMatch = ifMatch;
+               if ( ifMatch )
+                       enabled = true;
+       }
+       /**
+        * @return the ifNoneMatch
+        */
+       public boolean isIfNoneMatch() {
+               return ifNoneMatch;
+       }
+       /**
+        * @param ifNoneMatch the ifNoneMatch to set
+        */
+       public void setIfNoneMatch(boolean ifNoneMatch) {
+               this.ifNoneMatch = ifNoneMatch;
+               if ( ifNoneMatch )
+                       enabled = true;
+       }
+       /**
+        * @return the ifRange
+        */
+       public boolean isIfRange() {
+               return ifRange;
+       }
+       /**
+        * @param ifRange the ifRange to set
+        */
+       public void setIfRange(boolean ifRange) {
+               this.ifRange = ifRange;
+               if ( ifRange )
+                       enabled = true;
+       }
+
+    public String toString() {
+       final String PREDPREFIX = ", predicates=";
+               StringBuffer sb = new StringBuffer(PREDPREFIX);
+               if ( ifMatch || ifNoneMatch || ifModifiedSince || 
ifUnmodifiedSince || ifRange ) {
+                       if ( ifMatch ) {
+                               if ( sb.length() > PREDPREFIX.length() ) 
sb.append( ", ");
+                               sb.append("If-Match");
+                       }
+                       if ( ifNoneMatch ) {
+                               if ( sb.length() > PREDPREFIX.length() ) 
sb.append( ", ");
+                               sb.append("If-None-Match");
+                       }
+                       if ( ifModifiedSince ) {
+                               if ( sb.length() > PREDPREFIX.length() ) 
sb.append( ", ");
+                               sb.append("If-Modified-Since");
+                       }
+                       if ( ifUnmodifiedSince ) {
+                               if ( sb.length() > PREDPREFIX.length() ) 
sb.append( ", ");
+                               sb.append("If-UnModified-Since");
+                       }
+                       if ( ifRange ) {
+                               if ( sb.length() > PREDPREFIX.length() ) 
sb.append( ", ");
+                               sb.append("If-Range");
+                       }
+               } else {
+                       sb.append("null");
+               }
+
+               return "eTag=" + eTag + ", lastModified=" + lastModified
+                               + sb.toString();
+       }
+
+    /**
+     * Gets the cache context information (ETag, LastModified, predicates) 
from the Http request.
+     * @param request
+     * @return
+     */
+    public static HTTPCacheContext getCacheContextFromRequest( 
HttpServletRequest request ) throws java.text.ParseException {
+       HTTPCacheContext context = new HTTPCacheContext();
+       
+       String eTag = request.getHeader( "If-Match" );          
+       if ( eTag != null ) {
+          context.setETag( eTag );
+          context.setIfMatch( true );
+       }
+       eTag = request.getHeader( "If-None-Match" );            
+       if ( eTag != null ) {
+          context.setETag( eTag );
+          context.setIfNoneMatch( true );
+       }
+        String lastModifiedString = request.getHeader( "If-Modified-Since" );  
      
+       if ( lastModifiedString != null ) {
+          context.setLastModified( lastModifiedString );
+          context.setIfModifiedSince( true );
+       }
+        lastModifiedString = request.getHeader( "If-Unmodified-Since" );       
 
+       if ( lastModifiedString != null ) {
+          context.setLastModified( lastModifiedString );
+          context.setIfUnmodifiedSince( true );
+       }
+        lastModifiedString = request.getHeader( "If-Range" );        
+       if ( lastModifiedString != null ) {
+          context.setLastModified( lastModifiedString );
+          context.setIfRange( true );
+       }
+       return context;
+    }
+       /**
+        * Enabled is true whenever ETag, LastModified, or predicate is set.
+        * @return the enabled
+        */
+       public boolean isEnabled() {
+               return enabled;
+       }
+       /**
+        * @param enabled the enabled to set
+        */
+       public void setEnabled(boolean enabled) {
+               this.enabled = enabled;
+       }
+}

Modified: tuscany/branches/sca-java-1.x/modules/pom.xml
URL: 
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/pom.xml?rev=770880&r1=770879&r2=770880&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/pom.xml (original)
+++ tuscany/branches/sca-java-1.x/modules/pom.xml Sat May  2 02:04:03 2009
@@ -61,10 +61,10 @@
                 <module>binding-gdata-runtime</module>
                 <module>binding-http</module>
                 <module>binding-http-runtime</module>
-                <module>binding-http-oasis</module>
-                <module>binding-http-oasis-runtime</module>
-                <module>binding-http-oasis-jsonrpc</module>
-                <module>binding-http-oasis-jsonrpc-runtime</module>
+                <module>binding-http-new</module>
+                <module>binding-http-new-runtime</module>
+                <module>binding-http-new-jsonrpc</module>
+                <module>binding-http-new-jsonrpc-runtime</module>
                 <module>binding-jms</module>
                 <module>binding-jms-runtime</module>
                 <module>binding-jms-policy</module>


Reply via email to