Author: johnh
Date: Wed Jan 23 20:14:02 2008
New Revision: 614787

URL: http://svn.apache.org/viewvc?rev=614787&view=rev
Log:
Passing ProcessingOptions into RemoteContentFetcher to allow implementations to
choose whether or not they will honor per-request flags passed in - most 
importantly
ignoreCache, for developer convenience.

ProcessingOptions has been refactored as part of this change. Its base 
implementation
provides only getters for flags, and supplies the default value associated with 
each.
HttpProcessingOptions subclasses this, overriding behavior based on parameters 
supplied
in an HTTP request.


Added:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpProcessingOptions.java
Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicRemoteContentFetcher.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/MessageBundleSubstituter.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RemoteContentFetcher.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyHandler.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicRemoteContentFetcher.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicRemoteContentFetcher.java?rev=614787&r1=614786&r2=614787&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicRemoteContentFetcher.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicRemoteContentFetcher.java
 Wed Jan 23 20:14:02 2008
@@ -43,7 +43,7 @@
   }
 
   /** [EMAIL PROTECTED] */
-  public RemoteContent fetch(URL url) {
+  public RemoteContent fetch(URL url, ProcessingOptions options) {
     ByteArrayOutputStream out = new ByteArrayOutputStream();
 
     int responseCode;

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java?rev=614787&r1=614786&r2=614787&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
 Wed Jan 23 20:14:02 2008
@@ -198,11 +198,9 @@
         try {
           gadgetException = latestResult.get();
         } catch (ExecutionException e) {
-          // TODO: convert into gadgetException with internal error type
           gadgetException = new GadgetException(
               GadgetException.Code.INTERNAL_SERVER_ERROR, e);
         } catch (InterruptedException e) {
-          // TODO: convert into gadgetException with internal error type
           gadgetException = new GadgetException(
               GadgetException.Code.INTERNAL_SERVER_ERROR, e);
         }
@@ -321,7 +319,7 @@
 
     @Override
     public void run(WorkflowContext wc) throws GadgetException {
-      if (wc.context.getOptions().ignoreCache) {
+      if (wc.context.getOptions().getIgnoreCache()) {
         return;
       }
 
@@ -339,7 +337,8 @@
     private final UserPrefs prefs;
     private final GadgetBlacklist blacklist;
 
-    private SpecLoadTask(RemoteContentFetcher fetcher, GadgetView.ID gadgetId,
+    private SpecLoadTask(RemoteContentFetcher fetcher,
+                         GadgetView.ID gadgetId,
                          UserPrefs prefs,
                          GadgetDataCache<GadgetSpec> specCache,
                          GadgetBlacklist blacklist) {
@@ -365,7 +364,8 @@
 
       byte[] xml = null;
       try {
-        xml = fetcher.fetch(gadgetId.getURI().toURL()).getByteArray();
+        xml = fetcher.fetch(
+            gadgetId.getURI().toURL(), wc.context.getOptions()).getByteArray();
       } catch (MalformedURLException e) {
         throw new GadgetException(
             GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT,
@@ -378,7 +378,7 @@
 
       // This isn't a separate job because if it is we'd just need another
       // flag telling us not to store to the cache.
-      if (!wc.context.getOptions().ignoreCache) {
+      if (!wc.context.getOptions().getIgnoreCache()) {
         specCache.put(wc.gadget.getId().getKey(), wc.gadget.copy());
       }
     }

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/MessageBundleSubstituter.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/MessageBundleSubstituter.java?rev=614787&r1=614786&r2=614787&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/MessageBundleSubstituter.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/MessageBundleSubstituter.java
 Wed Jan 23 20:14:02 2008
@@ -84,7 +84,8 @@
         if (bundle == null) {
           byte[] data = null;
           try {
-            data = context.getHttpFetcher().fetch(uri.toURL()).getByteArray();
+            data = context.getHttpFetcher().fetch(
+                uri.toURL(), context.getOptions()).getByteArray();
           } catch (MalformedURLException e) {
             throw new GadgetException(
                 GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT,

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java?rev=614787&r1=614786&r2=614787&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java
 Wed Jan 23 20:14:02 2008
@@ -17,20 +17,27 @@
  * Contains flags that effect how a given [EMAIL PROTECTED] 
GadgetServer.processGadget}
  * call operates. Care should be taken with this class to ensure it doesn't
  * become a catch-all for unnecessary pieces of functionality.
+ * 
+ * This class's methods are designed to be overridden depending on the context
+ * of the request. Its default implementations provide default values for
+ * each supported flag.
  */
 public class ProcessingOptions {
-
   /**
-   * Whether or not to bypass the gadget and message bundle caches for the
-   * current request.
+   * @return Whether or not to bypass caching behavior for the current request.
    */
-  public boolean ignoreCache = false;
+  public boolean getIgnoreCache() {
+    return false;
+  }
 
   /**
    * Overrides javascript library processing by forcing the use of a fixed set
    * of libraries. This is mainly intended for use by parent sites that are
    * using the core library to fetch meta data for many gadgets and aggregating
    * the required libraries.
+   * @return Libs path to use
    */
-  public String forceJsLibs = null;
+  public String getForcedJsLibs() {
+    return null;
+  }
 }

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RemoteContentFetcher.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RemoteContentFetcher.java?rev=614787&r1=614786&r2=614787&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RemoteContentFetcher.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RemoteContentFetcher.java
 Wed Jan 23 20:14:02 2008
@@ -16,5 +16,5 @@
 import java.net.URL;
 
 public interface RemoteContentFetcher {
-  public RemoteContent fetch(URL url);
+  public RemoteContent fetch(URL url, ProcessingOptions options);
 }

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java?rev=614787&r1=614786&r2=614787&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java
 Wed Jan 23 20:14:02 2008
@@ -141,9 +141,7 @@
 
     BasicHttpContext context = new BasicHttpContext(req);
     GadgetView.ID gadgetId = new Gadget.GadgetId(uri, moduleId);
-    ProcessingOptions options = new ProcessingOptions();
-    options.ignoreCache = getIgnoreCache(req);
-    options.forceJsLibs = getForceJsLibs(req);
+    ProcessingOptions options = new HttpProcessingOptions(req);
 
     // Prepare a list of GadgetContentFilters applied to the output
     List<GadgetContentFilter> contentFilters =
@@ -234,16 +232,18 @@
         inlineJs.append(library.getContent()).append("\n");
       } else {
         // FILE or RESOURCE
-        if (options.forceJsLibs == null) {
+        if (options.getForcedJsLibs() == null) {
           inlineJs.append(library.getContent()).append("\n");
         } // otherwise it was already included by options.forceJsLibs.
       }
     }
 
     // Forced libs first.
-    if (options.forceJsLibs != null) {
+    if (options.getForcedJsLibs() != null) {
       markup.append(String.format(externFmt,
-          DEFAULT_JS_SERVICE_PATH + options.forceJsLibs + JS_FILE_SUFFIX));
+                                  DEFAULT_JS_SERVICE_PATH +
+                                  options.getForcedJsLibs() +
+                                  JS_FILE_SUFFIX));
     }
 
     if (inlineJs.length() > 0) {
@@ -283,11 +283,12 @@
     String prefsQuery = getPrefsQueryString(gadget.getUserPrefValues());
     String libsQuery = null;
 
-    if (options.forceJsLibs == null) {
+    if (options.getForcedJsLibs() == null) {
       libsQuery = getLibsQueryString(gadget.getRequires().keySet());
     } else {
-      libsQuery
-          = DEFAULT_JS_SERVICE_PATH + options.forceJsLibs + JS_FILE_SUFFIX;
+      libsQuery = DEFAULT_JS_SERVICE_PATH +
+                  options.getForcedJsLibs() +
+                  JS_FILE_SUFFIX;
     }
 
     URI redirURI = gadget.getContentHref();
@@ -377,26 +378,6 @@
     buf.append(JS_FILE_SUFFIX);
 
     return buf.toString();
-  }
-
-  /**
-   * @param req
-   * @return Whether or not to ignore the cache.
-   */
-  protected boolean getIgnoreCache(HttpServletRequest req) {
-    String noCacheParam = req.getParameter("nocache");
-    if (noCacheParam == null) {
-      noCacheParam = req.getParameter("bpc");
-    }
-    return noCacheParam != null && noCacheParam.equals("1");
-  }
-
-  /**
-   * @param req
-   * @return Forced JS libs, or null if no forcing is to be done.
-   */
-  protected String getForceJsLibs(HttpServletRequest req) {
-    return req.getParameter("libs");
   }
 
   /**

Added: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpProcessingOptions.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpProcessingOptions.java?rev=614787&view=auto
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpProcessingOptions.java
 (added)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpProcessingOptions.java
 Wed Jan 23 20:14:02 2008
@@ -0,0 +1,64 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.shindig.gadgets.http;
+
+import org.apache.shindig.gadgets.ProcessingOptions;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * [EMAIL PROTECTED] ProcessingOptions} derived from parameters supplied in an
+ * [EMAIL PROTECTED] HttpServletRequest}.
+ */
+public class HttpProcessingOptions extends ProcessingOptions {
+  private final boolean ignoreCache;
+  private final String forceJsLibs;
+  
+  public HttpProcessingOptions(HttpServletRequest req) {
+    ignoreCache = getIgnoreCache(req);
+    forceJsLibs = getForceJsLibs(req);
+  }
+  
+  /** [EMAIL PROTECTED] */
+  @Override
+  public String getForcedJsLibs() {
+    return forceJsLibs;
+  }
+
+  /** [EMAIL PROTECTED] */
+  @Override
+  public boolean getIgnoreCache() {
+    return ignoreCache;
+  }
+  
+  /**
+   * @param req
+   * @return Whether or not to ignore the cache.
+   */
+  protected static boolean getIgnoreCache(HttpServletRequest req) {
+    String noCacheParam = req.getParameter("nocache");
+    if (noCacheParam == null) {
+      noCacheParam = req.getParameter("bpc");
+    }
+    return noCacheParam != null && noCacheParam.equals("1");
+  }
+
+  /**
+   * @param req
+   * @return Forced JS libs, or null if no forcing is to be done.
+   */
+  protected static String getForceJsLibs(HttpServletRequest req) {
+    return req.getParameter("libs");
+  }
+}

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyHandler.java?rev=614787&r1=614786&r2=614787&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyHandler.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyHandler.java
 Wed Jan 23 20:14:02 2008
@@ -22,6 +22,7 @@
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.GadgetSigner;
 import org.apache.shindig.gadgets.GadgetToken;
+import org.apache.shindig.gadgets.ProcessingOptions;
 import org.apache.shindig.gadgets.RemoteContent;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -59,8 +60,7 @@
     URL origin = extractAndValidateUrl(request);
 
     // Fetch the content and convert it into JSON.
-
-    RemoteContent results = fetcher.fetch(origin);
+    RemoteContent results = fetcher.fetch(origin, new ProcessingOptions());
     String output;
     try {
       String json = new JSONObject().put(origin.toString(), new JSONObject()
@@ -91,8 +91,7 @@
 
     // Validate url= parameter
     URL origin = extractAndValidateUrl(request);
-
-    RemoteContent results = fetcher.fetch(origin);
+    RemoteContent results = fetcher.fetch(origin, new ProcessingOptions());
     int status = results.getHttpStatusCode();
     response.setStatus(status);
     if (status == HttpServletResponse.SC_OK) {

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java?rev=614787&r1=614786&r2=614787&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java
 Wed Jan 23 20:14:02 2008
@@ -51,14 +51,16 @@
 
   public void testGadgetSpecNotInCache() throws Exception {
     RemoteContent results = new RemoteContent(200, DATETIME_XML.getBytes(), 
null);
+    ProcessingOptions options = new ProcessingOptions();
 
     expect(specCache.get(eq(DATETIME_URI_STRING))).andReturn(null);
-    expect(fetcher.fetch(eq(DATETIME_URI.toURL()))).andReturn(results);
+    expect(fetcher.fetch(eq(DATETIME_URI.toURL()),
+                         eq(options))).andReturn(results);
     specCache.put(eq(DATETIME_URI_STRING), isA(GadgetSpec.class));
     replay();
 
     Gadget gadget = gadgetServer.processGadget(DATETIME_ID, UserPrefs.EMPTY, 
EN_US_LOCALE,
-                                               RenderingContext.GADGET, null);
+                                               RenderingContext.GADGET, 
options);
     verify();
   }
 
@@ -74,14 +76,16 @@
 
   public void testBasicGadget() throws Exception {
     RemoteContent results = new RemoteContent(200, DATETIME_XML.getBytes(), 
null);
+    ProcessingOptions options = new ProcessingOptions();
 
     expect(specCache.get(eq(DATETIME_URI_STRING))).andReturn(null);
-    expect(fetcher.fetch(eq(DATETIME_URI.toURL()))).andReturn(results);
+    expect(fetcher.fetch(eq(DATETIME_URI.toURL()),
+                         eq(options))).andReturn(results);
     specCache.put(eq(DATETIME_URI_STRING), isA(GadgetSpec.class));
     replay();
 
     Gadget gadget = gadgetServer.processGadget(DATETIME_ID, UserPrefs.EMPTY, 
EN_US_LOCALE,
-                                               RenderingContext.GADGET, null);
+                                               RenderingContext.GADGET, 
options);
     assertEquals("Hello, World!", gadget.getTitle());
     assertEquals("Goodbye, World!", gadget.getContentData());
     verify();


Reply via email to