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());