All pastes #1173557 Raw Edit

Someone

public java v1 · immutable
#1173557 ·published 2008-08-15 22:57 UTC
rendered paste body
package zeuzgroup.application.utils;import java.util.Locale;import java.util.Map;import org.apache.log4j.Logger;import org.apache.wicket.IRequestTarget;import org.apache.wicket.Page;import org.apache.wicket.Request;import org.apache.wicket.RequestCycle;import org.apache.wicket.request.IRequestCodingStrategy;import org.apache.wicket.request.RequestParameters;import org.apache.wicket.request.target.coding.IRequestTargetUrlCodingStrategy;/** * encoding strategy that prepends keyword to url, usefull for caching *  *  * @author Nino Martinez Wael (nino.martinez@jayway.dk) *  */public class PrependKeywordEncodingStrategy implements IRequestCodingStrategy {	/** log. */	private static org.apache.log4j.Logger log = Logger			.getLogger(PrependKeywordEncodingStrategy.class);	/** The default request coding strategy most of the methods are delegated to */	private final IRequestCodingStrategy defaultStrategy;	private final String keyword;	/**	 * Construct.	 * 	 * @param defaultStrategy	 *            The default strategy most requests are forwarded to	 */	public PrependKeywordEncodingStrategy(			final IRequestCodingStrategy defaultStrategy, String keyword) {		this.defaultStrategy = defaultStrategy;		this.keyword = keyword;	}	/**	 * Decode the querystring of the URL	 * 	 * @see org.apache.wicket.request.IRequestCodingStrategy#decode(org.apache.wicket.Request)	 */	public RequestParameters decode(final Request request) {		if (request.getURL().contains(keyword)) {			String url = request.decodeURL(request.getURL());			// remove locale from request			url = url.replace(keyword, "");			Request fakeRequest = new FakeRequest(request, url);			return defaultStrategy.decode(fakeRequest);		}		return defaultStrategy.decode(request);	}	/**	 * Encode the querystring of the URL	 * 	 * @see org.apache.wicket.request.IRequestCodingStrategy#encode(org.apache.wicket.RequestCycle,	 *      org.apache.wicket.IRequestTarget)	 */	public CharSequence encode(final RequestCycle requestCycle,			final IRequestTarget requestTarget) {		Page page = requestCycle.getRequest().getPage();		CharSequence url = defaultStrategy.encode(requestCycle, requestTarget);		if (ContainsKeyword.class.isInstance(page)) {			ContainsKeyword containsKeyword = (ContainsKeyword) page;			if (containsKeyword.hasKeyword()) {				if (url != "./") {					if (url.subSequence(url.length() - 1, url.length())							.toString().compareTo("/") == 0) {						url = url.subSequence(0, url.length() - 1);					}					url = url + "/" + keyword;				}			}		}		return url;	}	/**	 * @see org.apache.wicket.request.IRequestTargetMounter#mount(	 *      org.apache.wicket.request.target.coding.IRequestTargetUrlCodingStrategy)	 */	public void mount(IRequestTargetUrlCodingStrategy urlCodingStrategy) {		defaultStrategy.mount(urlCodingStrategy);	}	/**	 * @see org.apache.wicket.request.IRequestTargetMounter#unmount(java.lang.String)	 */	public void unmount(String path) {		defaultStrategy.unmount(path);	}	/**	 * @see org.apache.wicket.request.IRequestTargetMounter#urlCodingStrategyForPath(java.lang.String)	 */	public IRequestTargetUrlCodingStrategy urlCodingStrategyForPath(String path) {		return defaultStrategy.urlCodingStrategyForPath(path);	}	/**	 * @see org.apache.wicket.request.IRequestTargetMounter#pathForTarget(org.apache.wicket.IRequestTarget)	 */	public CharSequence pathForTarget(IRequestTarget requestTarget) {		return defaultStrategy.pathForTarget(requestTarget);	}	/**	 * @see org.apache.wicket.request.IRequestTargetMounter#targetForRequest(org.apache.wicket.request.RequestParameters)	 */	public IRequestTarget targetForRequest(RequestParameters requestParameters) {		return defaultStrategy.targetForRequest(requestParameters);	}	private static class FakeRequest extends Request {		private final Request request;		/** The new URL with the locale removed */		private final String url;		public FakeRequest(Request request, String url) {			this.request = request;			this.url = url;		}		@Override		public Locale getLocale() {			return request.getLocale();		}		@Override		public String getParameter(String key) {			return request.getParameter(key);		}		@Override		public Map getParameterMap() {			return request.getParameterMap();		}		@Override		public String[] getParameters(String key) {			return request.getParameters(key);		}		@Override		public String getPath() {			return url;		}		@Override		public String getRelativePathPrefixToContextRoot() {			return request.getRelativePathPrefixToContextRoot();		}		@Override		public String getRelativePathPrefixToWicketHandler() {			return request.getRelativePathPrefixToWicketHandler();		}		@Override		public String getURL() {			return url;		}	}}