You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2012/02/01 19:49:12 UTC

svn commit: r1239261 [2/2] - in /abdera/abdera2: ./ activities/src/main/java/org/apache/abdera2/activities/client/ activities/src/main/java/org/apache/abdera2/activities/extra/ client/src/main/java/org/apache/abdera2/protocol/client/ common/ common/src...

Added: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestOptions.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestOptions.java?rev=1239261&view=auto
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestOptions.java (added)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestOptions.java Wed Feb  1 18:49:11 2012
@@ -0,0 +1,602 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.abdera2.common.protocol;
+
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.activation.MimeType;
+
+import org.apache.abdera2.common.Localizer;
+import org.apache.abdera2.common.lang.Lang;
+import org.apache.abdera2.common.misc.ExceptionHelper;
+import org.apache.abdera2.common.misc.MoreFunctions;
+import org.apache.abdera2.common.selector.AbstractSelector;
+import org.apache.abdera2.common.selector.Selector;
+import org.apache.abdera2.common.text.Codec;
+import org.apache.abdera2.common.text.UrlEncoding;
+import org.apache.abdera2.common.text.CharUtils.Profile;
+import org.apache.abdera2.common.date.DateTimes;
+import org.apache.abdera2.common.http.Authentication;
+import org.apache.abdera2.common.http.CacheControl;
+import org.apache.abdera2.common.http.EntityTag;
+import org.apache.abdera2.common.http.Preference;
+import org.apache.abdera2.common.http.WebLink;
+import org.apache.http.impl.cookie.DateParseException;
+import org.apache.http.impl.cookie.DateUtils;
+import org.joda.time.DateTime;
+
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+
+/**
+ * The RequestOptions class allows a variety of options affecting the execution of the request to be modified.
+ */
+public class RequestOptions extends AbstractRequest implements Request {
+
+  public static Builder make() {
+    return new Builder();
+  }
+  
+  public static Builder make(DateTime ifModifiedSince) {
+    return make().ifModifiedSince(ifModifiedSince);
+  }
+
+  public static Builder make(String ifNoneMatch) {
+    return make().ifNoneMatch(ifNoneMatch);
+  }
+
+  public static Builder make(String etag, String... ifNoneMatch) {
+    return make().ifNoneMatch(etag, ifNoneMatch);
+  }
+
+  public static Builder make(DateTime ifModifiedSince, String ifNoneMatch) {
+    return make()
+      .ifModifiedSince(ifModifiedSince)
+      .ifNoneMatch(ifNoneMatch);
+  }
+
+  public static Builder make(DateTime ifModifiedSince, String etag, String... ifNoneMatch) {
+    return make()
+      .ifModifiedSince(ifModifiedSince)
+      .ifNoneMatch(etag, ifNoneMatch);
+  }
+
+  public static Builder make(boolean no_cache) {
+    return make().cacheControl(CacheControl.NOCACHE());
+  }
+  
+  public Builder template() {
+    return new Builder(this);
+  }
+  
+  public Builder template(Selector<Map.Entry<String, Set<String>>> filter) {
+    return new Builder(this,filter);
+  }
+  
+  public static Selector<Map.Entry<String, Set<String>>> withAllHeaders() {
+    return new AbstractSelector<Map.Entry<String, Set<String>>>() {
+      public boolean select(Object item) {
+        return true;
+      }
+    };
+  }
+  
+  public static Selector<Map.Entry<String, Set<String>>> withNoHeaders() {
+    return new AbstractSelector<Map.Entry<String, Set<String>>>() {
+      public boolean select(Object item) {
+        return false;
+      }
+    };
+  }
+  
+  @SuppressWarnings("unchecked")
+  public static Selector<Map.Entry<String, Set<String>>> withHeaders(String... names) {
+    final ImmutableSet<String> set = ImmutableSet.copyOf(names);
+    return new AbstractSelector<Map.Entry<String, Set<String>>>() {
+      public boolean select(Object item) {
+        Map.Entry<String, Set<String>> entry = 
+          (Entry<String, Set<String>>) item;
+        return set.contains(entry.getKey());
+      }
+    };
+  }
+  
+  @SuppressWarnings("unchecked")
+  public static Selector<Map.Entry<String, Set<String>>> withoutHeaders(String... names) {
+    final ImmutableSet<String> set = ImmutableSet.copyOf(names);
+    return new AbstractSelector<Map.Entry<String, Set<String>>>() {
+      public boolean select(Object item) {
+        Map.Entry<String, Set<String>> entry = 
+          (Entry<String, Set<String>>) item;
+        return !set.contains(entry.getKey());
+      }
+    };
+  }
+  
+  
+  public static class Builder implements Supplier<RequestOptions> {
+
+    boolean revalidateAuth = false;
+    boolean useChunked = false;
+    boolean usePostOverride = false;
+    boolean requestException4xx = false;
+    boolean requestException5xx = false;
+    boolean useExpectContinue = true;
+    boolean useConditional = true;
+    boolean followRedirects = true;
+    CacheControl cacheControl = null;
+    int waitForContinue = -1;
+    
+    final Map<String, ImmutableSet.Builder<String>> headers = 
+      Maps.newHashMap();
+    
+    public Builder() {}
+    
+    Builder(RequestOptions template) {
+      this(template,null);
+    }
+    
+    Builder(RequestOptions template,Selector<Map.Entry<String, Set<String>>> filter) {
+      this.revalidateAuth = template.revalidateAuth;
+      this.followRedirects = template.followRedirects;
+      this.cacheControl = template.cacheControl;
+      this.useChunked = template.useChunked;
+      this.usePostOverride = template.usePostOverride;
+      this.requestException4xx = template.requestException4xx;
+      this.requestException5xx = template.requestException5xx;
+      this.useExpectContinue = template.useExpectContinue;
+      this.useConditional = template.useConditional;
+      this.waitForContinue = template.waitForContinue;
+      for (Map.Entry<String, Set<String>> header : template.headers.entrySet()) {
+        if (filter == null || filter.apply(header)) {
+          ImmutableSet.Builder<String> builder = ImmutableSet.builder();
+          builder.addAll(header.getValue());
+          this.headers.put(header.getKey(),builder);
+        }
+      }
+    }
+    
+    public Builder revalidateAuth() {
+      this.revalidateAuth = true;
+      return this;
+    }
+    
+    public Builder useChunked() {
+      this.useChunked = true;
+      return this;
+    }
+    
+    public Builder usePostOverride() {
+      this.usePostOverride = true;
+      return this;
+    }
+    
+    public Builder requestException4xx() {
+      this.requestException4xx = true;
+      return this;
+    }
+    
+    public Builder requestException5xx() {
+      this.requestException5xx = true;
+      return this;
+    }
+    
+    public Builder doNotUseExpectContinue() {
+      this.useExpectContinue = false;
+      return this;
+    }
+    
+    public Builder waitForContinue(int millis) {
+      this.waitForContinue = millis;
+      return this;
+    }
+    
+    public Builder doNotFollowRedirects() {
+      this.followRedirects = false;
+      return this;
+    }
+    
+    public Builder contentType(String value) {
+      return header("Content-Type", value);
+    }
+
+    public Builder contentType(MimeType value) {
+      return header("Content-Type", value.toString());
+    }
+    
+    public Builder contentLocation(String iri) {
+      return header("Content-Location", iri);
+    }
+
+    public Builder setAuthorization(String auth) {
+      return header("Authorization", auth);
+    }
+
+    public Builder setAuthorization(Authentication auth) {
+      return header("Authorization",auth.toString());
+    }
+    
+    public Builder encodedHeader(String header, String charset, String value) {
+      return header(header, Codec.encode(value, charset));
+    }
+
+    public Builder encodedHeader(String header, String charset, String... values) {
+      if (values != null && values.length > 0) {
+        ImmutableSet.Builder<String> vals = headers.get(header);
+        if (vals == null) {
+          vals = ImmutableSet.builder();
+          headers.put(header, vals);
+        }
+        for (String value : values) 
+          vals.add(Codec.encode(value,charset));
+      }
+      return this;
+    }
+
+    public Builder header(String header, String value) {
+      if (value != null)
+        header(header, MoreFunctions.array(value));
+      return this;
+    }
+
+    public Builder header(String header, String... values) {
+      if (values != null && values.length > 0) {
+        ImmutableSet.Builder<String> vals = headers.get(header);
+        if (vals == null) {
+          vals = ImmutableSet.builder();
+          headers.put(header, vals);
+        }
+        vals.add(combine(values));
+      }
+      return this;
+    }
+
+    public Builder dateHeader(
+      String header, 
+      DateTime value) {
+      if (value != null)
+        header(header, DateUtils.formatDate(value.toDate()));
+      return this;
+    }
+
+    private String combine(String... values) {
+      StringBuilder v = new StringBuilder();
+      for (String val : values) {
+          if (v.length() > 0)
+              v.append(", ");
+          v.append(val);
+      }
+      return v.toString();
+    }
+
+    public Builder ifMatch(EntityTag entity_tag) {
+        return header("If-Match", entity_tag.toString());
+    }
+
+    /**
+     * Sets the value of the HTTP If-Match header
+     */
+    public Builder ifMatch(EntityTag tag, EntityTag... entity_tags) {
+        return header("If-Match", EntityTag.toString(tag,entity_tags));
+    }
+
+    /**
+     * Sets the value of the HTTP If-Match header
+     */
+    public Builder ifMatch(String etag, String... entity_tags) {
+        return header("If-Match", EntityTag.toString(etag, entity_tags));
+    }
+
+    /**
+     * Sets the value of the HTTP If-None-Match header
+     */
+    public Builder ifNoneMatch(String entity_tag) {
+        return ifNoneMatch(new EntityTag(entity_tag));
+    }
+
+    /**
+     * Sets the value of the HTTP If-None-Match header
+     */
+    public Builder ifNoneMatch(EntityTag entity_tag) {
+        return header("If-None-Match", entity_tag.toString());
+    }
+
+    /**
+     * Sets the value of the HTTP If-None-Match header
+     */
+    public Builder ifNoneMatch(EntityTag etag, EntityTag... entity_tags) {
+        return header("If-None-Match", EntityTag.toString(etag, entity_tags));
+    }
+
+    /**
+     * Sets the value of the HTTP If-None-Match header
+     */
+    public Builder ifNoneMatch(String etag, String... entity_tags) {
+        return header("If-None-Match", EntityTag.toString(etag, entity_tags));
+    }
+
+    /**
+     * Sets the value of the HTTP If-Modified-Since header
+     */
+    public Builder ifModifiedSince(DateTime date) {
+        return dateHeader("If-Modified-Since", date);
+    }
+    
+    public Builder ifModifiedSinceNow() {
+      return ifModifiedSince(DateTimes.now());
+    }
+
+    /**
+     * Sets the value of the HTTP If-Unmodified-Since header
+     */
+    public Builder ifUnmodifiedSince(DateTime date) {
+        return dateHeader("If-Unmodified-Since", date);
+    }
+
+    /**
+     * Sets the value of the HTTP Accept header
+     */
+    public Builder accept(String accept) {
+      return accept(new String[] {accept});
+    }
+
+    /**
+     * Sets the value of the HTTP Accept header
+     */
+    public Builder accept(String... accept) {
+      return header("Accept", combine(accept));
+    }
+
+    public Builder acceptLanguage(Locale locale) {
+      return acceptLanguage(Lang.fromLocale(locale));
+    }
+
+    public Builder acceptLanguage(Locale... locales) {
+      String[] langs = new String[locales.length];
+      for (int n = 0; n < locales.length; n++)
+          langs[n] = Lang.fromLocale(locales[n]);
+      acceptLanguage(langs);
+      return this;
+    }
+
+    /**
+     * Sets the value of the HTTP Accept-Language header
+     */
+    public Builder acceptLanguage(String accept) {
+        return acceptLanguage(new String[] {accept});
+    }
+
+    /**
+     * Sets the value of the HTTP Accept-Language header
+     */
+    public Builder acceptLanguage(String... accept) {
+      return header("Accept-Language", combine(accept));
+    }
+
+    /**
+     * Sets the value of the HTTP Accept-Charset header
+     */
+    public Builder acceptCharset(String accept) {
+      return acceptCharset(new String[] {accept});
+    }
+
+    /**
+     * Sets the value of the HTTP Accept-Charset header
+     */
+    public Builder acceptCharset(String... accept) {
+        return header("Accept-Charset", combine(accept));
+    }
+
+    /**
+     * Sets the value of the HTTP Accept-Encoding header
+     */
+    public Builder acceptEncoding(String accept) {
+        return acceptEncoding(new String[] {accept});
+    }
+
+    /**
+     * Sets the value of the HTTP Accept-Encoding header
+     */
+    public Builder acceptEncoding(String... accept) {
+        return header("Accept-Encoding", combine(accept));
+    }
+
+    /**
+     * Sets the value of the Atom Publishing Protocol Slug header
+     */
+    public Builder slug(String slug) {
+        if (slug.indexOf((char)10) > -1 || slug.indexOf((char)13) > -1)
+            throw new IllegalArgumentException(Localizer.get("SLUG.BAD.CHARACTERS"));
+        return header("Slug", UrlEncoding.encode(slug, Profile.PATHNODELIMS));
+    }
+
+    public Builder cacheControl(String cc) {
+      this.cacheControl = CacheControl.parse(cc);
+      return this;
+    }
+
+    public Builder cacheControl(CacheControl cc) {
+      this.cacheControl = cc;
+      return this;
+    }
+    
+    public Builder ifMatch(String entity_tag) {
+        return ifMatch(new EntityTag(entity_tag));
+    }    
+    
+    public Builder webLinks(WebLink weblink, WebLink... links) {
+      header("Link", WebLink.toString(weblink,links));
+      return this;
+    }
+    
+    public Builder prefer(Preference pref, Preference... prefs) {
+      header("Prefer", Preference.toString(pref, prefs));
+      return this;
+    }
+    
+    public RequestOptions get() {
+      ImmutableMap.Builder<String,Set<String>> actuals =
+        ImmutableMap.builder();
+      for (Map.Entry<String, ImmutableSet.Builder<String>> header : headers.entrySet())
+        actuals.put(header.getKey(), header.getValue().build());
+      return new RequestOptions(this,actuals.build());
+    }
+    
+  }
+  
+    final boolean revalidateAuth;
+    final boolean useChunked;
+    final boolean usePostOverride;
+    final boolean requestException4xx;
+    final boolean requestException5xx;
+    final boolean useExpectContinue;
+    final boolean useConditional;
+    final boolean followRedirects;
+    final CacheControl cacheControl;
+    final ImmutableMap<String, Set<String>> headers;
+    final int waitForContinue;
+
+    RequestOptions(Builder builder,ImmutableMap<String,Set<String>> headers) {
+      this.revalidateAuth = builder.revalidateAuth;
+      this.useChunked = builder.useChunked;
+      this.usePostOverride = builder.usePostOverride;
+      this.requestException4xx = builder.requestException4xx;
+      this.requestException5xx = builder.requestException5xx;
+      this.useConditional = builder.useConditional;
+      this.useExpectContinue = builder.useExpectContinue;
+      this.followRedirects = builder.followRedirects;
+      this.cacheControl = builder.cacheControl;
+      this.headers = headers;
+      this.waitForContinue = builder.waitForContinue;
+    }
+
+    private Map<String, Set<String>> getHeaders() {
+        return headers;
+    }
+
+    /**
+     * Returns the text value of the specified header
+     */
+    public String getHeader(String header) {
+        Set<String> list = getHeaders().get(header);
+        return list.size() > 0 ? list.iterator().next() : null;
+    }
+
+    /**
+     * Return a listing of text values for the specified header
+     */
+    public Iterable<Object> getHeaders(String header) {
+      return ImmutableSet.<Object>copyOf(getHeaders().get(header));
+    }
+
+    /**
+     * Returns the date value of the specified header
+     */
+    public DateTime getDateHeader(String header) {
+      String val = getHeader(header);
+      try {
+          return (val != null) ? new DateTime(DateUtils.parseDate(val)) : null;
+      } catch (DateParseException e) {
+        throw ExceptionHelper.propogate(e);
+      }
+    }
+
+    /**
+     * Returns a listing of header names
+     */
+    public Iterable<String> getHeaderNames() {
+      return getHeaders().keySet();
+    }
+
+    /**
+     * Return the value of the Cache-Control header
+     */
+    public CacheControl getCacheControl() {
+        return cacheControl;
+    }
+
+    /**
+     * Configure the AbderaClient Side cache to revalidate when using Authorization
+     */
+    public boolean getRevalidateWithAuth() {
+        return revalidateAuth;
+    }
+
+    /**
+     * Should the request use chunked encoding?
+     */
+    public boolean isUseChunked() {
+        return useChunked;
+    }
+
+    /**
+     * Return whether the request should use the X-HTTP-Method-Override option
+     */
+    public boolean isUsePostOverride() {
+        return this.usePostOverride;
+    }
+
+    /**
+     * Return true if a RequestException should be thrown on 4xx responses
+     */
+    public boolean is4xxRequestException() {
+        return this.requestException4xx;
+    }
+
+    /**
+     * Return true if a RequestException should be thrown on 5xx responses
+     */
+    public boolean is5xxRequestException() {
+        return this.requestException5xx;
+    }
+
+    /**
+     * Return true if Expect-Continue should be used
+     */
+    public boolean isUseExpectContinue() {
+        return this.useExpectContinue;
+    }
+
+    /**
+     * True if HTTP Conditional Requests should be used automatically. This only has an effect when putting a Document
+     * that has an ETag or Last-Modified date present
+     */
+    public boolean isConditionalPut() {
+        return this.useConditional;
+    }
+
+    /**
+     * True if the client should follow redirects automatically
+     */
+    public boolean isFollowRedirects() {
+        return followRedirects;
+    }
+    
+    public boolean has(String header) {
+      return headers.containsKey(header);
+    }
+    
+    public int getWaitForContinue() {
+      return waitForContinue;
+    }
+}

