01: /*
02: JSPWiki - a JSP-based WikiWiki clone.
03:
04: Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
05:
06: This program is free software; you can redistribute it and/or modify
07: it under the terms of the GNU Lesser General Public License as published by
08: the Free Software Foundation; either version 2.1 of the License, or
09: (at your option) any later version.
10:
11: This program is distributed in the hope that it will be useful,
12: but WITHOUT ANY WARRANTY; without even the implied warranty of
13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: GNU Lesser General Public License for more details.
15:
16: You should have received a copy of the GNU Lesser General Public License
17: along with this program; if not, write to the Free Software
18: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19: */
20: package com.ecyrd.jspwiki.ui;
21:
22: import java.security.Permission;
23:
24: /**
25: * <p>Defines Commands for redirections to off-site special pages.
26: * RedirectCommands do not have associated
27: * permissions; the {@link #requiredPermission()} method will
28: * always return <code>null</code>. When combined with a supplied String
29: * url, the {@link #getTarget()} method will return a String, the
30: * {@link #getURLPattern()} method will return the supplied target URL,
31: * and {@link #getJSP()} method will return the "cleansed" URL.</p>
32: * <p>This class is not <code>final</code>; it may be extended in
33: * the future.</p>
34: * @author Andrew Jaquith
35: * @since 2.4.22
36: */
37: public final class RedirectCommand extends AbstractCommand {
38:
39: public static final Command REDIRECT = new RedirectCommand("",
40: "%u%n", null, null);
41:
42: /**
43: * Constructs a new Command with a specified wiki context, URL pattern,
44: * type, and content template. The WikiPage for this action is initialized
45: * to <code>null</code>.
46: * @param requestContext the request context
47: * @param urlPattern the URL pattern
48: * @param contentTemplate the content template; may be <code>null</code>
49: * @param target the target of the command
50: * @return IllegalArgumentException if the request content, URL pattern, or
51: * type is <code>null</code>
52: */
53: private RedirectCommand(String requestContext, String urlPattern,
54: String contentTemplate, String target) {
55: super (requestContext, urlPattern, contentTemplate, target);
56: }
57:
58: /**
59: * Creates and returns a targeted Command by combining a URL
60: * (as String) with this Command. The supplied <code>target</code>
61: * object must be non-<code>null</code> and of type String.
62: * The URL passed to the constructor is actually an
63: * URL pattern, but it will be converted to a JSP page if it is a partial
64: * URL. If it is a full URL (beginning with <code>http://</code> or
65: * <code>https://</code>), it will be "passed through" without
66: * conversion, and the URL pattern will be <code>null</code>.
67: * @param target the object to combine
68: * @throws IllegalArgumentException if the target is not of the correct type
69: */
70: public final Command targetedCommand(Object target) {
71: if (!(target != null && target instanceof String)) {
72: throw new IllegalArgumentException(
73: "Target must non-null and of type String.");
74: }
75: return new RedirectCommand(getRequestContext(),
76: (String) target, getContentTemplate(), (String) target);
77: }
78:
79: /**
80: * @see com.ecyrd.jspwiki.ui.Command#getName()
81: */
82: public final String getName() {
83: Object target = getTarget();
84: if (target == null) {
85: return getJSPFriendlyName();
86: }
87: return target.toString();
88: }
89:
90: /**
91: * No-op; always returns <code>null</code>.
92: * @see com.ecyrd.jspwiki.ui.Command#requiredPermission()
93: */
94: public final Permission requiredPermission() {
95: return null;
96: }
97: }
|