You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/03/26 20:59:13 UTC

svn commit: r758824 - in /labs/magma/trunk: foundation-basics/src/main/java/org/apache/magma/basics/startup/ foundation-website/src/main/java/org/apache/magma/website/ foundation-website/src/main/java/org/apache/magma/website/context/ foundation-websit...

Author: simoneg
Date: Thu Mar 26 19:59:12 2009
New Revision: 758824

URL: http://svn.apache.org/viewvc?rev=758824&view=rev
Log:
LABS-325 and LABS-326 : refactored URL rewriting system heavily

Added:
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/AddURLRewritingToCycle.aj
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/WebCycling.aj   (contents, props changed)
      - copied, changed from r741815, labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/WebCycling.aj
Removed:
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/WebCycling.aj
Modified:
    labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/startup/Cycle.java
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Head.java
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/context/ContextWebMethods.aj
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj
    labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/URLRewritingStream.java
    labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/DefaultExpectations.java
    labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/WebHandlerCycleTest.java
    labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/RewritingTest.java
    labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/URLRewritingStreamPerformanceTests.java
    labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/URLRewritingStreamTest.java
    labs/magma/trunk/website-dojo-pack/src/main/java/org/apache/magma/dojo/AddDojoMethodsToHead.aj
    labs/magma/trunk/website-email/src/main/java/org/apache/magma/email/AddWebBasedEmailMethods.aj
    labs/magma/trunk/website-production-optimizer/src/main/java/org/apache/magma/website/optimization/CSSUrlRewritingStream.java
    labs/magma/trunk/website-production-optimizer/src/main/java/org/apache/magma/website/optimization/InliningHtmlHead.java

Modified: labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/startup/Cycle.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/startup/Cycle.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/startup/Cycle.java (original)
+++ labs/magma/trunk/foundation-basics/src/main/java/org/apache/magma/basics/startup/Cycle.java Thu Mar 26 19:59:12 2009
@@ -106,6 +106,7 @@
 
 	private List<CycleCleanable> cleanables = new ArrayList<CycleCleanable>();
 	private boolean inError = false;