Propchange: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/RequestOptions.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Session.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Session.java?rev=1239261&view=auto
==============================================================================
--- abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Session.java (added)
+++ abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Session.java Wed Feb  1 18:49:11 2012
@@ -0,0 +1,916 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.abdera2.common.protocol;
+
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+
+import org.apache.abdera2.common.http.Method;
+import org.apache.abdera2.common.http.ResponseType;
+import org.apache.abdera2.common.misc.ExceptionHelper;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpHost;
+import org.apache.http.HttpResponse;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.client.AuthCache;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.client.protocol.ClientContext;
+import org.apache.http.entity.InputStreamEntity;
+import org.apache.http.impl.auth.BasicScheme;
+import org.apache.http.impl.client.BasicAuthCache;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.protocol.BasicHttpContext;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.protocol.HttpContext;
+import org.apache.http.util.EntityUtils;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+
+/**
+ * A client session. Session's MUST NOT be used by more
+ * than one Thread of execution as a time as multiple threads would stomp 
+ * all over the shared session context. It is critical to completely
+ * consume each ClientResponse before executing an additional request on 
+ * the same session.
+ */
+@SuppressWarnings("unchecked")
+public class Session {
+
+    protected final Client client;
+    protected final HttpContext localContext;
+
+    protected Session(Client client) {
+        this.client = client;
+        this.localContext = 
+          new BasicHttpContext();
+    }
+    
+    private HttpClient getClient() {
+      return client.getClient();
+    }
+    
+    protected <T extends ClientResponse>T wrap(ClientResponse resp) {
+      return (T)resp;
+    }
+    
+    /**
+     * Sends an HTTP GET request to the specified URI.
+     * 
+     * @param uri The request URI
+     * @param options The request options
+     */
+    public <T extends ClientResponse>T get(String uri, RequestOptions options) {
+        return (T)wrap(execute("GET", uri, (HttpEntity)null, options));
+    }
+    
+    public <T extends ClientResponse>Callable<T> getTask(
+      final String uri) {
+      return new Callable<T>() {
+        public T call() throws Exception {
+          return (T) get(uri);
+        }
+      };
+    }
+    
+    public <T extends ClientResponse>Callable<T> getTask(
+      final String uri, 
+      final RequestOptions options) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) get(uri,options);
+          }
+        };
+    }
+
+    /**
+     * Sends an HTTP POST request to the specified URI.
+     * 
+     * @param uri The request URI
+     * @param entity A RequestEntity object providing the payload of the request
+     * @param options The request options
+     */
+    public <T extends ClientResponse>T post(
+      String uri, 
+      HttpEntity entity, 
+      RequestOptions options) {
+      return (T)wrap(execute("POST", uri, entity, options));
+    }
+    
+    public <T extends ClientResponse>Callable<T> postTask(
+      final String uri, 
+      final HttpEntity entity) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) post(uri,entity);
+          }
+        };
+    }
+    
+    public <T extends ClientResponse>Callable<T> postTask(
+      final String uri, 
+      final HttpEntity entity, 
+      final RequestOptions options) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) post(uri,entity,options);
+          }
+        };
+    }
+
+    /**
+     * Sends an HTTP POST request to the specified URI.
+     * 
+     * @param uri The request URI
+     * @param in An InputStream providing the payload of the request
+     * @param options The request options
+     */
+    public <T extends ClientResponse>T post(String uri, InputStream in, RequestOptions options) {
+        return (T)wrap(execute("POST", uri, new InputStreamEntity(in,-1), options));
+    }
+    
+    public <T extends ClientResponse>Callable<T> postTask(
+      final String uri, 
+      final InputStream in) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) post(uri,in);
+          }
+        };
+    }
+    
+    public <T extends ClientResponse>Callable<T> postTask(
+      final String uri, 
+      final InputStream in, 
+      final RequestOptions options) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) post(uri,in,options);
+          }
+        };
+    }
+
+    /**
+     * Sends an HTTP PUT request to the specified URI.
+     * 
+     * @param uri The request URI
+     * @param entity A RequestEntity object providing the payload of the request
+     * @param options The request options
+     */
+    public <T extends ClientResponse>T put(String uri, HttpEntity entity, RequestOptions options) {
+        return (T)wrap(execute("PUT", uri, entity, options));
+    }
+
+    public <T extends ClientResponse>Callable<T> putTask(
+      final String uri, 
+      final HttpEntity entity) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) put(uri,entity);
+          }
+        };
+    }
+    
+    public <T extends ClientResponse>Callable<T> putTask(
+      final String uri, 
+      final HttpEntity entity, 
+      final RequestOptions options) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) put(uri,entity,options);
+          }
+        };
+    }
+
+    /**
+     * Sends an HTTP PUT request to the specified URI.
+     * 
+     * @param uri The request URI
+     * @param in An InputStream providing the payload of the request
+     * @param options The request options
+     */
+    public <T extends ClientResponse>T put(String uri, InputStream in, RequestOptions options) {
+        return (T)wrap(execute("PUT", uri, new InputStreamEntity(in,-1), options));
+    }
+    
+    public <T extends ClientResponse>Callable<T> putTask(
+        final String uri, 
+        final InputStream in) {
+          return new Callable<T>() {
+            public T call() throws Exception {
+              return (T) put(uri,in);
+            }
+          };
+      }
+    
+    public <T extends ClientResponse>Callable<T> putTask(
+      final String uri, 
+      final InputStream in, 
+      final RequestOptions options) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) put(uri,in,options);
+          }
+        };
+    }
+
+    /**
+     * Sends an HTTP DELETE request to the specified URI.
+     * 
+     * @param uri The request URI
+     * @param options The request options
+     */
+    public <T extends ClientResponse>T delete(String uri, RequestOptions options) {
+        return (T)wrap(execute("DELETE", uri, (HttpEntity)null, options));
+    }
+    
+    public <T extends ClientResponse>Callable<T> deleteTask(
+      final String uri) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) delete(uri);
+          }
+        };
+    }
+    
+    public <T extends ClientResponse>Callable<T> deleteTask(
+      final String uri,
+      final RequestOptions options) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) delete(uri,options);
+          }
+        };
+    }
+
+    /**
+     * Sends an HTTP HEAD request to the specified URI using the default options
+     * 
+     * @param uri The request URI
+     */
+    public <T extends ClientResponse>T head(String uri) {
+        return (T)wrap(head(uri, getDefaultRequestOptions().get()));
+    }
+    
+    public <T extends ClientResponse>Callable<T> headTask(
+        final String uri) {
+          return new Callable<T>() {
+            public T call() throws Exception {
+              return (T) head(uri);
+            }
+          };
+      }
+    
+    public <T extends ClientResponse>Callable<T> headTask(
+      final String uri,
+      final RequestOptions options) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) head(uri,options);
+          }
+        };
+    }
+    
+    /**
+     * Sends an HTTP HEAD request to the specified URI
+     * 
+     * @param uri The request URI
+     */
+    public <T extends ClientResponse>T head(String uri, RequestOptions options) {
+       return (T)wrap(execute("HEAD", uri, (HttpEntity)null, options));
+    }
+
+    /**
+     * Sends an HTTP GET request to the specified URI using the default options
+     * 
+     * @param uri The request URI
+     */
+    public <T extends ClientResponse>T get(String uri) {
+        return (T)wrap(get(uri, getDefaultRequestOptions().get()));
+    }
+
+    /**
+     * Sends an HTTP POST request to the specified URI using the default options
+     * 
+     * @param uri The request URI
+     * @param entity A RequestEntity object providing the payload of the request
+     */
+    public <T extends ClientResponse>T post(String uri, HttpEntity entity) {
+        return (T)wrap(post(uri, entity, getDefaultRequestOptions().get()));
+    }
+
+    /**
+     * Sends an HTTP POST request to the specified URI using the default options
+     * 
+     * @param uri The request URI
+     * @param in An InputStream providing the payload of the request
+     */
+    public <T extends ClientResponse>T post(String uri, InputStream in) {
+        return (T)wrap(post(uri, in, getDefaultRequestOptions().get()));
+    }
+
+    /**
+     * Sends an HTTP PUT request to the specified URI using the default options
+     * 
+     * @param uri The request URI
+     * @param entity A RequestEntity object providing the payload of the request
+     */
+    public <T extends ClientResponse>T put(String uri, HttpEntity entity) {
+        return (T)wrap(put(uri, entity, getDefaultRequestOptions().get()));
+    }
+
+    /**
+     * Sends an HTTP PUT request to the specified URI using the default options
+     * 
+     * @param uri The request URI
+     * @param in An InputStream providing the payload of the request
+     */
+    public <T extends ClientResponse>T put(String uri, InputStream in) {
+        return (T)wrap(put(uri, in, getDefaultRequestOptions().get()));
+    }
+
+    /**
+     * Sends an HTTP DELETE request to the specified URI using the default options
+     * 
+     * @param uri The request URI
+     */
+    public <T extends ClientResponse>T delete(String uri) {
+        return (T)wrap(delete(uri, getDefaultRequestOptions().get()));
+    }
+    
+    /**
+     * Sends the specified method request to the specified URI. This can be used to send extension HTTP methods to a
+     * server (e.g. PATCH, LOCK, etc)
+     * 
+     * @param method The HTTP method
+     * @param uri The request URI
+     * @param in An InputStream providing the payload of the request
+     * @param options The Request Options
+     */
+    public <T extends ClientResponse>T execute(
+        String method, 
+        String uri, 
+        InputStream in, 
+        RequestOptions options) {
+        if (options == null)
+          options = getDefaultRequestOptions().get();
+        InputStreamEntity re = 
+          new InputStreamEntity(in, -1);
+        re.setContentType(
+          options.getContentType().toString());
+        return (T)wrap(execute(
+          method, uri, re, options));
+    }
+    
+    public <T extends ClientResponse>Callable<T> executeTask(
+      final String method, 
+      final String uri, 
+      final InputStream in, 
+      final RequestOptions options) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) execute(method,uri,in,options);
+          }
+        };
+    }
+    
+    /**
+     * Sends the specified method request to the specified URI. This can be used to send extension HTTP methods to a
+     * server (e.g. PATCH, LOCK, etc)
+     * 
+     * @param method The HTTP method
+     * @param uri The request URI
+     * @param in An InputStream providing the payload of the request
+     * @param options The Request Options
+     */
+    public <T extends ClientResponse>T execute(
+        Method method, 
+        String uri, 
+        InputStream in, 
+        RequestOptions options) {
+        return (T)wrap(execute(method.name(),uri,in,options));
+    }
+    
+    public <T extends ClientResponse>Callable<T> executeTask(
+      final Method method, 
+      final String uri, 
+      final InputStream in, 
+      final RequestOptions options) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) execute(method,uri,in,options);
+          }
+        };
+    }
+
+    public <T extends ClientResponse>T execute(
+        Method method, 
+        String uri, 
+        HttpEntity entity, 
+        RequestOptions options) {
+      return (T)wrap(execute(method.name(),uri,entity,options));
+    }
+    
+    public <T extends ClientResponse>Callable<T> executeTask(
+      final Method method, 
+      final String uri, 
+      final HttpEntity entity, 
+      final RequestOptions options) {
+        return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) execute(method,uri,entity,options);
+          }
+        };
+    }
+    
+    /**
+     * Sends the specified method request to the specified URI. This can be used to send extension HTTP methods to a
+     * server (e.g. PATCH, LOCK, etc)
+     * 
+     * @param method The HTTP method
+     * @param uri The request URI
+     * @param entity A RequestEntity object providing the payload for the request
+     * @param options The Request Options
+     */
+    public <T extends ClientResponse>T execute(
+        String method, 
+        String uri, 
+        HttpEntity entity, 
+        RequestOptions options) {
+        options =
+          options != null ? 
+            options : 
+            getDefaultRequestOptions()
+              .get();
+        try {
+          HttpUriRequest request = 
+            RequestHelper.createRequest(
+                method, uri, entity, options);
+          HttpResponse response = 
+            getClient().execute(request, localContext);
+          ClientResponse resp = 
+            wrap(new ClientResponseImpl(
+              this, response, method, localContext));
+          return (T)checkRequestException(resp, options);
+        } catch (RuntimeException r) {
+            throw r;
+        } catch (Throwable t) {
+            throw new RuntimeException(t);
+        }
+    }
+
+    public <T extends ClientResponse>Callable<T> executeTask(
+      final String method, 
+      final String uri, 
+      final HttpEntity entity, 
+      final RequestOptions options) {
+       return new Callable<T>() {
+          public T call() throws Exception {
+            return (T) execute(method,uri,entity,options);
+          }
+        };
+    }
+    
+    protected <T extends ClientResponse>T checkRequestException(ClientResponse response, RequestOptions options) {
+      if (response == null)
+          return (T)response;
+      ResponseType type = response.getType();
+      if ((type.equals(ResponseType.CLIENT_ERROR) && options.is4xxRequestException()) || (type
+          .equals(ResponseType.SERVER_ERROR) && options.is5xxRequestException())) {
+        throw new ProtocolException(response.getStatus(),response.getStatusText());
+      }
+      return (T)response;
+  }
+    
+    /**
+     * Get a copy of the default request options
+     */
+    public RequestOptions.Builder getDefaultRequestOptions() {
+        return RequestHelper.createAtomDefaultRequestOptions();
+    }
+
+    public void usePreemptiveAuthentication(String target, String realm) throws URISyntaxException {
+        AuthCache cache = (AuthCache) localContext.getAttribute(ClientContext.AUTH_CACHE);
+        if (cache == null) {
+          String host = AuthScope.ANY_HOST;
+          int port = AuthScope.ANY_PORT;
+          if (target != null) {
+            URI uri = new URI(target);
+            host = uri.getHost();
+            port = uri.getPort();
+          }
+          BasicScheme basicAuth = new BasicScheme();
+          HttpHost targetHost = 
+            new HttpHost(host,port,basicAuth.getSchemeName());
+          cache = new BasicAuthCache();
+          cache.put(targetHost, basicAuth);
+          localContext.setAttribute(ClientContext.AUTH_CACHE, cache);
+        }
+    }
+    
+    public boolean doFormLogin(String uri, String userid, String password) {
+      return doFormLogin(uri, "j_username", userid, "j_password", password);
+    }
+    
+    public boolean doFormLogin(String uri, String userfield, String userid, String passfield, String password) {
+      return doFormLogin(uri, userfield, userid, passfield, password, (ImmutableMap<String,String>)null);
+    }
+ 
+    public boolean doFormLogin(
+        String uri, 
+        String userfield, 
+        String userid, 
+        String passfield, 
+        String password,
+        ImmutableMap.Builder<String,String> additional) {
+      return doFormLogin(uri,userfield,userid,passfield,password,additional.build());
+    }
+    
+    public boolean doFormLogin(
+      String uri, 
+      String userfield, 
+      String userid, 
+      String passfield, 
+      String password,
+      ImmutableMap<String,String> additional) {
+      try {
+        HttpPost httpost = new HttpPost(uri);
+        ImmutableList.Builder<BasicNameValuePair> pairs = 
+          ImmutableList.<BasicNameValuePair>builder()
+           .add(new BasicNameValuePair(userfield,userid))
+           .add(new BasicNameValuePair(passfield,password));
+        for (Map.Entry<String, String> entry : additional.entrySet())
+          pairs.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));
+        httpost.setEntity(
+          new UrlEncodedFormEntity(
+            pairs.build(),
+            HTTP.UTF_8));
+        HttpResponse response = getClient().execute(httpost,localContext);
+        HttpEntity entity = response.getEntity();
+        EntityUtils.consume(entity);
+        ResponseType type = ResponseType.select(response.getStatusLine().getStatusCode());
+        return type == ResponseType.SUCCESSFUL;
+      } catch (Throwable t) {
+        throw new RuntimeException(t);
+      }
+    }
+    
+  public static interface Listener<X extends ClientResponse> {
+    void onResponse(X resp);
+  }
+  
+  /**
+   * Processes requests asynchronously.. will return a Future
+   * whose value will be set once the call completes
+   */
+  public <X extends ClientResponse>Future<X> process(
+    ExecutorService executor, 
+    Callable<X> resp) {
+      ListeningExecutorService exec = 
+        MoreExecutors.listeningDecorator(executor);
+      return exec.submit(resp);
+  }
+  
+  /**
+   * Processes requests asynchronously.. the listener will
+   * be invoked once the call completes
+   */
+  public <X extends ClientResponse>void process(
+    ExecutorService executor, 
+    Callable<X> resp, 
+    final Listener<X> listener) {
+      ListeningExecutorService exec = MoreExecutors.listeningDecorator(executor);
+      final ListenableFuture<X> lf = exec.submit(resp);
+      lf.addListener(
+        new Runnable() {
+          public void run() {
+            X resp = null;
+            try {
+              resp = lf.get();
+              listener.onResponse(resp);
+            } catch (Throwable t) {
+              throw ExceptionHelper.propogate(t);
+            } finally { // auto release since by this point we know we're done with it
+              if (resp != null) resp.release();
+            }
+          }
+        }, 
+        executor);
+  }
+  
+  public <T extends ClientResponse>void get(
+    String uri, 
+    ExecutorService exec, 
+    Listener<T> listener) {
+    process(exec,this.<T>getTask(uri),listener);
+  }
+  
+  public <T extends ClientResponse>void get(
+    String uri, 
+    RequestOptions options,
+    ExecutorService exec, 
+    Listener<T> listener) {
+    process(exec,this.<T>getTask(uri,options),listener);
+  }
+  
+  public <T extends ClientResponse>Future<T> get(
+    String uri, 
+    ExecutorService exec) {
+      return process(exec,this.<T>getTask(uri));
+  }
+  
+  public <T extends ClientResponse>Future<T> get(
+    String uri, 
+    RequestOptions options,
+    ExecutorService exec) {
+      return process(exec,this.<T>getTask(uri,options));
+  }
+  
+  public <T extends ClientResponse>void post(
+    String uri, 
+    InputStream in,
+    ExecutorService exec, 
+    Listener<T> listener) {
+    process(exec,this.<T>postTask(uri,in),listener);
+  }
+  
+  public <T extends ClientResponse>void post(
+    String uri, 
+    InputStream in,
+    RequestOptions options,
+    ExecutorService exec, 
+    Listener<T> listener) {
+    process(exec,this.<T>postTask(uri,in,options),listener);
+  }
+  
+  public <T extends ClientResponse>Future<T> post(
+    String uri, 
+    InputStream in,
+    ExecutorService exec) {
+      return process(exec,this.<T>postTask(uri,in));
+  }
+  
+  public <T extends ClientResponse>Future<T> post(
+    String uri, 
+    InputStream in,
+    RequestOptions options,
+    ExecutorService exec) {
+      return process(exec,this.<T>postTask(uri,in,options));
+  }
+  
+  public <T extends ClientResponse>void post(
+    String uri, 
+    HttpEntity in,
+    ExecutorService exec, 
+    Listener<T> listener) {
+    process(exec,this.<T>postTask(uri,in),listener);
+  }
+  
+  public <T extends ClientResponse>void post(
+    String uri, 
+    HttpEntity in,
+    RequestOptions options,
+    ExecutorService exec, 
+    Listener<T> listener) {
+    process(exec,this.<T>postTask(uri,in,options),listener);
+  }
+  
+  public <T extends ClientResponse>Future<T> post(
+    String uri, 
+    HttpEntity in,
+    ExecutorService exec) {
+      return process(exec,this.<T>postTask(uri,in));
+  }
+  
+  public <T extends ClientResponse>Future<T> post(
+    String uri, 
+    HttpEntity in,
+    RequestOptions options,
+    ExecutorService exec) {
+      return process(exec,this.<T>postTask(uri,in,options));
+  }
+
+
+  public <T extends ClientResponse>void put(
+      String uri, 
+      InputStream in,
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>putTask(uri,in),listener);
+    }
+    
+    public <T extends ClientResponse>void put(
+      String uri, 
+      InputStream in,
+      RequestOptions options,
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>putTask(uri,in,options),listener);
+    }
+    
+    public <T extends ClientResponse>Future<T> put(
+      String uri, 
+      InputStream in,
+      ExecutorService exec) {
+        return process(exec,this.<T>putTask(uri,in));
+    }
+    
+    public <T extends ClientResponse>Future<T> put(
+      String uri, 
+      InputStream in,
+      RequestOptions options,
+      ExecutorService exec) {
+        return process(exec,this.<T>putTask(uri,in,options));
+    }
+    
+    public <T extends ClientResponse>void put(
+      String uri, 
+      HttpEntity in,
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>putTask(uri,in),listener);
+    }
+    
+    public <T extends ClientResponse>void put(
+      String uri, 
+      HttpEntity in,
+      RequestOptions options,
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>putTask(uri,in,options),listener);
+    }
+    
+    public <T extends ClientResponse>Future<T> put(
+      String uri, 
+      HttpEntity in,
+      ExecutorService exec) {
+        return process(exec,this.<T>putTask(uri,in));
+    }
+    
+    public <T extends ClientResponse>Future<T> put(
+      String uri, 
+      HttpEntity in,
+      RequestOptions options,
+      ExecutorService exec) {
+        return process(exec,this.<T>putTask(uri,in,options));
+    }
+    
+    public <T extends ClientResponse>void delete(
+      String uri, 
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>deleteTask(uri),listener);
+    }
+    
+    public <T extends ClientResponse>void delete(
+      String uri, 
+      RequestOptions options,
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>deleteTask(uri,options),listener);
+    }
+    
+    public <T extends ClientResponse>Future<T> delete(
+      String uri, 
+      ExecutorService exec) {
+        return process(exec,this.<T>deleteTask(uri));
+    }
+    
+    public <T extends ClientResponse>Future<T> delete(
+      String uri, 
+      RequestOptions options,
+      ExecutorService exec) {
+        return process(exec,this.<T>deleteTask(uri,options));
+    }
+    
+    public <T extends ClientResponse>void head(
+      String uri, 
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>headTask(uri),listener);
+    }
+    
+    public <T extends ClientResponse>void head(
+      String uri, 
+      RequestOptions options,
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>headTask(uri,options),listener);
+    }
+    
+    public <T extends ClientResponse>Future<T> head(
+      String uri, 
+      ExecutorService exec) {
+        return process(exec,this.<T>headTask(uri));
+    }
+    
+    public <T extends ClientResponse>Future<T> head(
+      String uri, 
+      RequestOptions options,
+      ExecutorService exec) {
+        return process(exec,this.<T>headTask(uri,options));
+    }
+    
+    
+    public <T extends ClientResponse>void execute(
+      String method, 
+      String uri, 
+      InputStream in, 
+      RequestOptions options,
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>executeTask(method,uri,in,options),listener);
+    }
+    
+    public <T extends ClientResponse>void execute(
+      String method, 
+      String uri, 
+      HttpEntity in, 
+      RequestOptions options,
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>executeTask(method,uri,in,options),listener);
+    }
+    
+    public <T extends ClientResponse>Future<T> execute(
+      String method, 
+      String uri, 
+      InputStream in, 
+      RequestOptions options,
+      ExecutorService exec) {
+        return process(exec,this.<T>executeTask(method,uri,in,options));
+    }
+    
+    public <T extends ClientResponse>Future<T> execute(
+      String method, 
+      String uri, 
+      HttpEntity in, 
+      RequestOptions options,
+      ExecutorService exec) {
+        return process(exec,this.<T>executeTask(method,uri,in,options));
+    }
+    
+    public <T extends ClientResponse>void execute(
+      Method method, 
+      String uri, 
+      InputStream in, 
+      RequestOptions options,
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>executeTask(method,uri,in,options),listener);
+    }
+    
+    public <T extends ClientResponse>void execute(
+      Method method, 
+      String uri, 
+      HttpEntity in, 
+      RequestOptions options,
+      ExecutorService exec, 
+      Listener<T> listener) {
+      process(exec,this.<T>executeTask(method,uri,in,options),listener);
+    }
+    
+    public <T extends ClientResponse>Future<T> execute(
+      Method method, 
+      String uri, 
+      InputStream in, 
+      RequestOptions options,
+      ExecutorService exec) {
+        return process(exec,this.<T>executeTask(method,uri,in,options));
+    }
+    
+    public <T extends ClientResponse>Future<T> execute(
+      Method method, 
+      String uri, 
+      HttpEntity in, 
+      RequestOptions options,
+      ExecutorService exec) {
+        return process(exec,this.<T>executeTask(method,uri,in,options));
+    }
+}

