CreateUserAction.java
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 = (CreateUserActionFormactionForm;
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() ) {
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() ) {
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.addActionMessages.GLOBAL_MESSAGE, message );
132       saveMessagesrequest, 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