You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by al...@apache.org on 2007/05/13 18:12:53 UTC

svn commit: r537607 - in /incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket: RequestCycle.java protocol/http/servlet/ServletWebRequest.java

Author: almaw
Date: Sun May 13 09:12:52 2007
New Revision: 537607

URL: http://svn.apache.org/viewvc?view=rev&rev=537607
Log:
Cache depth and relative URLs for much better link-generation performance.

Modified:
    incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
    incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java

Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java?view=diff&rev=537607&r1=537606&r2=537607
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java Sun May 13 09:12:52 2007
@@ -704,7 +704,7 @@
 		params.setBehaviorId(String.valueOf(index));
 		if (request instanceof ServletWebRequest)
 		{
-			params.setUrlDepth(((ServletWebRequest)request).getRelativePathPrefixToWicketHandler().length() / 3);
+			params.setUrlDepth(((ServletWebRequest)request).getDepthRelativeToWicketHandler());
 		}
 
 		final IRequestTarget target = new BehaviorRequestTarget(component.getPage(), component,

Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java?view=diff&rev=537607&r1=537606&r2=537607
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java Sun May 13 09:12:52 2007
@@ -48,6 +48,10 @@
 
 	/** Servlet request information. */
 	private final HttpServletRequest httpServletRequest;
+	
+	private int depthRelativeToWicketHandler = -1;
+	private String relativePathPrefixToWicketHandler;
+	private String relativePathPrefixToContextRoot;
 
 	/**
 	 * Protected constructor.
@@ -131,6 +135,10 @@
 
 	public String getRelativePathPrefixToContextRoot()
 	{
+		if (relativePathPrefixToWicketHandler != null)
+		{
+			return relativePathPrefixToWicketHandler;
+		}
 		String tmp = getRelativePathPrefixToWicketHandler();
 		String servletPath = getServletPath();
 		if (servletPath == null || servletPath.length() == 0)
@@ -150,11 +158,29 @@
 				prepender.prepend("../");
 			}
 		}
-		return prepender.toString();
+		return relativePathPrefixToWicketHandler = prepender.toString();
+	}
+	
+	/**
+	 * Gets the depth of this request relative to the Wicket handler.
+	 * @return
+	 */
+	public int getDepthRelativeToWicketHandler()
+	{
+		if (depthRelativeToWicketHandler == -1)
+		{
+			// Initialize it.
+			getRelativePathPrefixToWicketHandler();
+		}
+		return depthRelativeToWicketHandler;
 	}
 	
 	public String getRelativePathPrefixToWicketHandler()
 	{
+		if (relativePathPrefixToWicketHandler != null)
+		{
+			return relativePathPrefixToWicketHandler;
+		}
 		String relativeUrl = getPath();
 		PrependingStringBuffer prepender = new PrependingStringBuffer();
 
@@ -204,25 +230,36 @@
 			}
 			return prepender.toString();
 		}
-		else if (forwardUrl != null)
+		
+		if (forwardUrl != null)
 		{
 			// Strip off leading slash, if forwardUrl has any length.
 			relativeUrl = forwardUrl.substring(relativeUrl.length() > 0 ? 1 : 0);
 		}
 
-		for (int i = 0; i < relativeUrl.length(); i++)
+		if (depthRelativeToWicketHandler == -1)
 		{
-			if (relativeUrl.charAt(i) == '?')
+			int depth = 0;
+			for (int i = 0; i < relativeUrl.length(); i++)
 			{
-				break;
-			}
-			if (relativeUrl.charAt(i) == '/')
-			{
-				prepender.prepend("../");
+				if (relativeUrl.charAt(i) == '?')
+				{
+					break;
+				}
+				if (relativeUrl.charAt(i) == '/')
+				{
+					depth++;
+				}
 			}
+			depthRelativeToWicketHandler = depth;
 		}
-
-		return prepender.toString();
+		
+		for (int i = 0; i < depthRelativeToWicketHandler; i++)
+		{
+			prepender.prepend("../");
+		}
+		
+		return relativePathPrefixToWicketHandler = prepender.toString();
 	}
 
 	/**