Propchange: abdera/abdera2/common/src/main/java/org/apache/abdera2/common/protocol/Session.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClient.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClient.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClient.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClient.java Wed Feb  1 18:49:11 2012
@@ -19,6 +19,12 @@ package org.apache.abdera2.protocol.clie
 
 import java.io.IOException;
 import org.apache.abdera2.Abdera;
+import org.apache.abdera2.common.protocol.BasicClient;
+import org.apache.abdera2.common.protocol.Client;
+import org.apache.abdera2.common.protocol.ClientWrapper;
+import org.apache.abdera2.common.protocol.RequestHelper;
+import org.apache.abdera2.common.protocol.RequestOptions;
+import org.apache.abdera2.common.protocol.Session;
 import org.apache.abdera2.model.Document;
 import org.apache.abdera2.model.Element;
 import org.apache.abdera2.parser.ParserOptions;

Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClientResponse.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClientResponse.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClientResponse.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClientResponse.java Wed Feb  1 18:49:11 2012
@@ -17,6 +17,7 @@
  */
 package org.apache.abdera2.protocol.client;
 
+import org.apache.abdera2.common.protocol.ClientResponse;
 import org.apache.abdera2.model.Document;
 import org.apache.abdera2.model.Element;
 import org.apache.abdera2.parser.ParseException;

Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClientResponseImpl.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClientResponseImpl.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClientResponseImpl.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaClientResponseImpl.java Wed Feb  1 18:49:11 2012
@@ -21,6 +21,8 @@ import javax.activation.MimeType;
 
 import org.apache.abdera2.common.http.EntityTag;
 import org.apache.abdera2.common.iri.IRI;
