001: /*
002: * SelectEPersonTag
003: *
004: * Version: $Revision: 1866 $
005: *
006: * Date: $Date: 2007-04-23 09:20:41 -0500 (Mon, 23 Apr 2007) $
007: *
008: * Copyright (c) 2002, Hewlett-Packard Company and Massachusetts
009: * Institute of Technology. All rights reserved.
010: *
011: * Redistribution and use in source and binary forms, with or without
012: * modification, are permitted provided that the following conditions are
013: * met:
014: *
015: * - Redistributions of source code must retain the above copyright
016: * notice, this list of conditions and the following disclaimer.
017: *
018: * - Redistributions in binary form must reproduce the above copyright
019: * notice, this list of conditions and the following disclaimer in the
020: * documentation and/or other materials provided with the distribution.
021: *
022: * - Neither the name of the Hewlett-Packard Company nor the name of the
023: * Massachusetts Institute of Technology nor the names of their
024: * contributors may be used to endorse or promote products derived from
025: * this software without specific prior written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
028: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
029: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
030: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
031: * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
032: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
033: * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
034: * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
035: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
036: * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
037: * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
038: * DAMAGE.
039: */
040:
041: package org.dspace.app.webui.jsptag;
042:
043: import java.io.IOException;
044:
045: import javax.servlet.http.HttpServletRequest;
046: import javax.servlet.jsp.JspException;
047: import javax.servlet.jsp.JspWriter;
048: import javax.servlet.jsp.jstl.fmt.LocaleSupport;
049: import javax.servlet.jsp.tagext.TagSupport;
050:
051: import org.dspace.eperson.Group;
052:
053: /**
054: * <P>Tag for producing an e-person select widget in a form. Somewhat
055: * analogous to the HTML SELECT element. An input
056: * field is produced with a button which pops up a window from which
057: * e-people can be selected. Selected e-epeople are added to the field
058: * in the form. If the selector is for multiple e-people, a 'remove
059: * selected from list' button is also added.</P>
060: *
061: * <P>On any form that has a selecteperson tag (only one allowed per page),
062: * you need to include the following Javascript code on all of the submit
063: * buttons, to ensure that the e-people IDs are posted and that the popup
064: * window is closed:</P>
065: *
066: * <P><code>onclick="javascript:finishEPerson();"</code></P>
067: *
068: * @author Robert Tansley
069: * @version $Revision: 1866 $
070: */
071: public class SelectGroupTag extends TagSupport {
072: /** Multiple groups? */
073: private boolean multiple;
074:
075: /** Which groups are initially in the list? */
076: private Group[] groups;
077:
078: public SelectGroupTag() {
079: super ();
080: }
081:
082: /**
083: * Setter for multiple attribute
084: *
085: * @param s attribute from JSP
086: */
087: public void setMultiple(String s) {
088: if (s != null
089: && (s.equalsIgnoreCase("yes") || s
090: .equalsIgnoreCase("true"))) {
091: multiple = true;
092: } else {
093: multiple = false;
094: }
095: }
096:
097: /**
098: * Setter for groups in list
099: *
100: * @param e attribute from JSP
101: */
102: public void setSelected(Object g) {
103: if (g instanceof Group) {
104: groups = new Group[1];
105: groups[0] = (Group) g;
106: } else if (g instanceof Group[]) {
107: groups = (Group[]) g;
108: }
109: }
110:
111: public void release() {
112: multiple = false;
113: groups = null;
114: }
115:
116: public int doStartTag() throws JspException {
117: try {
118: JspWriter out = pageContext.getOut();
119: HttpServletRequest req = (HttpServletRequest) pageContext
120: .getRequest();
121:
122: out
123: .print("<table><tr><td colspan=\"2\" align=\"center\"><select multiple=\"multiple\" name=\"group_ids\" size=\"");
124: out.print(multiple ? "10" : "1");
125: out.println("\">");
126:
127: //ensure that if no group is selected that a blank option is displayed - xhtml compliance
128: if (groups == null || groups.length == 0) {
129: out.print("<option value=\"\"> </option>");
130: }
131:
132: if (groups != null) {
133: for (int i = 0; i < groups.length; i++) {
134: out.print("<option value=\"" + groups[i].getID()
135: + "\">");
136: out.print(groups[i].getName() + " ("
137: + groups[i].getID() + ")");
138: out.println("</option>");
139: }
140: }
141:
142: out.print("</select></td>");
143:
144: if (multiple) {
145: out
146: .print("</tr><tr><td width=\"50%\" align=\"center\">");
147: } else {
148: out.print("<td>");
149: }
150:
151: String p = (multiple ? LocaleSupport
152: .getLocalizedMessage(pageContext,
153: "org.dspace.app.webui.jsptag.SelectGroupTag.selectGroups")
154: : LocaleSupport
155: .getLocalizedMessage(pageContext,
156: "org.dspace.app.webui.jsptag.SelectGroupTag.selectGroup"));
157: out.print("<input type=\"button\" value=\"" + p
158: + "\" onclick=\"javascript:popup_window('"
159: + req.getContextPath()
160: + "/tools/group-select-list?multiple=" + multiple
161: + "', 'group_popup');\" />");
162:
163: if (multiple) {
164: out.print("</td><td width=\"50%\" align=\"center\">");
165: out
166: .print("<input type=\"button\" value=\""
167: + LocaleSupport
168: .getLocalizedMessage(
169: pageContext,
170: "org.dspace.app.webui.jsptag.SelectGroupTag.removeSelected")
171: + "\" onclick=\"javascript:removeSelected(window.document.epersongroup.group_ids);\"/>");
172: }
173:
174: out.println("</td></tr></table>");
175: } catch (IOException ie) {
176: throw new JspException(ie);
177: }
178:
179: return SKIP_BODY;
180: }
181: }
|