You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2008/08/09 17:56:53 UTC

svn commit: r684281 - in /tuscany/java/sca/modules/binding-gdata-runtime/src: main/java/org/apache/tuscany/sca/binding/gdata/collection/ main/java/org/apache/tuscany/sca/binding/gdata/provider/ test/java/org/apache/tuscany/sca/binding/gdata/ test/resou...

Author: lresende
Date: Sat Aug  9 08:56:52 2008
New Revision: 684281

URL: http://svn.apache.org/viewvc?rev=684281&view=rev
Log:
TUSCANY-2494 - Applying douglas's patch

Removed:
    tuscany/java/sca/modules/binding-gdata-runtime/src/test/java/org/apache/tuscany/sca/binding/gdata/Consumer.java
    tuscany/java/sca/modules/binding-gdata-runtime/src/test/java/org/apache/tuscany/sca/binding/gdata/CustomerClient.java
    tuscany/java/sca/modules/binding-gdata-runtime/src/test/java/org/apache/tuscany/sca/binding/gdata/CustomerClientImpl.java
Modified:
    tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/collection/Collection.java
    tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/collection/MediaCollection.java
    tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataBindingInvoker.java
    tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataBindingProviderFactory.java
    tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataReferenceBindingProvider.java
    tuscany/java/sca/modules/binding-gdata-runtime/src/test/resources/org/apache/tuscany/sca/binding/gdata/Consumer.composite

Modified: tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/collection/Collection.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/collection/Collection.java?rev=684281&r1=684280&r2=684281&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/collection/Collection.java (original)
+++ tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/collection/Collection.java Sat Aug  9 08:56:52 2008
@@ -19,7 +19,7 @@
 package org.apache.tuscany.sca.binding.gdata.collection;
 
 import com.google.gdata.data.BaseEntry;
-import com.google.gdata.data.Feed;
+import com.google.gdata.data.BaseFeed;
 
 import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
 import org.osoa.sca.annotations.Remotable;
@@ -37,7 +37,7 @@
      * 
      * @return the Atom feed
      */
-    Feed getFeed();
+    BaseFeed<? extends BaseFeed, ? extends BaseEntry> getFeed();
 
     /**
      * Get an Atom feed for a collection of resources resulting
@@ -46,7 +46,7 @@
      * @param queryString a query string
      * @return the Atom feed
      */
-    Feed query(String queryString);
+    BaseFeed<? extends BaseFeed, ? extends BaseEntry> query(String queryString);
 
     /**
      * Creates a new entry.
@@ -79,5 +79,4 @@
      * @param id
      */
     void delete(String id) throws NotFoundException;
-
 }

Modified: tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/collection/MediaCollection.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/collection/MediaCollection.java?rev=684281&r1=684280&r2=684281&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/collection/MediaCollection.java (original)
+++ tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/collection/MediaCollection.java Sat Aug  9 08:56:52 2008
@@ -18,11 +18,11 @@
  */
 package org.apache.tuscany.sca.binding.gdata.collection;
 
+import com.google.gdata.data.BaseEntry;
 import java.io.InputStream;
 
 import org.osoa.sca.annotations.Remotable;
 
-import com.google.gdata.data.Entry;
 import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
 
 /**
@@ -41,7 +41,7 @@
      * @param contentType
      * @param media
      */
-    Entry postMedia(String title, String slug, String contentType, InputStream media);
+    BaseEntry postMedia(String title, String slug, String contentType, InputStream media);
 
     /**
      * Update a media entry.

Modified: tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataBindingInvoker.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataBindingInvoker.java?rev=684281&r1=684280&r2=684281&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataBindingInvoker.java (original)
+++ tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataBindingInvoker.java Sat Aug  9 08:56:52 2008
@@ -18,7 +18,8 @@
  */
 package org.apache.tuscany.sca.binding.gdata.provider;
 
-import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
@@ -27,11 +28,24 @@
 import com.google.gdata.client.GoogleService;
 import com.google.gdata.client.Query;
 import com.google.gdata.data.BaseEntry;