+import org.apache.abdera2.common.protocol.ClientResponse;
+import org.apache.abdera2.common.protocol.ClientResponseWrapper;
 import org.apache.abdera2.model.Document;
 import org.apache.abdera2.model.Element;
 import org.apache.abdera2.parser.ParseException;

Modified: abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaSession.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaSession.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaSession.java (original)
+++ abdera/abdera2/core/src/main/java/org/apache/abdera2/protocol/client/AbderaSession.java Wed Feb  1 18:49:11 2012
@@ -28,6 +28,9 @@ import org.apache.abdera2.protocol.error
 import org.apache.abdera2.common.http.EntityTag;
 import org.apache.abdera2.common.http.Method;
 import org.apache.abdera2.common.http.ResponseType;
+import org.apache.abdera2.common.protocol.ClientResponse;
+import org.apache.abdera2.common.protocol.RequestOptions;
+import org.apache.abdera2.common.protocol.Session;
 import org.apache.http.entity.mime.content.ContentBody;
 import org.joda.time.DateTime;
 

Modified: abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/appclient/Main.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/appclient/Main.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/appclient/Main.java (original)
+++ abdera/abdera2/examples/src/main/java/org/apache/abdera2/examples/appclient/Main.java Wed Feb  1 18:49:11 2012
@@ -29,8 +29,8 @@ import org.apache.abdera2.model.Service;
 import org.apache.abdera2.protocol.client.AbderaClient;
 import org.apache.abdera2.protocol.client.AbderaClientResponse;
 import org.apache.abdera2.protocol.client.AbderaSession;
