001: /*
002: * $Id: BookmarkablePageRequestTargetUrlCodingStrategy.java,v 1.1 2005/12/10
003: * 21:28:56 eelco12 Exp $ $Revision: 463947 $ $Date: 2006-05-12 16:19:05 +0000
004: * (Fri, 12 May 2006) $
005: *
006: * ==============================================================================
007: * Licensed under the Apache License, Version 2.0 (the "License"); you may not
008: * use this file except in compliance with the License. You may obtain a copy of
009: * the License at
010: *
011: * http://www.apache.org/licenses/LICENSE-2.0
012: *
013: * Unless required by applicable law or agreed to in writing, software
014: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
015: * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
016: * License for the specific language governing permissions and limitations under
017: * the License.
018: */
019: package wicket.request.target.coding;
020:
021: import wicket.IRequestTarget;
022: import wicket.PageParameters;
023: import wicket.protocol.http.request.WebRequestCodingStrategy;
024: import wicket.request.RequestParameters;
025: import wicket.request.target.component.BookmarkablePageRequestTarget;
026: import wicket.request.target.component.IBookmarkablePageRequestTarget;
027: import wicket.util.string.AppendingStringBuffer;
028:
029: /**
030: * Encodes and decodes mounts for a single bookmarkable page class.
031: *
032: * @author Eelco Hillenius
033: */
034: public class BookmarkablePageRequestTargetUrlCodingStrategy extends
035: AbstractRequestTargetUrlCodingStrategy {
036: /** bookmarkable page class. */
037: private final Class bookmarkablePageClass;
038:
039: /** page map name. */
040: private final String pageMapName;
041:
042: /**
043: * Construct.
044: *
045: * @param mountPath
046: * the mount path
047: * @param bookmarkablePageClass
048: * the class of the bookmarkable page
049: * @param pageMapName
050: * the page map name if any
051: */
052: public BookmarkablePageRequestTargetUrlCodingStrategy(
053: final String mountPath, final Class bookmarkablePageClass,
054: String pageMapName) {
055: super (mountPath);
056:
057: if (bookmarkablePageClass == null) {
058: throw new IllegalArgumentException(
059: "Argument bookmarkablePageClass must be not null");
060: }
061:
062: this .bookmarkablePageClass = bookmarkablePageClass;
063: this .pageMapName = pageMapName;
064: }
065:
066: /**
067: * @see wicket.request.target.coding.IRequestTargetUrlCodingStrategy#decode(wicket.request.RequestParameters)
068: */
069: public IRequestTarget decode(RequestParameters requestParameters) {
070: final String parametersFragment = requestParameters.getPath()
071: .substring(getMountPath().length());
072: final PageParameters parameters = new PageParameters(
073: decodeParameters(parametersFragment, requestParameters
074: .getParameters()));
075: String pageMapName = (String) parameters
076: .remove(WebRequestCodingStrategy.PAGEMAP);
077: if (requestParameters.getPageMapName() == null) {
078: requestParameters.setPageMapName(pageMapName);
079: } else {
080: pageMapName = requestParameters.getPageMapName();
081: }
082:
083: final BookmarkablePageRequestTarget target = new BookmarkablePageRequestTarget(
084: pageMapName, bookmarkablePageClass, parameters);
085: return target;
086: }
087:
088: /**
089: * @see wicket.request.target.coding.IRequestTargetUrlCodingStrategy#encode(wicket.IRequestTarget)
090: */
091: public final CharSequence encode(final IRequestTarget requestTarget) {
092: if (!(requestTarget instanceof IBookmarkablePageRequestTarget)) {
093: throw new IllegalArgumentException(
094: "This encoder can only be used with "
095: + "instances of "
096: + IBookmarkablePageRequestTarget.class
097: .getName());
098: }
099: final AppendingStringBuffer url = new AppendingStringBuffer(40);
100: url.append(getMountPath());
101: final IBookmarkablePageRequestTarget target = (IBookmarkablePageRequestTarget) requestTarget;
102:
103: PageParameters pageParameters = target.getPageParameters();
104: String pagemap = pageMapName != null ? pageMapName : target
105: .getPageMapName();
106: if (pagemap != null) {
107: if (pageParameters == null) {
108: pageParameters = new PageParameters();
109: }
110: pageParameters.put(WebRequestCodingStrategy.PAGEMAP,
111: pagemap);
112: }
113: appendParameters(url, pageParameters);
114: return url;
115: }
116:
117: /**
118: * @see wicket.request.target.coding.IRequestTargetUrlCodingStrategy#matches(wicket.IRequestTarget)
119: */
120: public boolean matches(IRequestTarget requestTarget) {
121: if (requestTarget instanceof IBookmarkablePageRequestTarget) {
122: IBookmarkablePageRequestTarget target = (IBookmarkablePageRequestTarget) requestTarget;
123: if (bookmarkablePageClass.equals(target.getPageClass())) {
124: if (this .pageMapName == null) {
125: return true;
126: } else {
127: return this .pageMapName.equals(target
128: .getPageMapName());
129: }
130: }
131: }
132: return false;
133: }
134:
135: /**
136: * @see java.lang.Object#toString()
137: */
138: public String toString() {
139: return "BookmarkablePageEncoder[page=" + bookmarkablePageClass
140: + "]";
141: }
142: }
|