+import com.google.gdata.data.BaseFeed;
 import com.google.gdata.data.Entry;
+import com.google.gdata.data.ExtensionProfile;
 import com.google.gdata.data.Feed;
+import com.google.gdata.data.ParseSource;
+import com.google.gdata.util.AuthenticationException;
 import java.net.URL;
-import com.google.gdata.util.ServiceException;
 import com.google.gdata.util.ResourceNotFoundException;
+import com.google.gdata.util.common.xml.XmlWriter;
+import java.io.StringWriter;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.DeleteMethod;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.PutMethod;
+import org.apache.commons.httpclient.methods.StringRequestEntity;
+import org.apache.tuscany.sca.binding.gdata.GDataBinding;
+import org.apache.tuscany.sca.data.collection.NotFoundException;
 import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
 
 /**
@@ -42,13 +56,30 @@
 class GDataBindingInvoker implements Invoker, DataExchangeSemantics {
 
     Operation operation;
-    String uri;
+    GDataBinding binding;
+    HttpClient httpClient;
+    String authorizationHeader;
     GoogleService service;
 
-    GDataBindingInvoker(Operation operation, String uri, GoogleService service) {
+    GDataBindingInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
         this.operation = operation;
-        this.uri = uri;
-        this.service = service;
+        this.binding = binding;
+        this.httpClient = httpClient;
+        this.authorizationHeader = authorizationHeader;
+
+        //Create the GoogleService
+        if (!binding.getServiceType().equals("sca")) {
+            this.service = new GoogleService(binding.getServiceType(), "");
+
+            try {
+                service.setUserCredentials(binding.getUsername(), binding.getPassword());
+            } catch (AuthenticationException ex) {
+                //FIXME - promote the exception
+                Logger.getLogger(GDataReferenceBindingProvider.class.getName()).log(Level.SEVERE, null, ex);
+            }
+
+            this.service.setConnectTimeout(60000);
+        }
     }
 
     public Message invoke(Message msg) {
@@ -63,27 +94,60 @@
      */
     public static class GetInvoker extends GDataBindingInvoker {
 
-        public GetInvoker(Operation operation, String uri, GoogleService service) {
-            super(operation, uri, service);
+        public GetInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
+            super(operation, binding, httpClient, authorizationHeader);
         }
 
         @Override
         public Message invoke(Message msg) {
 
-            try {
-                String id = (String) ((Object[]) msg.getBody())[0];
+            BaseEntry entry;
+            GetMethod getMethod = null;
+            boolean parsing = false;
 
-                BaseEntry searchedEntry = service.getEntry(new URL(id), Entry.class);
+            String id = (String) ((Object[]) msg.getBody())[0];
 
-                msg.setBody(searchedEntry);
-
-            } catch (IOException ex) {
-                msg.setFaultBody(new ServiceRuntimeException(ex));
-            } catch (ServiceException ex) {
+            try {
+                // serviceType == "sca" - Send an HTTP GET
+                if (service == null) {
+                    getMethod = new GetMethod(binding.getURI() + "/" + id);
+                    getMethod.setRequestHeader("Authorization", authorizationHeader);
+
+                    httpClient.executeMethod(getMethod);
+                    int status = getMethod.getStatusCode();
+
+                    // Read the Atom feed
+                    if (status == 200) {
+
+                        parsing = true;
+                        
+                        ParseSource parser = new ParseSource(getMethod.getResponseBodyAsStream());
+                        entry = BaseEntry.readEntry(parser);
+
+                        msg.setBody(entry);
+
+                    } else if (status == 404) {
+                        msg.setFaultBody(new NotFoundException());
+                    } else {
+                        msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
+                    }
+
+                } // serviceType != "sca" - Use GoogleService
+                else {
+                    entry = service.getEntry(new URL(id), Entry.class);
+                    msg.setBody(entry);
+                }
+            } catch (ResourceNotFoundException ex) {
+                msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
+            } catch (Exception ex) {
                 msg.setFaultBody(new ServiceRuntimeException(ex));
             } finally {
+                if (service == null && !parsing) {
+                    getMethod.releaseConnection();
+                }
                 return msg;
             }
+
         }
     }
 
@@ -92,27 +156,70 @@
      */
     public static class PostInvoker extends GDataBindingInvoker {
 
-        public PostInvoker(Operation operation, String uri, GoogleService service) {
-            super(operation, uri, service);
+        public PostInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
+            super(operation, binding, httpClient, authorizationHeader);
         }
 
         @Override
         public Message invoke(Message msg) {
 
-            try {
-
-                BaseEntry entry = (BaseEntry) ((Object[]) msg.getBody())[0];
-                BaseEntry returnedEntry = service.insert(new URL(uri), entry);
+            BaseEntry entry = (BaseEntry) ((Object[]) msg.getBody())[0];
+            BaseEntry returnedEntry;
 
-                msg.setBody(returnedEntry);
+            PostMethod postMethod = null;
+            boolean parsing = false;
 
-            } catch (IOException ex) {
-                msg.setFaultBody(new ServiceRuntimeException(ex));
-            } catch (ServiceException ex) {
+            try {
+                // serviceType == "sca" - Send an HTTP POST
+                if (service == null) {
+                    postMethod = new PostMethod(binding.getURI());
+                    postMethod.setRequestHeader("Authorization", authorizationHeader);
+
+                    // Write the Atom entry
+                    StringWriter strWriter = new StringWriter();
+                    XmlWriter writer = new XmlWriter(strWriter);
+                    entry.generateAtom(writer, new ExtensionProfile());
+                    writer.flush();
+                    writer.close();
+
+                    postMethod.setRequestHeader("Content-type", "application/atom+xml; charset=utf-8");
+                    postMethod.setRequestEntity(new StringRequestEntity(strWriter.toString()));
+
+                    httpClient.executeMethod(postMethod);
+                    int status = postMethod.getStatusCode();
+
+                    // Read the Atom feed
+                    if (status == 200 || status == 201) {
+
+                        parsing = true;
+
+                        ParseSource parser = new ParseSource(postMethod.getResponseBodyAsStream());
+                        returnedEntry = BaseEntry.readEntry(parser);
+
+                        msg.setBody(returnedEntry);
+
+                    } else if (status == 404) {
+                        msg.setFaultBody(new NotFoundException());
+                    } else {
+                        msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
+                    }
+
+                } // serviceType != "sca" - Use GoogleService
+                else {
+                    returnedEntry = service.insert(new URL(binding.getURI()), entry);
+                    msg.setBody(returnedEntry);
+                }
+            } catch (ResourceNotFoundException ex) {
+                msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
+            } catch (Exception ex) {
                 msg.setFaultBody(new ServiceRuntimeException(ex));
             } finally {
+                if (service == null && !parsing) {
+                    postMethod.releaseConnection();
+                }
                 return msg;
             }
+
         }
     }
 
@@ -121,27 +228,68 @@
      */
     public static class PutInvoker extends GDataBindingInvoker {
 
-        public PutInvoker(Operation operation, String uri, GoogleService service) {
-            super(operation, uri, service);
+        public PutInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
+            super(operation, binding, httpClient, authorizationHeader);
         }
 
         @Override
         public Message invoke(Message msg) {
-            try {
 
-                Object[] args = (Object[]) msg.getBody();
-                String id = (String) args[0];
-                BaseEntry entry = (BaseEntry) args[1];
+            BaseEntry updatedEntry;
+            String id = (String) ((Object[]) msg.getBody())[0];
+            BaseEntry entry = (BaseEntry) ((Object[]) msg.getBody())[1];
 
-                BaseEntry updatedEntry = service.update(new URL(id), entry);
+            PutMethod putMethod = null;
+            boolean parsing = false;
 
-                msg.setBody(updatedEntry);
-
-            } catch (IOException ex) {
-                msg.setFaultBody(new ServiceRuntimeException(ex));
-            } catch (ServiceException ex) {
+            try {
+                // serviceType == "sca" - Send an HTTP PUT
+                if (service == null) {
+                    putMethod = new PutMethod(binding.getURI() + "/" + id);
+                    putMethod.setRequestHeader("Authorization", authorizationHeader);
+
+                    // Write the Atom entry
+                    StringWriter strWriter = new StringWriter();
+                    XmlWriter writer = new XmlWriter(strWriter);
+                    entry.generateAtom(writer, new ExtensionProfile());
+                    writer.flush();
+                    writer.close();
+
+                    putMethod.setRequestHeader("Content-type", "application/atom+xml; charset=utf-8");
+                    putMethod.setRequestEntity(new StringRequestEntity(strWriter.toString()));
+
+                    httpClient.executeMethod(putMethod);
+                    int status = putMethod.getStatusCode();
+
+                    // Read the Atom feed
+                    if (status == 200 || status == 201) {
+
+                        parsing = true;
+
+                        ParseSource parser = new ParseSource(putMethod.getResponseBodyAsStream());
+                        updatedEntry = BaseEntry.readEntry(parser);
+
+                        msg.setBody(updatedEntry);
+
+                    } else if (status == 404) {
+                        msg.setFaultBody(new NotFoundException());
+                    } else {
+                        msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
+                    }
+
+                } // serviceType != "sca" - Use GoogleService
+                else {
+                    updatedEntry = service.update(new URL(id), entry);
+                    msg.setBody(updatedEntry);
+                }
+            } catch (ResourceNotFoundException ex) {
+                msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
+            } catch (Exception ex) {
                 msg.setFaultBody(new ServiceRuntimeException(ex));
             } finally {
+                if (service == null && !parsing) {
+                    putMethod.releaseConnection();
+                }
                 return msg;
             }
         }
@@ -152,23 +300,52 @@
      */
     public static class DeleteInvoker extends GDataBindingInvoker {
 
-        public DeleteInvoker(Operation operation, String uri, GoogleService service) {
-            super(operation, uri, service);
+        public DeleteInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
+            super(operation, binding, httpClient, authorizationHeader);
         }
 
         @Override
         public Message invoke(Message msg) {
-            try {
-                String id = (String) ((Object[]) msg.getBody())[0];
-                service.delete(new URL(id));
 
-            } catch (IOException ex) {
-                msg.setFaultBody(new ServiceRuntimeException(ex));
-            } catch (ServiceException ex) {
+            DeleteMethod deleteMethod = null;
+
+            String id = (String) ((Object[]) msg.getBody())[0];
+
+            try {
+                // serviceType == "sca" - Send an HTTP DELETE
+                if (service == null) {
+                    deleteMethod = new DeleteMethod(binding.getURI() + "/" + id);
+                    deleteMethod.setRequestHeader("Authorization", authorizationHeader);
+
+                    httpClient.executeMethod(deleteMethod);
+                    int status = deleteMethod.getStatusCode();
+
+                    // Read the Atom feed
+                    if (status == 200) {
+                        msg.setBody(null);
+
+                    } else if (status == 404) {
+                        msg.setFaultBody(new NotFoundException());
+                    } else {
+                        msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
+                    }
+
+                } // serviceType != "sca" - Use GoogleService
+                else {
+                    service.delete(new URL(id));
+                    msg.setBody(null);
+                }
+            } catch (ResourceNotFoundException ex) {
+                msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
+            } catch (Exception ex) {
                 msg.setFaultBody(new ServiceRuntimeException(ex));
             } finally {
+                if (service == null) {
+                    deleteMethod.releaseConnection();
+                }
                 return msg;
             }
+
         }
     }
 
@@ -177,26 +354,55 @@
      */
     public static class GetAllInvoker extends GDataBindingInvoker {
 
-        public GetAllInvoker(Operation operation, String uri, GoogleService service) {
-            super(operation, uri, service);
+        public GetAllInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
+            super(operation, binding, httpClient, authorizationHeader);
         }
 
         @Override
         public Message invoke(Message msg) {
 
-            try {
-
-                Feed feed = service.getFeed(new URL(uri), Feed.class);
-
-                msg.setBody(feed);
+            BaseFeed feed;
+            GetMethod getMethod = null;
+            boolean parsing = false;
 
+            try {
+                // serviceType == "sca" - Send an HTTP GET
+                if (service == null) {
+                    getMethod = new GetMethod(binding.getURI());
+                    getMethod.setRequestHeader("Authorization", authorizationHeader);
+
+                    httpClient.executeMethod(getMethod);
+                    int status = getMethod.getStatusCode();
+
+                    // Read the Atom feed
+                    if (status == 200) {
+
+                        parsing = true;
+
+                        ParseSource parser = new ParseSource(getMethod.getResponseBodyAsStream());
+                        feed = BaseFeed.readFeed(parser);
+
+                        msg.setBody(feed);
+
+                    } else if (status == 404) {
+                        msg.setFaultBody(new NotFoundException());
+                    } else {
+                        msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
+                    }
+
+                } // serviceType != "sca" - Use GoogleService
+                else {
+                    feed = service.getFeed(new URL(binding.getURI()), Feed.class);
+                    msg.setBody(feed);
+                }
             } catch (ResourceNotFoundException ex) {
-                msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + uri));
-            } catch (ServiceException ex) {
-                msg.setFaultBody(new ServiceRuntimeException(ex));
+                msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
             } catch (Exception ex) {
                 msg.setFaultBody(new ServiceRuntimeException(ex));
             } finally {
+                if (service == null && !parsing) {
+                    getMethod.releaseConnection();
+                }
                 return msg;
             }
         }
@@ -207,26 +413,60 @@
      */
     public static class QueryInvoker extends GDataBindingInvoker {
 
-        public QueryInvoker(Operation operation, String uri, GoogleService service) {
-            super(operation, uri, service);
+        public QueryInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
+            super(operation, binding, httpClient, authorizationHeader);
         }
 
         @Override
         public Message invoke(Message msg) {
-            try {
+            
+            BaseFeed feed;
+            GetMethod getMethod = null;
+            boolean parsing = false;
 
-                String strQuery = (String) ((Object[]) msg.getBody())[0];
+            String queryString = (String) ((Object[]) msg.getBody())[0];
 
-                Query query = new Query(new URL(uri));
-                query.setFullTextQuery(strQuery);
-                Feed feed = service.query(query, Feed.class);
-                msg.setBody(feed);
-
-            } catch (IOException ex) {
-                msg.setFaultBody(new ServiceRuntimeException(ex));
-            } catch (ServiceException ex) {
+            try {
+                // serviceType == "sca" - Send an HTTP GET
+                if (service == null) {
+                    getMethod = new GetMethod(binding.getURI());
+                    getMethod.setRequestHeader("Authorization", authorizationHeader);
+                    getMethod.setQueryString(queryString);
+
+                    httpClient.executeMethod(getMethod);
+                    int status = getMethod.getStatusCode();
+
+                    // Read the Atom feed
+                    if (status == 200) {
+
+                        parsing = true;
+
+                        ParseSource parser = new ParseSource(getMethod.getResponseBodyAsStream());
+                        feed = BaseFeed.readFeed(parser);
+
+                        msg.setBody(feed);
+
+                    } else if (status == 404) {
+                        msg.setFaultBody(new NotFoundException());
+                    } else {
+                        msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
+                    }
+
+                } // serviceType != "sca" - Use GoogleService
+                else {
+                    Query query = new Query(new URL(binding.getURI()));
+                    query.setFullTextQuery(queryString);
+                    feed = service.query(query, Feed.class);
+                    msg.setBody(feed);
+                }
+            } catch (ResourceNotFoundException ex) {
+                msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
+            } catch (Exception ex) {
                 msg.setFaultBody(new ServiceRuntimeException(ex));
             } finally {
+                if (service == null && !parsing) {
+                    getMethod.releaseConnection();
+                }
                 return msg;
             }
         }
@@ -237,8 +477,8 @@
      */
     public static class PostMediaInvoker extends GDataBindingInvoker {
 
-        public PostMediaInvoker(Operation operation, String uri, GoogleService service) {
-            super(operation, uri, service);
+        public PostMediaInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
+            super(operation, binding, httpClient, authorizationHeader);
         }
 
         @Override
@@ -253,8 +493,8 @@
      */
     public static class PutMediaInvoker extends GDataBindingInvoker {
 
-        public PutMediaInvoker(Operation operation, String uri, GoogleService service) {
-            super(operation, uri, service);
+        public PutMediaInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
+            super(operation, binding, httpClient, authorizationHeader);
         }
 
         @Override

Modified: tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataBindingProviderFactory.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataBindingProviderFactory.java?rev=684281&r1=684280&r2=684281&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataBindingProviderFactory.java (original)
+++ tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataBindingProviderFactory.java Sat Aug  9 08:56:52 2008
@@ -65,10 +65,7 @@
     public ServiceBindingProvider createServiceBindingProvider(RuntimeComponent component,
                                                                RuntimeComponentService service,
                                                                GDataBinding binding) {
-        //return new AtomServiceBindingProvider(component, service, binding, servletHost, messageFactory, mediator);
-        
-        //FIXME - To implement AtomServiceBindingProvider
-        return null;
+        return new GDataServiceBindingProvider(component, service, binding, servletHost, messageFactory, mediator);
     }
 
     public Class<GDataBinding> getModelType() {

Modified: tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataReferenceBindingProvider.java?rev=684281&r1=684280&r2=684281&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataReferenceBindingProvider.java (original)
+++ tuscany/java/sca/modules/binding-gdata-runtime/src/main/java/org/apache/tuscany/sca/binding/gdata/provider/GDataReferenceBindingProvider.java Sat Aug  9 08:56:52 2008
@@ -18,8 +18,6 @@
  */
 package org.apache.tuscany.sca.binding.gdata.provider;
 
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 import org.apache.tuscany.sca.binding.gdata.GDataBinding;
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
@@ -28,9 +26,14 @@
 import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
 import org.apache.tuscany.sca.runtime.RuntimeComponent;
 import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
-
-import com.google.gdata.client.GoogleService;
-import com.google.gdata.util.AuthenticationException;
+import org.apache.commons.httpclient.HttpClient;
+import java.net.URI;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.httpclient.Credentials;
+import org.apache.commons.httpclient.HttpConnectionManager;
+import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
 
 /**
  * Implementation of the Atom binding provider.
@@ -41,7 +44,8 @@
 
     private RuntimeComponentReference reference;
     private GDataBinding binding;
-    private GoogleService service;
+    private HttpClient httpClient;
+    private String authorizationHeader;
 
     /**
      * Constructs a new AtomReferenceBindingProvider
@@ -56,41 +60,42 @@
         this.reference = reference;
         this.binding = binding;
 
-        //FIXME - Handling only calendar
-        this.service = new GoogleService("cl", "");
-        
-        try {
-            //FIXME - Get credentials automatically
-            service.setUserCredentials("gsocstudent2008@gmail.com", "gsoc2008");
-        } catch (AuthenticationException ex) {
-            Logger.getLogger(GDataReferenceBindingProvider.class.getName()).log(Level.SEVERE, null, ex);
-        }
+        // Prepare authorization header
+        //String authorization = "admin" + ":" + "admin";
+        String authorization = "gsocstudent2008" + ":" + "gsoc2008";
+        authorizationHeader = "Basic " + new String(Base64.encodeBase64(authorization.getBytes()));
         
-        this.service.setConnectTimeout(60000);
+        // Create an HTTP client
+        HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
+        connectionManager.getParams().setDefaultMaxConnectionsPerHost(10);
+        connectionManager.getParams().setConnectionTimeout(60000);
+        httpClient = new HttpClient(connectionManager);
     }
 
+
+
     public Invoker createInvoker(Operation operation) {
 
         String operationName = operation.getName();
         if (operationName.equals("get")) {
-            return new GDataBindingInvoker.GetInvoker(operation, binding.getURI(), service);
+            return new GDataBindingInvoker.GetInvoker(operation, binding, httpClient, authorizationHeader);
         } else if (operationName.equals("post")) {
-            return new GDataBindingInvoker.PostInvoker(operation, binding.getURI(), service);
+            return new GDataBindingInvoker.PostInvoker(operation, binding, httpClient, authorizationHeader);
         } else if (operationName.equals("put")) {
-            return new GDataBindingInvoker.PutInvoker(operation, binding.getURI(), service);
+            return new GDataBindingInvoker.PutInvoker(operation, binding, httpClient, authorizationHeader);
         } else if (operationName.equals("delete")) {
-            return new GDataBindingInvoker.DeleteInvoker(operation, binding.getURI(), service);
+            return new GDataBindingInvoker.DeleteInvoker(operation, binding, httpClient, authorizationHeader);
         } else if (operationName.equals("getFeed") || operationName.equals("getAll")) {
-            return new GDataBindingInvoker.GetAllInvoker(operation, binding.getURI(), service);
+            return new GDataBindingInvoker.GetAllInvoker(operation, binding, httpClient, authorizationHeader);
         } else if (operationName.equals("postMedia")) {
-            return new GDataBindingInvoker.PostMediaInvoker(operation, binding.getURI(), service);
+            return new GDataBindingInvoker.PostMediaInvoker(operation, binding, httpClient, authorizationHeader);
         } else if (operationName.equals("putMedia")) {
-            return new GDataBindingInvoker.PutMediaInvoker(operation, binding.getURI(), service);
+            return new GDataBindingInvoker.PutMediaInvoker(operation, binding, httpClient, authorizationHeader);
         } else if (operationName.equals("query")) {
-            return new GDataBindingInvoker.QueryInvoker(operation, binding.getURI(), service);
+            return new GDataBindingInvoker.QueryInvoker(operation, binding, httpClient, authorizationHeader);
         }
 
-        return new GDataBindingInvoker(operation, binding.getURI(), service);
+        return new GDataBindingInvoker(operation, binding, httpClient, authorizationHeader);
     }
 
     public InterfaceContract getBindingInterfaceContract() {
@@ -98,6 +103,17 @@
     }
 
     public void start() {
+        // Configure the HTTP client credentials
+        //Credentials credentials = new UsernamePasswordCredentials("admin", "admin");
+        Credentials credentials = new UsernamePasswordCredentials("gsocstudent2008", "gsoc2008");
+        httpClient.getParams().setAuthenticationPreemptive(true);
+        URI uri = URI.create(binding.getURI());
+        httpClient.getState().setCredentials(new AuthScope(uri.getHost(), uri.getPort()), credentials);
+
+        // Find the get operation on the reference interface
+        if (true) {
+            return;
+        }
     }
 
     public void stop() {

Modified: tuscany/java/sca/modules/binding-gdata-runtime/src/test/resources/org/apache/tuscany/sca/binding/gdata/Consumer.composite
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-gdata-runtime/src/test/resources/org/apache/tuscany/sca/binding/gdata/Consumer.composite?rev=684281&r1=684280&r2=684281&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-gdata-runtime/src/test/resources/org/apache/tuscany/sca/binding/gdata/Consumer.composite (original)
+++ tuscany/java/sca/modules/binding-gdata-runtime/src/test/resources/org/apache/tuscany/sca/binding/gdata/Consumer.composite Sat Aug  9 08:56:52 2008
@@ -23,9 +23,9 @@
 	   name="Consumer">
     
     <component name="CustomerClient">
-        <implementation.java class="org.apache.tuscany.sca.binding.gdata.CustomerClientImpl"/>
+        <implementation.java class="org.apache.tuscany.sca.binding.gdata.consumerprovider.CustomerClientImpl"/>
         <reference name="resourceCollection">
-        	<tuscany:binding.gdata uri="http://www.google.com/calendar/feeds/gsocstudent2008@gmail.com/private/full"/>
+        	<tuscany:binding.gdata uri="http://localhost:8086/customer"  username="gsocstudent2008" password="gsoc2008" serviceType="sca"/>
         </reference>
     </component>