|
From: <nri...@us...> - 2012-11-27 07:52:39
|
Revision: 923
http://webassembletool.svn.sourceforge.net/webassembletool/?rev=923&view=rev
Author: nricheton
Date: 2012-11-27 07:52:27 +0000 (Tue, 27 Nov 2012)
Log Message:
-----------
0000076: Redesign / document EsiGate entry points (extensions)
https://sourceforge.net/apps/mantisbt/webassembletool/view.php?id=76
Added Render event
Modified Paths:
--------------
trunk/esigate-core/src/main/java/org/esigate/Driver.java
trunk/esigate-core/src/main/java/org/esigate/Parameters.java
trunk/esigate-core/src/main/java/org/esigate/events/EventManager.java
trunk/esigate-core/src/main/java/org/esigate/events/impl/FetchEvent.java
trunk/esigate-core/src/main/java/org/esigate/events/impl/FragmentEvent.java
Added Paths:
-----------
trunk/esigate-core/src/main/java/org/esigate/events/impl/RenderEvent.java
trunk/esigate-core/src/main/java/org/esigate/extension/ResourceFixup.java
Modified: trunk/esigate-core/src/main/java/org/esigate/Driver.java
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/Driver.java 2012-11-26 07:48:28 UTC (rev 922)
+++ trunk/esigate-core/src/main/java/org/esigate/Driver.java 2012-11-27 07:52:27 UTC (rev 923)
@@ -35,13 +35,13 @@
import org.esigate.events.EventManager;
import org.esigate.events.impl.FragmentEvent;
import org.esigate.events.impl.ProxyEvent;
+import org.esigate.events.impl.RenderEvent;
import org.esigate.extension.ExtensionFactory;
import org.esigate.http.GenericHttpRequest;
import org.esigate.http.HttpClientHelper;
import org.esigate.http.HttpResponseUtils;
import org.esigate.http.RequestCookieStore;
import org.esigate.http.ResourceUtils;
-import org.esigate.renderers.ResourceFixupRenderer;
import org.esigate.util.HttpRequestHelper;
import org.esigate.vars.VariablesResolver;
import org.slf4j.Logger;
@@ -129,23 +129,27 @@
request);
String currentValue = getResourceAsString(resultingpage, request);
- // Fix resources
- if (config.isFixResources()) {
- String baseUrl = HttpRequestHelper.getBaseUrl(request).toString();
- ResourceFixupRenderer fixup = new ResourceFixupRenderer(baseUrl,
- config.getVisibleBaseURL(baseUrl), page,
- config.getFixMode());
- StringWriter stringWriter = new StringWriter();
- fixup.render(request, currentValue, stringWriter);
- currentValue = stringWriter.toString();
- }
+ // Start rendering.
+ RenderEvent renderEvent= new RenderEvent();
+ renderEvent.originalRequest = request;
+ renderEvent.remoteUrl = page;
+ // Create renderer list from parameters. Ensure at least an additional
+ // renderer can be added at no cost.
+ renderEvent.renderers = new ArrayList<Renderer>(
+ renderers.length + 1);
+ renderEvent.renderers.addAll(Arrays.asList(renderers));
+
+ eventManager.fire(EventManager.EVENT_RENDER_PRE, renderEvent);
+
// Process all renderers
- for (Renderer renderer : renderers) {
+ for (Renderer renderer : renderEvent.renderers) {
StringWriter stringWriter = new StringWriter();
renderer.render(request, currentValue, stringWriter);
currentValue = stringWriter.toString();
}
+ eventManager.fire(EventManager.EVENT_RENDER_POST, renderEvent);
+
writer.append(currentValue);
}
@@ -221,23 +225,26 @@
LOG.debug("'{}' is text : will apply renderers.", relUrl);
String currentValue = HttpResponseUtils.toString(httpResponse);
- List<Renderer> listOfRenderers = new ArrayList<Renderer>(
+ // Start rendering
+ RenderEvent renderEvent= new RenderEvent();
+ renderEvent.originalRequest = request;
+ renderEvent.remoteUrl = relUrl;
+ // Create renderer list from parameters. Ensure at least an additional
+ // renderer can be added at no cost.
+ renderEvent.renderers = new ArrayList<Renderer>(
renderers.length + 1);
- if (config.isFixResources()) {
- String baseUrl = HttpRequestHelper.getBaseUrl(request)
- .toString();
- ResourceFixupRenderer fixup = new ResourceFixupRenderer(
- baseUrl, config.getVisibleBaseURL(baseUrl), relUrl,
- config.getFixMode());
- listOfRenderers.add(fixup);
- }
- listOfRenderers.addAll(Arrays.asList(renderers));
-
- for (Renderer renderer : listOfRenderers) {
+ renderEvent.renderers.addAll(Arrays.asList(renderers));
+
+ eventManager.fire(EventManager.EVENT_RENDER_PRE, renderEvent);
+ for (Renderer renderer : renderEvent.renderers) {
StringWriter stringWriter = new StringWriter();
renderer.render(request, currentValue, stringWriter);
currentValue = stringWriter.toString();
}
+ eventManager.fire(EventManager.EVENT_RENDER_POST, renderEvent);
+
+
+
// Write the result to the OutpuStream using default charset
// ISO-8859-1 if not defined
String charsetName = HttpResponseUtils
Modified: trunk/esigate-core/src/main/java/org/esigate/Parameters.java
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/Parameters.java 2012-11-26 07:48:28 UTC (rev 922)
+++ trunk/esigate-core/src/main/java/org/esigate/Parameters.java 2012-11-27 07:52:27 UTC (rev 923)
@@ -20,6 +20,7 @@
import org.esigate.cookie.DefaultCookieManager;
import org.esigate.extension.FetchLogging;
import org.esigate.extension.FragmentLogging;
+import org.esigate.extension.ResourceFixup;
import org.esigate.util.Parameter;
/**
@@ -73,7 +74,7 @@
public static final String ROUNDROBIN = "roundrobin";
// Extensions
- public static final Parameter EXTENSIONS = new Parameter("extensions", FragmentLogging.class.getName()+","+FetchLogging.class.getName()+","+RemoteUserAuthenticationHandler.class.getName());;
+ public static final Parameter EXTENSIONS = new Parameter("extensions", FragmentLogging.class.getName()+","+FetchLogging.class.getName()+","+RemoteUserAuthenticationHandler.class.getName()+","+ResourceFixup.class.getName());;
public static final Parameter FILTER = new Parameter("filter", null);
Modified: trunk/esigate-core/src/main/java/org/esigate/events/EventManager.java
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/events/EventManager.java 2012-11-26 07:48:28 UTC (rev 922)
+++ trunk/esigate-core/src/main/java/org/esigate/events/EventManager.java 2012-11-27 07:52:27 UTC (rev 923)
@@ -33,11 +33,19 @@
* <li>{@link EventManager#EVENT_FRAGMENT_PRE} : before retrieving a fragment.</li>
* <li>{@link EventManager#EVENT_FRAGMENT_POST} : after retrieving a fragment.</li>
* </ul>
- * <p>Fetch events : An HTTP call is made to a remote backend.
+ * <p>
+ * Fetch events : An HTTP call is made to a remote backend.
* <ul>
* <li>{@link EventManager#EVENT_FETCH_PRE} : before creating the HTTP call.</li>
* <li>{@link EventManager#EVENT_FETCH_POST} : after we receive the response.</li>
* </ul>
+ * <p>
+ * Render events : Renderers are applied to the current page. This event can be
+ * used to inject additional renderers.
+ * <ul>
+ * <li>{@link EventManager#EVENT_RENDER_PRE} : before applying renderers</li>
+ * <li>{@link EventManager#EVENT_RENDER_POST} : after applying renderers</li>
+ * </ul>
*
* @author Nicolas Richeton
*/
@@ -58,6 +66,11 @@
public static EventDefinition EVENT_PROXY_POST = new EventDefinition(
"org.esigate.proxy-post", EventDefinition.TYPE_POST);
+ public static EventDefinition EVENT_RENDER_PRE = new EventDefinition(
+ "org.esigate.render-pre", EventDefinition.TYPE_DEFAULT);
+ public static EventDefinition EVENT_RENDER_POST = new EventDefinition(
+ "org.esigate.render-post", EventDefinition.TYPE_POST);
+
private static final Logger LOG = LoggerFactory
.getLogger(EventManager.class);
@@ -135,7 +148,7 @@
List<IEventListener> eventListeners = listenerMappings
.get(eventDefinition);
- // Not listeners at all for this event
+ // No listeners at all for this event
if (eventListeners == null)
return;
Modified: trunk/esigate-core/src/main/java/org/esigate/events/impl/FetchEvent.java
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/events/impl/FetchEvent.java 2012-11-26 07:48:28 UTC (rev 922)
+++ trunk/esigate-core/src/main/java/org/esigate/events/impl/FetchEvent.java 2012-11-27 07:52:27 UTC (rev 923)
@@ -5,6 +5,12 @@
import org.apache.http.protocol.HttpContext;
import org.esigate.events.Event;
+/**
+ * Fetch event : when a new HTTP call is made to get a new block/template (Cache miss).
+ *
+ * @author Nicolas Richeton
+ *
+ */
public class FetchEvent extends Event {
public HttpResponse httpResponse;
/**
Modified: trunk/esigate-core/src/main/java/org/esigate/events/impl/FragmentEvent.java
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/events/impl/FragmentEvent.java 2012-11-26 07:48:28 UTC (rev 922)
+++ trunk/esigate-core/src/main/java/org/esigate/events/impl/FragmentEvent.java 2012-11-27 07:52:27 UTC (rev 923)
@@ -6,7 +6,9 @@
import org.esigate.http.GenericHttpRequest;
/**
- * Fetch event : when a new HTTP call is made to get a new block/template.
+ * Fragment event : when a fragment is required for rendering. This may start a
+ * fetch event in case of a cache miss. Else the fragment is retrived from the
+ * cache.
*
* @author Nicolas Richeton
*
@@ -30,7 +32,7 @@
* The new HTTP call details.
*/
public GenericHttpRequest httpRequest;
-
+
/**
* The request which was received by ESIgate.
*/
Added: trunk/esigate-core/src/main/java/org/esigate/events/impl/RenderEvent.java
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/events/impl/RenderEvent.java (rev 0)
+++ trunk/esigate-core/src/main/java/org/esigate/events/impl/RenderEvent.java 2012-11-27 07:52:27 UTC (rev 923)
@@ -0,0 +1,20 @@
+package org.esigate.events.impl;
+
+import java.util.List;
+
+import org.esigate.Renderer;
+import org.esigate.api.HttpRequest;
+import org.esigate.events.Event;
+
+/**
+ * Render event : when renderers are applied on the page.
+ *
+ * @author Nicolas Richeton
+ *
+ */
+public class RenderEvent extends Event {
+
+ public List<Renderer> renderers;
+ public String remoteUrl;
+ public HttpRequest originalRequest;
+}
Added: trunk/esigate-core/src/main/java/org/esigate/extension/ResourceFixup.java
===================================================================
--- trunk/esigate-core/src/main/java/org/esigate/extension/ResourceFixup.java (rev 0)
+++ trunk/esigate-core/src/main/java/org/esigate/extension/ResourceFixup.java 2012-11-27 07:52:27 UTC (rev 923)
@@ -0,0 +1,48 @@
+package org.esigate.extension;
+
+import java.util.Properties;
+
+import org.esigate.Driver;
+import org.esigate.DriverConfiguration;
+import org.esigate.events.Event;
+import org.esigate.events.EventDefinition;
+import org.esigate.events.EventManager;
+import org.esigate.events.IEventListener;
+import org.esigate.events.impl.RenderEvent;
+import org.esigate.renderers.ResourceFixupRenderer;
+import org.esigate.util.HttpRequestHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ResourceFixup implements Extension, IEventListener {
+ private static final Logger LOG = LoggerFactory
+ .getLogger(ResourceFixup.class);
+ private Driver driver;
+ private DriverConfiguration config;
+
+ public boolean event(EventDefinition id, Event event) {
+
+ RenderEvent renderEvent = (RenderEvent) event;
+ // Fix resources
+ if (config.isFixResources()) {
+ String baseUrl = HttpRequestHelper.getBaseUrl(
+ renderEvent.originalRequest).toString();
+ ResourceFixupRenderer fixup = new ResourceFixupRenderer(baseUrl,
+ config.getVisibleBaseURL(baseUrl), renderEvent.remoteUrl,
+ config.getFixMode());
+
+ // Add fixup renderer as first renderer.
+ renderEvent.renderers.add(0, fixup);
+ }
+
+ // Continue processing
+ return true;
+ }
+
+ public void init(Driver driver, Properties properties) {
+ this.driver = driver;
+ this.config = driver.getConfiguration();
+ driver.getEventManager().register(EventManager.EVENT_RENDER_PRE, this);
+ }
+
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|