001 /*
002 * Created on 17.04.2004
003 */
004 package de.fub.tip.actions;
005
006 import java.sql.SQLException;
007
008 import javax.servlet.http.HttpServletRequest;
009 import javax.servlet.http.HttpServletResponse;
010 import javax.sql.DataSource;
011
012 import org.apache.log4j.Logger;
013 import org.apache.struts.action.Action;
014 import org.apache.struts.action.ActionError;
015 import org.apache.struts.action.ActionErrors;
016 import org.apache.struts.action.ActionForm;
017 import org.apache.struts.action.ActionForward;
018 import org.apache.struts.action.ActionMapping;
019 import org.apache.struts.action.ActionMessage;
020 import org.apache.struts.action.ActionMessages;
021
022 import de.fub.tip.actionforms.CreateUserActionForm;
023 import de.fub.tip.datenanzeige.ormapper.UserdataVO;
024 import de.fub.tip.datenbank.factory.BenutzerBearbeiterFactory;
025 import de.fub.tip.datenbank.logik.BenutzerBearbeiter;
026 import de.fub.tip.exceptions.AmbiguousUsernameException;
027
028 /**
029 * Sinn: Struts-Action, um einen neuen Benutzer anzulegen.<br>
030 * Dabei wird kein Profil angelegt oder bearbeitet.
031 * Dies muss in einem weiteren Schritt geschehen.
032 *
033 * @author hirsch, 17.04.2004
034 * @version 2004-05-01
035 * $Id: CreateUserAction.java,v 1.7 2004/05/01 14:37:36 hirsch Exp $
036 *
037 */
038 public class CreateUserAction extends Action {
039 /** Logger zur Fehlersuche */
040 private static Logger logger =
041 Logger.getLogger(CreateUserAction.class);
042 /** zum Herstellen einer Datenbankverbindung
043 * wird die Datenquelle von Struts übergeben
044 */
045 private DataSource dataSource = null;
046
047
048 /**
049 * sammelt die Daten der Umgebung zusammen und<br>
050 * leitet an Anzeige weiter, wenn Daten gefunden wurden
051 *
052 * @param actionMapping ActionMapping
053 * @param actionForm zugehörige ActionForm
054 * @param request der aktuelle Request
055 * @param response ServletResponse
056 *
057 * @return ActionForward nächstes Ziel
058 */
059 public ActionForward execute(ActionMapping actionMapping,
060 ActionForm actionForm, HttpServletRequest request,
061 HttpServletResponse response ) {
062
063 // gelesene Userdaten und durch Erfassungsroutine ermittelte Daten
064 UserdataVO ergebnis = null;
065 UserdataVO eingelesen = new UserdataVO();
066 ActionErrors errors = new ActionErrors();
067 // Damit man nicht immer new ActionError() sagt,
068 // wird ein err benutzt! Performanz sollte besser sein!
069 ActionError error = null;
070
071 logger.info("CreateUserAction.execute() called.");
072
073 try {
074 // Daten aus der Form extrahieren
075 CreateUserActionForm form = (CreateUserActionForm) actionForm;
076 // in UserdataVO speichern.
077 eingelesen.setLogin(form.getUsername());
078 eingelesen.setName(form.getName());
079 eingelesen.setLast_name(form.getLastname());
080 eingelesen.setPasswort(form.getPassword());
081
082 // auf syntaktische Fehler prüfen ?
083 // überhaupt angegeben ?
084 if ( eingelesen.getLogin() == null ||
085 eingelesen.getLogin().length() < 1 ) {
086 error = new ActionError("errors.username.required");
087 errors.add("username", error);
088 } // end if username
089
090 if ( eingelesen.getPasswort() == null ||
091 eingelesen.getPasswort().length() < 1) {
092 error = new ActionError("errors.password.required");
093 errors.add("password", error);
094 } // end if password
095
096 // Vorname
097 if ( eingelesen.getName() == null ||
098 eingelesen.getName().length() < 1) {
099 error = new ActionError("errors.firstnamerequired");
100 errors.add("name", error);
101 } // end if name
102
103 // Nachname
104 if ( eingelesen.getLast_name() == null ||
105 eingelesen.getLast_name().length() < 1 ) {
106 error = new ActionError("errors.lastnamerequired");
107 errors.add("lastname", error);
108 } // end if lastname
109
110 // Nachrichten speichern, wenn Fehler auftraten
111 if ( !errors.isEmpty()) this.saveErrors(request, errors);
112
113 logger.debug("syntaktisch ok");
114
115 // jetzt wird der Benutzer angelegt
116 dataSource = this.getDataSource(request, "tip");
117 BenutzerBearbeiter benutzerlogik =
118 (BenutzerBearbeiter)
119 BenutzerBearbeiterFactory.getInstance(
120 dataSource).getLogicObject();
121
122 ergebnis = benutzerlogik.createUser(eingelesen);
123
124 // Nachricht speichern als Anzeige des Erfolgs
125 ActionMessage message = new ActionMessage(
126 "createuser.success",
127 ergebnis.getLogin(), ergebnis.getId().toString(),
128 ergebnis.getAnmeldedatum());
129
130 ActionMessages messages = new ActionMessages();
131 messages.add( ActionMessages.GLOBAL_MESSAGE, message );
132 saveMessages( request, messages );
133
134 } catch (SQLException e) {
135 logger.debug("CreateUserAction.SQLException: "+e+ ", "+
136 e.getMessage());
137
138 return actionMapping.findForward("dbproblem");
139
140 } catch (ClassCastException e) {
141 logger.debug("CreateUserAction.ClassCastException: "+e);
142 logger.debug(e.getMessage());
143
144 return actionMapping.findForward("loginproblem");
145
146 } catch (AmbiguousUsernameException e) {
147 logger.debug("CreateUserAction." +
148 "AmbiguousUsernameException: "+e + e.getMessage());
149
150 error = new ActionError("errors.loginalreadyinuse");
151 errors.add("username", error);
152
153 this.saveErrors(request, errors);
154 return actionMapping.getInputForward();
155 } // end of catch
156
157 logger.debug("CreateUserAction.execute(): " +
158 "Bearbeitung erfolgreich beendet");
159
160 return actionMapping.findForward("success");
161 } // end of execute
162 } // end of class
|