-import org.apache.abdera2.protocol.client.Client;
 import org.apache.abdera2.common.iri.IRI;
+import org.apache.abdera2.common.protocol.Client;
 import org.joda.time.DateTime;
 
 public class Main {

Modified: abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/history/FeedPagingHelper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/history/FeedPagingHelper.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/history/FeedPagingHelper.java (original)
+++ abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/history/FeedPagingHelper.java Wed Feb  1 18:49:11 2012
@@ -30,6 +30,7 @@ import static org.apache.abdera2.model.L
 
 import org.apache.abdera2.Abdera;
 import org.apache.abdera2.common.iri.IRI;
+import org.apache.abdera2.common.protocol.RequestOptions;
 import org.apache.abdera2.model.Document;
 import org.apache.abdera2.model.Element;
 import org.apache.abdera2.model.ExtensibleElement;
@@ -38,7 +39,6 @@ import org.apache.abdera2.model.Source;
 import org.apache.abdera2.protocol.client.AbderaClient;
 import org.apache.abdera2.protocol.client.AbderaClientResponse;
 import org.apache.abdera2.protocol.client.AbderaSession;
-import org.apache.abdera2.protocol.client.RequestOptions;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;

Modified: abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/html/HtmlHelper.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/html/HtmlHelper.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/html/HtmlHelper.java (original)
+++ abdera/abdera2/ext/src/main/java/org/apache/abdera2/ext/html/HtmlHelper.java Wed Feb  1 18:49:11 2012
@@ -30,11 +30,11 @@ import org.apache.abdera2.Abdera;
 import org.apache.abdera2.model.Div;
 import org.apache.abdera2.model.Document;
 import org.apache.abdera2.model.Element;
-import org.apache.abdera2.protocol.client.BasicClient;
-import org.apache.abdera2.protocol.client.Client;
-import org.apache.abdera2.protocol.client.ClientResponse;
-import org.apache.abdera2.protocol.client.Session;
 import org.apache.abdera2.common.mediatype.MimeTypeHelper;
+import org.apache.abdera2.common.protocol.BasicClient;
+import org.apache.abdera2.common.protocol.Client;
+import org.apache.abdera2.common.protocol.ClientResponse;
+import org.apache.abdera2.common.protocol.Session;
 import org.apache.abdera2.common.xml.XmlRestrictedCharReader;
 
 public class HtmlHelper {

Modified: abdera/abdera2/pom.xml
URL: http://svn.apache.org/viewvc/abdera/abdera2/pom.xml?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/pom.xml (original)
+++ abdera/abdera2/pom.xml Wed Feb  1 18:49:11 2012
@@ -690,7 +690,6 @@
     <module>common</module>
     <module>core</module>
     <module>activities</module>
-    <module>client</module>
     <module>ext</module>
     <module>security</module>
     <module>test</module>

Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/AppTest.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/AppTest.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/AppTest.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/AppTest.java Wed Feb  1 18:49:11 2012
@@ -52,10 +52,10 @@ import org.apache.abdera2.parser.ParserO
 import org.apache.abdera2.protocol.client.AbderaClient;
 import org.apache.abdera2.protocol.client.AbderaClientResponse;
 import org.apache.abdera2.protocol.client.AbderaSession;
-import org.apache.abdera2.protocol.client.RequestOptions;
 import org.apache.abdera2.common.http.CacheControl;
 import org.apache.abdera2.common.http.EntityTag;
 import org.apache.abdera2.common.mediatype.MimeTypeHelper;
+import org.apache.abdera2.common.protocol.RequestOptions;
 import org.apache.abdera2.test.JettyUtil;
 import org.apache.abdera2.writer.WriterOptions;
 import org.joda.time.DateTime;

Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/CacheTest.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/CacheTest.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/CacheTest.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/CacheTest.java Wed Feb  1 18:49:11 2012
@@ -30,11 +30,11 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.abdera2.common.http.CacheControl;
-import org.apache.abdera2.protocol.client.BasicCachingClient;
-import org.apache.abdera2.protocol.client.Client;
-import org.apache.abdera2.protocol.client.ClientResponse;
-import org.apache.abdera2.protocol.client.RequestOptions;
-import org.apache.abdera2.protocol.client.Session;
+import org.apache.abdera2.common.protocol.BasicCachingClient;
+import org.apache.abdera2.common.protocol.Client;
+import org.apache.abdera2.common.protocol.ClientResponse;
+import org.apache.abdera2.common.protocol.RequestOptions;
+import org.apache.abdera2.common.protocol.Session;
 import org.apache.abdera2.test.JettyUtil;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;

Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/ClientTest.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/ClientTest.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/ClientTest.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/client/ClientTest.java Wed Feb  1 18:49:11 2012
@@ -32,11 +32,11 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.abdera2.common.misc.MoreExecutors2;
-import org.apache.abdera2.protocol.client.BasicClient;
-import org.apache.abdera2.protocol.client.Client;
-import org.apache.abdera2.protocol.client.ClientResponse;
-import org.apache.abdera2.protocol.client.Session;
-import org.apache.abdera2.protocol.client.Session.Listener;
+import org.apache.abdera2.common.protocol.BasicClient;
+import org.apache.abdera2.common.protocol.Client;
+import org.apache.abdera2.common.protocol.ClientResponse;
+import org.apache.abdera2.common.protocol.Session;
+import org.apache.abdera2.common.protocol.Session.Listener;
 import org.apache.abdera2.test.JettyUtil;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;

Modified: abdera/abdera2/test/src/main/java/org/apache/abdera2/test/common/anno/AnnoUtilTest.java
URL: http://svn.apache.org/viewvc/abdera/abdera2/test/src/main/java/org/apache/abdera2/test/common/anno/AnnoUtilTest.java?rev=1239261&r1=1239260&r2=1239261&view=diff
==============================================================================
--- abdera/abdera2/test/src/main/java/org/apache/abdera2/test/common/anno/AnnoUtilTest.java (original)
+++ abdera/abdera2/test/src/main/java/org/apache/abdera2/test/common/anno/AnnoUtilTest.java Wed Feb  1 18:49:11 2012
@@ -11,7 +11,7 @@ import org.apache.abdera2.common.anno.Na
 import org.apache.abdera2.common.anno.Namespace;
 import org.apache.abdera2.common.anno.QName;
 import org.apache.abdera2.common.anno.Version;
-import org.apache.abdera2.protocol.client.BasicClient;
+import org.apache.abdera2.common.protocol.BasicClient;
 import org.junit.Test;
 
 @DefaultImplementation("FooBarBaz")