001: /*
002: * EPersonAdminServlet.java
003: *
004: * Version: $Revision: 1947 $
005: *
006: * Date: $Date: 2007-05-18 08:50:29 -0500 (Fri, 18 May 2007) $
007: *
008: * Copyright (c) 2002-2005, 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: package org.dspace.app.webui.servlet.admin;
041:
042: import java.io.IOException;
043: import java.sql.SQLException;
044:
045: import javax.servlet.ServletException;
046: import javax.servlet.http.HttpServletRequest;
047: import javax.servlet.http.HttpServletResponse;
048:
049: import org.apache.log4j.Logger;
050: import org.dspace.app.webui.servlet.DSpaceServlet;
051: import org.dspace.app.webui.util.JSPManager;
052: import org.dspace.app.webui.util.UIUtil;
053: import org.dspace.authorize.AuthorizeException;
054: import org.dspace.core.Context;
055: import org.dspace.eperson.EPerson;
056: import org.dspace.eperson.Group;
057: import org.dspace.eperson.EPersonDeletionException;
058:
059: /**
060: * Servlet for editing and creating e-people
061: *
062: * @author David Stuve
063: * @version $Revision: 1947 $
064: */
065: public class EPersonAdminServlet extends DSpaceServlet {
066: /** Logger */
067: private static Logger log = Logger
068: .getLogger(EPersonAdminServlet.class);
069:
070: protected void doDSGet(Context context, HttpServletRequest request,
071: HttpServletResponse response) throws ServletException,
072: IOException, SQLException, AuthorizeException {
073: showMain(context, request, response);
074: }
075:
076: protected void doDSPost(Context context,
077: HttpServletRequest request, HttpServletResponse response)
078: throws ServletException, IOException, SQLException,
079: AuthorizeException {
080: String button = UIUtil.getSubmitButton(request, "submit");
081:
082: if (button.equals("submit_add")) {
083: // add an EPerson, then jump user to edit page
084: EPerson e = EPerson.create(context);
085:
086: // create clever name and do update before continuing
087: e.setEmail("newuser" + e.getID());
088: e.update();
089:
090: request.setAttribute("eperson", e);
091:
092: JSPManager.showJSP(request, response,
093: "/dspace-admin/eperson-edit.jsp");
094:
095: context.complete();
096: } else if (button.equals("submit_edit")) {
097: // edit an eperson
098: EPerson e = EPerson.find(context, UIUtil.getIntParameter(
099: request, "eperson_id"));
100:
101: // Check the EPerson exists
102: if (e == null) {
103: request.setAttribute("no_eperson_selected",
104: new Boolean(true));
105: showMain(context, request, response);
106: } else {
107: // what groups is this person a member of?
108: Group[] groupMemberships = Group.allMemberGroups(
109: context, e);
110:
111: request.setAttribute("eperson", e);
112: request.setAttribute("group.memberships",
113: groupMemberships);
114:
115: JSPManager.showJSP(request, response,
116: "/dspace-admin/eperson-edit.jsp");
117:
118: context.complete();
119: }
120: } else if (button.equals("submit_save")) {
121: // Update the metadata for an e-person
122: EPerson e = EPerson.find(context, UIUtil.getIntParameter(
123: request, "eperson_id"));
124:
125: // see if the user changed the email - if so, make sure
126: // the new email is unique
127: String oldEmail = e.getEmail();
128: String newEmail = request.getParameter("email").trim();
129: String netid = request.getParameter("netid");
130:
131: if (!newEmail.equals(oldEmail)) {
132: // change to email, now see if it's unique
133: if (EPerson.findByEmail(context, newEmail) == null) {
134: // it's unique - proceed!
135: e.setEmail(newEmail);
136:
137: e.setFirstName(request.getParameter("firstname")
138: .equals("") ? null : request
139: .getParameter("firstname"));
140:
141: e.setLastName(request.getParameter("lastname")
142: .equals("") ? null : request
143: .getParameter("lastname"));
144:
145: if (netid != null) {
146: e.setNetid(netid.equals("") ? null : netid);
147: } else {
148: e.setNetid(null);
149: }
150:
151: // FIXME: More data-driven?
152: e.setMetadata("phone", request
153: .getParameter("phone").equals("") ? null
154: : request.getParameter("phone"));
155:
156: e.setMetadata("language", request.getParameter(
157: "language").equals("") ? null : request
158: .getParameter("language"));
159:
160: e
161: .setCanLogIn((request
162: .getParameter("can_log_in") != null)
163: && request.getParameter(
164: "can_log_in")
165: .equals("true"));
166:
167: e
168: .setRequireCertificate((request
169: .getParameter("require_certificate") != null)
170: && request.getParameter(
171: "require_certificate")
172: .equals("true"));
173:
174: e.update();
175:
176: showMain(context, request, response);
177: context.complete();
178: } else {
179: // not unique - send error message & let try again
180: request.setAttribute("eperson", e);
181: request.setAttribute("email_exists", new Boolean(
182: true));
183:
184: JSPManager.showJSP(request, response,
185: "/dspace-admin/eperson-edit.jsp");
186:
187: context.complete();
188: }
189: } else {
190: // no change to email
191: if (netid != null) {
192: e.setNetid(netid.equals("") ? null : netid);
193: } else {
194: e.setNetid(null);
195: }
196:
197: e.setFirstName(request.getParameter("firstname")
198: .equals("") ? null : request
199: .getParameter("firstname"));
200:
201: e.setLastName(request.getParameter("lastname").equals(
202: "") ? null : request.getParameter("lastname"));
203:
204: // FIXME: More data-driven?
205: e.setMetadata("phone", request.getParameter("phone")
206: .equals("") ? null : request
207: .getParameter("phone"));
208:
209: e.setMetadata("language", request.getParameter(
210: "language").equals("") ? null : request
211: .getParameter("language"));
212:
213: e
214: .setCanLogIn((request
215: .getParameter("can_log_in") != null)
216: && request.getParameter("can_log_in")
217: .equals("true"));
218:
219: e.setRequireCertificate((request
220: .getParameter("require_certificate") != null)
221: && request.getParameter("require_certificate")
222: .equals("true"));
223:
224: e.update();
225:
226: showMain(context, request, response);
227: context.complete();
228: }
229: } else if (button.equals("submit_delete")) {
230: // Start delete process - go through verification step
231: EPerson e = EPerson.find(context, UIUtil.getIntParameter(
232: request, "eperson_id"));
233:
234: // Check the EPerson exists
235: if (e == null) {
236: request.setAttribute("no_eperson_selected",
237: new Boolean(true));
238: showMain(context, request, response);
239: } else {
240: request.setAttribute("eperson", e);
241:
242: JSPManager.showJSP(request, response,
243: "/dspace-admin/eperson-confirm-delete.jsp");
244: }
245: } else if (button.equals("submit_confirm_delete")) {
246: // User confirms deletion of type
247: EPerson e = EPerson.find(context, UIUtil.getIntParameter(
248: request, "eperson_id"));
249:
250: try {
251: e.delete();
252: } catch (EPersonDeletionException ex) {
253: request.setAttribute("eperson", e);
254: request.setAttribute("tableList", ex.getTables());
255: JSPManager.showJSP(request, response,
256: "/dspace-admin/eperson-deletion-error.jsp");
257: }
258:
259: showMain(context, request, response);
260: context.complete();
261: } else {
262: // Cancel etc. pressed - show list again
263: showMain(context, request, response);
264: }
265: }
266:
267: private void showMain(Context c, HttpServletRequest request,
268: HttpServletResponse response) throws ServletException,
269: IOException, SQLException, AuthorizeException {
270: JSPManager.showJSP(request, response,
271: "/dspace-admin/eperson-main.jsp");
272: }
273: }
|