001: /*
002: * $Id: LinkUserTag.java 471754 2006-11-06 14:55:09Z husted $
003: *
004: * Licensed to the Apache Software Foundation (ASF) under one
005: * or more contributor license agreements. See the NOTICE file
006: * distributed with this work for additional information
007: * regarding copyright ownership. The ASF licenses this file
008: * to you under the Apache License, Version 2.0 (the
009: * "License"); you may not use this file except in compliance
010: * with the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017: * KIND, either express or implied. See the License for the
018: * specific language governing permissions and limitations
019: * under the License.
020: */
021:
022: package org.apache.struts.webapp.example;
023:
024: import java.io.IOException;
025:
026: import javax.servlet.http.HttpServletRequest;
027: import javax.servlet.http.HttpServletResponse;
028: import javax.servlet.jsp.JspException;
029: import javax.servlet.jsp.JspWriter;
030: import javax.servlet.jsp.tagext.TagSupport;
031:
032: import org.apache.struts.util.MessageResources;
033: import org.apache.struts.util.ResponseUtils;
034:
035: /**
036: * Generate a URL-encoded hyperlink to the specified URI, with
037: * associated query parameters selecting a specified User.
038: *
039: * @author Craig R. McClanahan
040: * @version $Rev: 471754 $ $Date: 2006-11-06 08:55:09 -0600 (Mon, 06 Nov 2006) $
041: */
042:
043: public class LinkUserTag extends TagSupport {
044:
045: // ------------------------------------------------------ Instance Variables
046:
047: /**
048: * The hyperlink URI.
049: */
050: protected String page = null;
051:
052: /**
053: * The message resources for this package.
054: */
055: protected static MessageResources messages = MessageResources
056: .getMessageResources("org.apache.struts.webapp.example.ApplicationResources");
057:
058: /**
059: * The attribute name.
060: */
061: private String name = "user";
062:
063: // ------------------------------------------------------------- Properties
064:
065: /**
066: * Return the hyperlink URI.
067: */
068: public String getPage() {
069:
070: return (this .page);
071:
072: }
073:
074: /**
075: * Set the hyperlink URI.
076: *
077: * @param page Set the hyperlink URI
078: */
079: public void setPage(String page) {
080:
081: this .page = page;
082:
083: }
084:
085: /**
086: * Return the attribute name.
087: */
088: public String getName() {
089:
090: return (this .name);
091:
092: }
093:
094: /**
095: * Set the attribute name.
096: *
097: * @param name The new attribute name
098: */
099: public void setName(String name) {
100:
101: this .name = name;
102:
103: }
104:
105: // --------------------------------------------------------- Public Methods
106:
107: /**
108: * Render the beginning of the hyperlink.
109: *
110: * @exception JspException if a JSP exception has occurred
111: */
112: public int doStartTag() throws JspException {
113:
114: // Generate the URL to be encoded
115: HttpServletRequest request = (HttpServletRequest) pageContext
116: .getRequest();
117: StringBuffer url = new StringBuffer(request.getContextPath());
118: url.append(page);
119: User user = null;
120: try {
121: user = (User) pageContext.findAttribute(name);
122: } catch (ClassCastException e) {
123: user = null;
124: }
125: if (user == null)
126: throw new JspException(messages.getMessage(
127: "linkUser.noUser", name));
128: if (page.indexOf("?") < 0)
129: url.append("?");
130: else
131: url.append("&");
132: url.append("username=");
133: url.append(ResponseUtils.filter(user.getUsername()));
134:
135: // Generate the hyperlink start element
136: HttpServletResponse response = (HttpServletResponse) pageContext
137: .getResponse();
138: StringBuffer results = new StringBuffer("<a href=\"");
139: results.append(response.encodeURL(url.toString()));
140: results.append("\">");
141:
142: // Print this element to our output writer
143: JspWriter writer = pageContext.getOut();
144: try {
145: writer.print(results.toString());
146: } catch (IOException e) {
147: throw new JspException(messages.getMessage("linkUser.io", e
148: .toString()));
149: }
150:
151: // Evaluate the body of this tag
152: return (EVAL_BODY_INCLUDE);
153:
154: }
155:
156: /**
157: * Render the end of the hyperlink.
158: *
159: * @exception JspException if a JSP exception has occurred
160: */
161: public int doEndTag() throws JspException {
162:
163: // Print the ending element to our output writer
164: JspWriter writer = pageContext.getOut();
165: try {
166: writer.print("</a>");
167: } catch (IOException e) {
168: throw new JspException(messages.getMessage("link.io", e
169: .toString()));
170: }
171:
172: return (EVAL_PAGE);
173:
174: }
175:
176: /**
177: * Release any acquired resources.
178: */
179: public void release() {
180:
181: super .release();
182: this .page = null;
183: this .name = "user";
184:
185: }
186:
187: }
|