+	private boolean started = false;
 	
 	/**
 	 * @return true if the cycle ended in an error.
@@ -115,9 +116,17 @@
 	}
 	
 	/**
+	 * @return true if the cycle has already been started.
+	 */
+	public boolean isStarted() {
+		return started;
+	}
+	
+	/**
 	 * Runs all the startup methods.
 	 */
 	private void globalSetup() {
+		this.started = true;
 		for (Method method : setups) {
 			try {
 				method.invoke(this);

Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java Thu Mar 26 19:59:12 2009
@@ -20,12 +20,10 @@
 import org.apache.magma.website.templating.DefaultTemplate;
 import org.apache.magma.website.templating.PreviousGiver;
 import org.apache.magma.website.templating.Template;
-import org.apache.magma.website.utils.URLRewritingStream;
 import org.apache.magma.settings.Settings;
+import org.apache.magma.basics.startup.Cycle;
 import org.apache.magma.basics.startup.Startup;
 
-import sun.reflect.generics.scope.MethodScope;
-
 import java.io.IOException;
 import java.io.PrintStream;
 import java.lang.reflect.Method;
@@ -159,38 +157,17 @@
 	}
 	
 	public void handleAJAX(HtmlProducer producer, HttpServletRequest req, HttpServletResponse resp) {
-		String mybaseurl = "";
-		if (req.getContextPath().length() > 0) {
-			mybaseurl += req.getContextPath();
-		}
-		if (req.getServletPath().length() > 0) {
-			mybaseurl += "/" + req.getServletPath();
-		}
-
 		String contentType = producer.getMimeType();
 		if (contentType == null) contentType = "application/octet-stream";
 		if (contentType.startsWith("text")) {
 			contentType += "; charset=utf-8";
 		}
 		resp.setContentType(contentType);
-		try {
-			URLRewritingStream rew = new URLRewritingStream(resp.getOutputStream(),mybaseurl);
-			producer.produce(rew);
-		} catch (IOException e) {
-			throw new MagmaException(e, "Error getting servlet output stream");
-		}		
+		producer.produce(Cycle.get().getRewriting());
 	}
 
 	public void handleHTML(HtmlProducer producer, HttpServletRequest req, HttpServletResponse resp) {
 		resp.setContentType("text/html; charset=utf-8");
-		
-		String mybaseurl = "";
-		if (req.getContextPath().length() > 0) {
-			mybaseurl += req.getContextPath();
-		}
-		if (req.getServletPath().length() > 0) {
-			mybaseurl += "/" + req.getServletPath();
-		}
 
 		// Try to determine if current request is considered a main or not
 		HttpSession session = req.getSession();
@@ -241,11 +218,8 @@
 			t.parse();
 		}
 
-		try {
-			t.produce(mybaseurl, resp.getOutputStream());
-		} catch (IOException e) {
-			throw new MagmaException(e, "Error getting servlet output stream");
-		}
+		t.produce(Cycle.get().getRewriting());
+		
 		if (t.wasMain() && producer.isRepeatable()) {
 			System.out.println("Producer has a reproducible main path of " + producer.getCompletePath());
 			session.setAttribute("__magma_lastmain", producer.getCompletePath());			

Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Head.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Head.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Head.java (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Head.java Thu Mar 26 19:59:12 2009
@@ -8,21 +8,17 @@
 import java.util.Set;
 
 import org.apache.magma.basics.MagmaException;
-import org.apache.magma.website.utils.URLRewritingStream;
+import org.apache.magma.basics.startup.Cycle;
 
 public class Head {
 
 	protected OutputStream stream = null;
 	protected OutputStreamWriter writer = null;
-	protected URLRewritingStream rewriting;
 	
 	public Set<String> components = new HashSet<String>();
 	
 	public Head(OutputStream stream) {
 		this.stream = stream;
-		if (stream instanceof URLRewritingStream) {
-			this.rewriting = (URLRewritingStream)stream;
-		}
 		try {
 			this.writer = new OutputStreamWriter(stream, "UTF-8");
 		} catch (UnsupportedEncodingException e) {
@@ -36,9 +32,10 @@
 	}
 	
 	public void addExternalScript(String name, String mimeType) {
-		if (!containsComponent(name)) {
+		String ctxname = contextualize(name);
+		if (!containsComponent(ctxname)) {
 			rawWrite("<script src=\"",name,"\" type=\"",mimeType,"\"></script>");
-			added(name);
+			added(ctxname);
 		}
 	}
 
@@ -54,19 +51,22 @@
 	}
 	
 	public void addCss(String name) {
-		if (!containsComponent(name)) {
+		String ctxname = contextualize(name);
+		if (!containsComponent(ctxname)) {
 			rawWrite("<link href=\"", name, "\" type=\"text/css\" rel=\"stylesheet\"/>");
-			added(name);
+			added(ctxname);
 		}				
 	}
+	
+	protected String contextualize(String name) {
+		return Cycle.get().getRewriting().localUrl(name);
+	}
 
 	public boolean containsComponent(String name) {
-		if (rewriting != null) name = rewriting.localurl(name);
 		return components.contains(name);
 	}
 
 	protected void added(String name) {
-		if (rewriting != null) name = rewriting.localurl(name);
 		this.components.add(name);
 	}
 	

Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/context/ContextWebMethods.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/context/ContextWebMethods.aj?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/context/ContextWebMethods.aj (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/context/ContextWebMethods.aj Thu Mar 26 19:59:12 2009
@@ -9,7 +9,7 @@
 import org.apache.magma.website.WebHandler;
 
 public aspect ContextWebMethods {
-
+	
 	public String SubRunningContext.getCurrentURL() {
 		List<WebMethodContextElement> methods = getElements(WebMethodContextElement.class);
 		if (methods.size() == 0) return null;

Added: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/AddURLRewritingToCycle.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/AddURLRewritingToCycle.aj?rev=758824&view=auto
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/AddURLRewritingToCycle.aj (added)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/AddURLRewritingToCycle.aj Thu Mar 26 19:59:12 2009
@@ -0,0 +1,22 @@
+package org.apache.magma.website.cycle;
+
+import org.apache.magma.basics.startup.Cycle;
+import org.apache.magma.website.utils.URLRewritingStream;
+import java.io.ByteArrayOutputStream;
+
+public aspect AddURLRewritingToCycle {
+
+	private URLRewritingStream Cycle.rewriting = null;
+	
+	public URLRewritingStream Cycle.getRewriting() {
+		if (this.rewriting == null) {
+			this.rewriting = new URLRewritingStream(new ByteArrayOutputStream(), "/", "http://localhost");
+		}
+		return this.rewriting;
+	}
+	
+	public void Cycle.setRewriting(URLRewritingStream rewriting) {
+		this.rewriting = rewriting;
+	}
+	
+}

Copied: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/WebCycling.aj (from r741815, labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/WebCycling.aj)
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/WebCycling.aj?p2=labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/WebCycling.aj&p1=labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/WebCycling.aj&r1=741815&r2=758824&rev=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/WebCycling.aj (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/WebCycling.aj Thu Mar 26 19:59:12 2009
@@ -1,13 +1,55 @@
-package org.apache.magma.website;
+package org.apache.magma.website.cycle;
 
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.magma.basics.MagmaException;
 import org.apache.magma.basics.startup.Cycle;
+import org.apache.magma.website.Dispatch;
+import org.apache.magma.website.utils.URLRewritingStream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 public aspect WebCycling {
 
-	pointcut servletHandling() : execution(* Dispatch.handle(..));
+	pointcut servletStarting(HttpServletRequest req, HttpServletResponse resp) : 
+		execution(* Dispatch.handle(HttpServletRequest, HttpServletResponse)) &&
+		args(req, resp);
 	
-	before() : servletHandling() {
+	pointcut servletHandling() : 
+		execution(* Dispatch.handle(..));
+	
+	before(HttpServletRequest req, HttpServletResponse resp) : servletStarting(req, resp) {
+		if (Cycle.get().isStarted()) return;
 		Cycle.start();
+		String mybaseurl = "";
+		String ctxpath = req.getContextPath(); 
+		if (ctxpath.length() > 0) {
+			mybaseurl += ctxpath;
+		}
+		String svltpath = req.getServletPath();
+		if (svltpath.length() > 0) {
+			mybaseurl += svltpath;
+		}
+		
+		StringBuffer buff = req.getRequestURL();
+		String serverpart = null;
+		try {
+			URL url = new URL(buff.toString());
+			url = new URL(url.getProtocol(), url.getHost(), url.getPort(), "");
+			serverpart = url.toExternalForm();
+		} catch (MalformedURLException e) {
+			throw new MagmaException(e, "Cannot determine the server url");
+		}
+
+		try {
+			URLRewritingStream rew = new URLRewritingStream(resp.getOutputStream(),mybaseurl, serverpart);
+			Cycle.get().setRewriting(rew);			
+		} catch (IOException e) {
+			throw new MagmaException(e, "Error getting servlet output stream");
+		}		
 	}
 	
 	after() returning : servletHandling() {

Propchange: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/cycle/WebCycling.aj
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java Thu Mar 26 19:59:12 2009
@@ -157,9 +157,8 @@
 		}
 	}
 	
-	public void produce(String baseurl, OutputStream stream) {
+	public void produce(URLRewritingStream rewrite) {
 		try {
-			URLRewritingStream rewrite = new URLRewritingStream(stream, baseurl);
 			rewrite.setTemplatePrefix("template/" + getClass().getPackage().getName() + "/");
 			OutputStreamWriter osw = new OutputStreamWriter(rewrite, Charset.forName("UTF-8"));
 			for (int i = 0; i < data.zones.size(); i++) {

Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj Thu Mar 26 19:59:12 2009
@@ -1,5 +1,6 @@
 package org.apache.magma.website.utils;
 
+import org.apache.magma.basics.startup.Cycle;
 import org.apache.magma.basics.startup.CycleThreadLocal;
 import org.apache.magma.website.Producer;
 import org.apache.magma.website.HtmlProducer;
@@ -11,12 +12,6 @@
 
 public aspect MakeURLRewritingContextBased {
 
-	private CycleThreadLocal<URLRewritingStream> mystream = new CycleThreadLocal<URLRewritingStream>();
-	
-	after(URLRewritingStream stream) : execution(URLRewritingStream.new(..)) && this(stream) {
-		mystream.set(stream);
-	}
-	
 	pointcut producing(Producer prod) : 
 		(
 			execution(* Producer+.produce(OutputStream)) || 
@@ -25,7 +20,7 @@
 		) && this(prod);
 	
 	before(Producer prod) : producing(prod) {
-		URLRewritingStream stream = mystream.get();
+		URLRewritingStream stream = Cycle.get().getRewriting();
 		if (stream == null) return;
 		try {
 			stream.pushBaseUrl(prod.getBasePath());
@@ -55,7 +50,7 @@
 		} catch (Throwable e) {
 			return;
 		}
-		URLRewritingStream stream = mystream.get();
+		URLRewritingStream stream = Cycle.get().getRewriting();
 		if (stream == null) return;
 		stream.popBaseUrl();
 	}	

Modified: labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/URLRewritingStream.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/URLRewritingStream.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/URLRewritingStream.java (original)
+++ labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/URLRewritingStream.java Thu Mar 26 19:59:12 2009
@@ -33,15 +33,17 @@
 	protected int matched = -1;
 	protected int[] intbuff = new int[30];
 	protected int intbuffpos = 0;
+	protected String absolute;
 	protected String commonPrefix;
 	protected String baseurl;
 	protected Stack<String> baseurlStack = new Stack<String>();
 	private boolean injecting = false;
 	protected String templatePrefix;
 	
-	public URLRewritingStream(OutputStream out, String commonPrefix) {
+	public URLRewritingStream(OutputStream out, String commonPrefix, String absolute) {
 		super(out);
 		setCommonPrefix(commonPrefix);
+		this.absolute = absolute;
 	}
  
 	public void setBaseUrl(String baseUrl) {
@@ -132,8 +134,8 @@
 		}
 	}
 
-	public String localurl(String accontent) {
-		if (accontent.startsWith("/") || accontent.startsWith("http:/") || accontent.startsWith("#")) return accontent;
+	public String localUrl(String accontent) {
+		if (accontent.startsWith("/") || (!accontent.startsWith("magma:") && accontent.indexOf(':') != -1) || accontent.startsWith("#")) return accontent;
 		if (accontent.startsWith("magma:")) {
 			accontent = accontent.substring(6);
 			if (accontent.startsWith("template")) {
@@ -147,6 +149,18 @@
 		}		
 	}
 	
+	public String serverUrl(String accontent) {
+		String mod = localUrl(accontent);
+		if (mod.equals(accontent)) return mod;
+		return this.commonPrefix + mod;
+	}
+	
+	public String absoluteUrl(String accontent) {
+		String mod = serverUrl(accontent);
+		if (mod.equals(accontent)) return mod;
+		return this.absolute + mod;
+	}
+	
 	private void send(String segment) throws IOException {
 		if (segment != null) {
 			super.write(segment.getBytes());

Modified: labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/DefaultExpectations.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/DefaultExpectations.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/DefaultExpectations.java (original)
+++ labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/DefaultExpectations.java Thu Mar 26 19:59:12 2009
@@ -39,8 +39,9 @@
 		allowing(req).getMethod(); will(returnValue("GET"));
 		allowing(req).getLocale(); will(returnValue(Locale.ITALY));
 		one(req).getPathInfo(); will(returnValue(path));
-		atMost(1).of(req).getContextPath(); will(returnValue(""));
-		atMost(1).of(req).getServletPath(); will(returnValue(""));
+		atMost(1).of(req).getContextPath(); will(returnValue("/app"));
+		atMost(1).of(req).getServletPath(); will(returnValue("/tests"));
+		atMost(1).of(req).getRequestURL(); will(returnValue(new StringBuffer("http://localhost/app/tests" + path)));
 		allowing(req).getSession(); will(returnValue(session));
 		allowing(req).getSession(true); will(returnValue(session));
 		allowing(req).getCookies(); will(returnValue(cookies));
@@ -68,8 +69,9 @@
 		allowing(req).getMethod(); will(returnValue("GET"));
 		allowing(req).getLocale(); will(returnValue(Locale.ITALY));
 		one(req).getPathInfo(); will(returnValue(path));
-		one(req).getContextPath(); will(returnValue(""));
-		one(req).getServletPath(); will(returnValue(""));			
+		allowing(req).getContextPath(); will(returnValue("/app"));
+		allowing(req).getServletPath(); will(returnValue("/tests"));
+		allowing(req).getRequestURL(); will(returnValue(new StringBuffer("http://localhost/app/tests" + path)));
 		allowing(req).getSession(); will(returnValue(session));
 		allowing(req).getSession(true); will(returnValue(session));
 		allowing(req).getAttribute("__magma_url"); will(returnValue(path));

Modified: labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/WebHandlerCycleTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/WebHandlerCycleTest.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/WebHandlerCycleTest.java (original)
+++ labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/WebHandlerCycleTest.java Thu Mar 26 19:59:12 2009
@@ -299,10 +299,24 @@
 		def.disp = disp;
 		def.setupMinimal("/aux/checkLinks");
 		def.start();		
-		assertStructure(def.out.toString(), "<head>", "<link", "\"/aux/relative.css", "</head","<body", "<a href", "\"/aux/inside", "<a href", "\"/base", "<a href", "\"http://absolute");
+		assertStructure(def.out.toString(), "<head>", "<link", "\"/app/tests/aux/relative.css", "</head","<body", "<a href", "\"/app/tests/aux/inside", "<a href", "\"/app/tests/base", "<a href", "\"http://absolute");
 	}	
 
 	@Test
+	public void emptyLinks() throws Exception {
+		DefaultExpectations def = new DefaultExpectations() {{
+			allowing(req).getContextPath(); will(returnValue(""));
+			allowing(req).getServletPath(); will(returnValue(""));			
+		}};
+		UnitTestDispatch disp = new UnitTestDispatch();
+		disp.setTemplate(new SimpleTemplate());
+		def.disp = disp;
+		def.setupMinimal("/aux/checkLinks");
+		def.start();		
+		assertStructure(def.out.toString(), "<head>", "<link", "\"/aux/relative.css", "</head","<body", "<a href", "\"/aux/inside", "<a href", "\"/base", "<a href", "\"http://absolute");
+	}	
+	
+	@Test
 	public void resendLinks() throws Exception {
 		DefaultExpectations def = new DefaultExpectations() {{
 		}};
@@ -311,7 +325,7 @@
 		def.disp = disp;
 		def.setupMinimal("/testSession/resendLink");
 		def.start();		
-		assertStructure(def.out.toString(), "<head>", "<link", "\"/aux/relative.css", "</head","<body", "<a href", "\"/aux/inside", "<a href", "\"/base", "<a href", "\"http://absolute");
+		assertStructure(def.out.toString(), "<head>", "<link", "\"/app/tests/aux/relative.css", "</head","<body", "<a href", "\"/app/tests/aux/inside", "<a href", "\"/app/tests/base", "<a href", "\"http://absolute");
 	}
 
 	// see LABs-305

Modified: labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/RewritingTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/RewritingTest.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/RewritingTest.java (original)
+++ labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/RewritingTest.java Thu Mar 26 19:59:12 2009
@@ -48,7 +48,7 @@
 	@Theory
 	public void rewriteTest(String[] set) throws Exception {
 		ByteArrayOutputStream baos = new ByteArrayOutputStream();
-		URLRewritingStream urs = new URLRewritingStream(baos, "/context/");
+		URLRewritingStream urs = new URLRewritingStream(baos, "/context/", "http://localhost");
 		urs.setBaseUrl("current/place/");
 		urs.setTemplatePrefix("template/dummy/");
 		urs.write(set[0].getBytes());

Modified: labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/URLRewritingStreamPerformanceTests.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/URLRewritingStreamPerformanceTests.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/URLRewritingStreamPerformanceTests.java (original)
+++ labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/URLRewritingStreamPerformanceTests.java Thu Mar 26 19:59:12 2009
@@ -48,7 +48,7 @@
 		}
 		for (int j = 0; j < 500; j++) {
 			vs = new ByteArrayOutputStream(100000);
-			URLRewritingStream urs = new URLRewritingStream(vs, "/test/");
+			URLRewritingStream urs = new URLRewritingStream(vs, "/test/", "http://localhost");
 			for (int i = 0; i < 100000; i++) {
 				urs.write('a');
 			}
@@ -75,7 +75,7 @@
 		start = System.currentTimeMillis();
 		for (int j = 0; j < 500; j++) {
 			vs = new ByteArrayOutputStream(100000);
-			URLRewritingStream urs = new URLRewritingStream(vs, "/test/");
+			URLRewritingStream urs = new URLRewritingStream(vs, "/test/", "http://localhost");
 			for (int i = 0; i < 100000; i++) {
 				urs.write('a');
 			}

Modified: labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/URLRewritingStreamTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/URLRewritingStreamTest.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/URLRewritingStreamTest.java (original)
+++ labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/utils/URLRewritingStreamTest.java Thu Mar 26 19:59:12 2009
@@ -29,7 +29,7 @@
 	@Test
 	public void stateTest() throws Exception {
 		ByteArrayOutputStream baos = new ByteArrayOutputStream();
-		URLRewritingStream urs = new URLRewritingStream(baos, "/test/");
+		URLRewritingStream urs = new URLRewritingStream(baos, "/test/", "http://localhost");
 		
 		urs.write("Should not alter state".getBytes());
 		assertFalse(urs.buffering);
@@ -80,6 +80,16 @@
 		assertEquals(-1, urs.matched);
 		assertEquals(0, urs.intbuffpos);
 	}
-	
+
+	@Test
+	public void simpleMethods() throws Exception {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		URLRewritingStream urs = new URLRewritingStream(baos, "/ctx/", "http://localhost");
+		urs.setBaseUrl("dothis/dothat/");
+		
+		assertEquals("dothis/dothat/test", urs.localUrl("test"));
+		assertEquals("/ctx/dothis/dothat/test", urs.serverUrl("test"));
+		assertEquals("http://localhost/ctx/dothis/dothat/test", urs.absoluteUrl("test"));
+	}
 	
 }

Modified: labs/magma/trunk/website-dojo-pack/src/main/java/org/apache/magma/dojo/AddDojoMethodsToHead.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-dojo-pack/src/main/java/org/apache/magma/dojo/AddDojoMethodsToHead.aj?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/website-dojo-pack/src/main/java/org/apache/magma/dojo/AddDojoMethodsToHead.aj (original)
+++ labs/magma/trunk/website-dojo-pack/src/main/java/org/apache/magma/dojo/AddDojoMethodsToHead.aj Thu Mar 26 19:59:12 2009
@@ -1,10 +1,9 @@
 package org.apache.magma.dojo;
 
-import java.io.OutputStream;
 
 import org.apache.magma.settings.Settings;
 import org.apache.magma.website.Head;
-import org.apache.magma.website.utils.URLRewritingStream;
+import org.apache.magma.basics.startup.Cycle;
 
 public aspect AddDojoMethodsToHead {
 
@@ -16,13 +15,7 @@
 		}
 		addOnloadScript();
 		addExternalScript("magma:/common/dojo/setTheme.js");
-		String baseurl = null;
-		OutputStream stream = getStream();
-		if (stream instanceof URLRewritingStream) {
-			baseurl = ((URLRewritingStream)stream).getCommonPrefix() + "dojo/";
-		} else {
-			baseurl = "/dojo/";
-		}
+		String baseurl = Cycle.get().getRewriting().serverUrl("magma:/dojo/");
 		addRawScript("dojoBaseurl", "var dojoBaseurl = '" + baseurl + "';");
 	}
 	

Modified: labs/magma/trunk/website-email/src/main/java/org/apache/magma/email/AddWebBasedEmailMethods.aj
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-email/src/main/java/org/apache/magma/email/AddWebBasedEmailMethods.aj?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/website-email/src/main/java/org/apache/magma/email/AddWebBasedEmailMethods.aj (original)
+++ labs/magma/trunk/website-email/src/main/java/org/apache/magma/email/AddWebBasedEmailMethods.aj Thu Mar 26 19:59:12 2009
@@ -10,6 +10,7 @@
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.magma.basics.MagmaException;
+import org.apache.magma.basics.startup.Cycle;
 import org.apache.magma.basics.startup.CycleThreadLocal;
 import org.apache.magma.website.Head;
 import org.apache.magma.website.HtmlProducer;
@@ -18,26 +19,10 @@
 
 public aspect AddWebBasedEmailMethods {
 
-	private static CycleThreadLocal<String> absoluteBaseUrl = new CycleThreadLocal<String>();
-	
-	before(HttpServletRequest req) : 
-		HandlerSetup.inRequest() &&
-		args(req,..) {
-		StringBuffer buff = req.getRequestURL();
-		try {
-			URL url = new URL(buff.toString());
-			url = new URL(url.getProtocol(), url.getHost(), url.getPort(), req.getContextPath());
-			absoluteBaseUrl.set(url.toExternalForm());
-		} catch (MalformedURLException e) {
-		}
-	}
-	
-	
 	public Email Email.html(HtmlProducer producer) {
 		ByteArrayOutputStream baos = new ByteArrayOutputStream();
-		String abs = absoluteBaseUrl.get();
-		if (abs == null) abs = "";
-		URLRewritingStream str = new URLRewritingStream(baos, abs);
+		URLRewritingStream original = Cycle.get().getRewriting();
+		URLRewritingStream str = new URLRewritingStream(baos, original.absoluteUrl("magma:/"), "");
 		str.setBaseUrl(producer.getBasePath());
 		OutputStreamWriter osw = new OutputStreamWriter(str);
 		try {

Modified: labs/magma/trunk/website-production-optimizer/src/main/java/org/apache/magma/website/optimization/CSSUrlRewritingStream.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-production-optimizer/src/main/java/org/apache/magma/website/optimization/CSSUrlRewritingStream.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/website-production-optimizer/src/main/java/org/apache/magma/website/optimization/CSSUrlRewritingStream.java (original)
+++ labs/magma/trunk/website-production-optimizer/src/main/java/org/apache/magma/website/optimization/CSSUrlRewritingStream.java Thu Mar 26 19:59:12 2009
@@ -7,7 +7,7 @@
 public class CSSUrlRewritingStream extends URLRewritingStream {
 
 	public CSSUrlRewritingStream(OutputStream out, URLRewritingStream other) {
-		super(out, "");
+		super(out, "", "");
 		super.inside = true;
 		super.insider = ':';
 		super.outsider = ';';

Modified: labs/magma/trunk/website-production-optimizer/src/main/java/org/apache/magma/website/optimization/InliningHtmlHead.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-production-optimizer/src/main/java/org/apache/magma/website/optimization/InliningHtmlHead.java?rev=758824&r1=758823&r2=758824&view=diff
==============================================================================
--- labs/magma/trunk/website-production-optimizer/src/main/java/org/apache/magma/website/optimization/InliningHtmlHead.java (original)
+++ labs/magma/trunk/website-production-optimizer/src/main/java/org/apache/magma/website/optimization/InliningHtmlHead.java Thu Mar 26 19:59:12 2009
@@ -2,6 +2,7 @@
 
 import java.io.OutputStream;
 
+import org.apache.magma.basics.startup.Cycle;
 import org.apache.magma.website.Head;
 import org.apache.magma.website.Producer;
 import org.apache.magma.website.RootWebHandler;
@@ -23,11 +24,9 @@
 		if (prod != null) {
 			rawWrite(prefix);
 			OutputStream rightstream = super.stream;
-			if (rewriting != null) {
-				rightstream = rewriting.getNonRewritingStream();
-				if (css) {
-					rightstream = new CSSUrlRewritingStream(rightstream, rewriting);
-				}
+			rightstream = Cycle.get().getRewriting().getNonRewritingStream();
+			if (css) {
+				rightstream = new CSSUrlRewritingStream(rightstream, Cycle.get().getRewriting());
 			}
 			prod.produce(rightstream);
 			rawWrite(postfix);
@@ -36,34 +35,26 @@
 
 	@Override
 	public void addCss(String name) {
-		if (!containsComponent(name)) {
-			if (rewriting != null) {
-				String locname = rewriting.localurl(name);
-				if (locname.equals(name)) {
-					super.addCss(name);
-				} else {
-                    inline("<style type=\"text/css\">/*<![CDATA[*/\n", locname, "\n/*]]>*/</style>", true);
-					added(name);
-				}
-			} else {
+		String ctxname = contextualize(name);
+		if (!containsComponent(ctxname)) {
+			if (ctxname.equals(name)) {
 				super.addCss(name);
+			} else {
+                inline("<style type=\"text/css\">/*<![CDATA[*/\n", ctxname, "\n/*]]>*/</style>", true);
+				added(ctxname);
 			}
 		}		
 	}
 
 	@Override
 	public void addExternalScript(String name, String mimeType) {
-		if (!containsComponent(name)) {
-			if (rewriting != null) {
-				String locname = rewriting.localurl(name);
-				if (locname.equals(name)) {
-					super.addExternalScript(name, mimeType);
-				} else {
-                    inline("<script type=\"" + mimeType + "\">//<![CDATA[\n", locname, "\n//]]></script>", false);
-					added(name);
-				}
-			} else {
+		String ctxname = contextualize(name);		
+		if (!containsComponent(ctxname)) {
+			if (ctxname.equals(name)) {
 				super.addExternalScript(name, mimeType);
+			} else {
+                inline("<script type=\"" + mimeType + "\">//<![CDATA[\n", ctxname, "\n//]]></script>", false);
+				added(name);
 			}
 		}		
 	}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org