Author: johnh
Date: Tue Jan 15 20:07:26 2008
New Revision: 612346

URL: http://svn.apache.org/viewvc?rev=612346&view=rev
Log:
Adding support for per-request options to be passed to 
GadgetServer.processGadget(),
and using this to support "nocache"/"bpc" (bypass cache) functionality.


Added:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java
Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.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/http/GadgetRenderingServlet.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/GadgetContext.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java?rev=612346&r1=612345&r2=612346&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetContext.java
 Tue Jan 15 20:07:26 2008
@@ -39,20 +39,29 @@
   public RenderingContext getRenderingContext() {
     return renderingContext;
   }
+  
+  private final ProcessingOptions options;
+  public ProcessingOptions getOptions() {
+    return options;
+  }
 
   /**
    * Creates a context for the current gadget.
    * @param httpFetcher
    * @param messageBundleCache
    * @param locale
+   * @param renderingContext
+   * @param options
    */
   public GadgetContext(RemoteContentFetcher httpFetcher,
                        GadgetDataCache<MessageBundle> messageBundleCache,
                        Locale locale,
-                       RenderingContext renderingContext) {
+                       RenderingContext renderingContext,
+                       ProcessingOptions options) {
     this.httpFetcher = httpFetcher;
     this.messageBundleCache = messageBundleCache;
     this.locale = locale;
     this.renderingContext = renderingContext;
+    this.options = options != null ? options : new ProcessingOptions();
   }
 }

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=612346&r1=612345&r2=612346&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
 Tue Jan 15 20:07:26 2008
@@ -71,13 +71,15 @@
    * @param userPrefs
    * @param locale
    * @param rctx
+   * @param options
    * @return The processed gadget.
    * @throws GadgetProcessException
    */
   public Gadget processGadget(Gadget.ID gadgetId,
                               UserPrefs userPrefs,
                               Locale locale,
-                              RenderingContext rctx)
+                              RenderingContext rctx,
+                              ProcessingOptions options)
       throws GadgetProcessException {
     if (specCache == null) {
       throw new 
GadgetProcessException(GadgetException.Code.MISSING_SPEC_CACHE);
@@ -97,7 +99,7 @@
 
     // Queue/tree of all jobs to be run for successful processing
     GadgetContext gc
-        = new GadgetContext(fetcher, messageBundleCache, locale, rctx);
+        = new GadgetContext(fetcher, messageBundleCache, locale, rctx, 
options);
     WorkflowContext wc = new WorkflowContext(gc);
 
     // Bootstrap tree of jobs to process
@@ -283,6 +285,10 @@
 
     @Override
     public void run(WorkflowContext wc) throws GadgetException {
+      if (wc.context.getOptions().ignoreCache) {
+        return;
+      }
+      
       GadgetSpec spec = specCache.get(gadgetId.getKey());
       if (spec != null) {
         wc.gadget = new Gadget(gadgetId, spec, prefs);
@@ -329,12 +335,16 @@
             GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT,
             "Malformed gadget spec URL: " + gadgetId.getURI().toString());
       }
+      
       GadgetSpecParser specParser = new GadgetSpecParser();
       GadgetSpec spec = specParser.parse(gadgetId, xml);
       wc.gadget = new Gadget(gadgetId, spec, prefs);
+      
       // This isn't a separate job because if it is we'd just need another
       // flag telling us not to store to the cache.
-      specCache.put(wc.gadget.getId().getKey(), wc.gadget.copy());
+      if (!wc.context.getOptions().ignoreCache) {
+        specCache.put(wc.gadget.getId().getKey(), wc.gadget.copy());
+      }
     }
   }
 

Added: 
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=612346&view=auto
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java
 (added)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/ProcessingOptions.java
 Tue Jan 15 20:07:26 2008
@@ -0,0 +1,23 @@
+/*
+ * 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;
+
+/**
+ * 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.
+ */
+public class ProcessingOptions {
+  public boolean ignoreCache = false;
+}

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=612346&r1=612345&r2=612346&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
 Tue Jan 15 20:07:26 2008
@@ -25,6 +25,7 @@
 import org.apache.shindig.gadgets.JsFeatureLoader;
 import org.apache.shindig.gadgets.JsLibrary;
 import org.apache.shindig.gadgets.MessageBundle;
+import org.apache.shindig.gadgets.ProcessingOptions;
 import org.apache.shindig.gadgets.RemoteContentFetcher;
 import org.apache.shindig.gadgets.RenderingContext;
 import org.apache.shindig.gadgets.UserPrefs;
@@ -141,13 +142,20 @@
 
     BasicHttpContext context = new BasicHttpContext(req);
     GadgetView.ID gadgetId = new Gadget.GadgetId(uri, moduleId);
+    ProcessingOptions options = new ProcessingOptions();
+    String noCacheParam = req.getParameter("nocache");
+    if (noCacheParam == null) {
+      noCacheParam = req.getParameter("bpc");
+    }
+    options.ignoreCache = (noCacheParam != null && noCacheParam.equals("1"));
 
     Gadget gadget = null;
     try {
       gadget = gadgetServer.processGadget(gadgetId,
                                           getPrefsFromRequest(req),
                                           context.getLocale(),
-                                          RenderingContext.GADGET);
+                                          RenderingContext.GADGET,
+                                          options);
       outputGadget(gadget, resp);
     } catch (GadgetServer.GadgetProcessException e) {
       outputErrors(e, resp);

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=612346&r1=612345&r2=612346&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
 Tue Jan 15 20:07:26 2008
@@ -56,7 +56,7 @@
     replay();
 
     Gadget gadget = gadgetServer.processGadget(DATETIME_ID, UserPrefs.EMPTY, 
EN_US_LOCALE,
-                                               RenderingContext.GADGET);
+                                               RenderingContext.GADGET, null);
     verify();
   }
 
@@ -65,7 +65,7 @@
     replay();
 
     Gadget gadget = gadgetServer.processGadget(DATETIME_ID, UserPrefs.EMPTY, 
EN_US_LOCALE,
-                                               RenderingContext.GADGET);
+                                               RenderingContext.GADGET, null);
     assertSame(DATETIME_SPEC, gadget.getBaseSpec());
     verify();
   }
@@ -79,7 +79,7 @@
     replay();
 
     Gadget gadget = gadgetServer.processGadget(DATETIME_ID, UserPrefs.EMPTY, 
EN_US_LOCALE,
-                                               RenderingContext.GADGET);
+                                               RenderingContext.GADGET, null);
     assertEquals("Hello, World!", gadget.getTitle());
     assertEquals("Goodbye, World!", gadget.getContentData());
     verify();
@@ -95,7 +95,7 @@
 
     try {
       gadgetServer.processGadget(DATETIME_ID, UserPrefs.EMPTY, EN_US_LOCALE,
-                                 RenderingContext.GADGET);
+                                 RenderingContext.GADGET, null);
       fail();
     } catch (GadgetServer.GadgetProcessException ex) {
       assertEquals(1, ex.getComponents().size());


Reply via email to