ChangeProfilActionForm.java
001 /*
002  * Created on 26.04.2004
003  */
004 package de.fub.tip.actionforms;
005 
006 import java.util.Collection;
007 import java.util.Iterator;
008 
009 import javax.servlet.http.HttpServletRequest;
010 
011 import org.apache.log4j.Logger;
012 import org.apache.struts.action.ActionForm;
013 import org.apache.struts.action.ActionMapping;
014 
015 import de.fub.tip.datenanzeige.beans.HtmlCheckboxDarstellungBean;
016 
017 /**
018  * Sinn: stellt das HTML-Formular zur Verfügung, das die Sehenswürdigkeits-
019  * gruppen eines Benutzers zur Bearbeitung anzeigt.<br>
020  * Hat keine Validierung oder Reset!<br>
021  * Dieses gruselige Stück Code musste nur entstehen, weil es in 2 Tagen Arbeit
022  * nicht gelungen ist eine Implementierung unter Verwendung des
023  * Struts-eigenen <html:multibox>-Tags zu verwenden.<br>
024  * Der Datentransport vom HTML-Formular (ActionForm) zur Action und dann
025  * zur Logik hat nicht funktioniert.
026  
027  @author hirsch, 2004-04-26
028  @version 2004-04-28
029  * $Id: ChangeProfilActionForm.java,v 1.2 2004/04/29 14:45:12 hirsch Exp $
030  */
031 public class ChangeProfilActionForm extends ActionForm {
032     /** Logger zur Fehlersuche */
033   private static Logger logger = 
034       Logger.getLogger(ChangeProfilActionForm.class);
035 
036   /**
037    * nimmt alle Eingaben zurück, in dem das Formular auf den
038    * Startzustand (= letzter aus der DB gelesener Zustand des Profils)
039    * gebracht wird.
040    *
041    @see org.apache.struts.action.ActionForm#reset(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
042    */
043   public void reset(ActionMapping am, HttpServletRequest hsr) {
044     this.selnames = null;
045     // während der Laufzeit wird nichts an <code>names</code> geändert, 
046     // deshalb geht das mit der Hilfsmethode so einfach
047     this.setSelection();
048   // end of reset
049 
050   /** alle auswählbaren Inhalte des Formulars */
051   private Collection names = null;
052   /** 
053    * Menge von DatenbankID-Inhalten aus dem Formulart, 
054    * die selektiert wurden 
055    */
056    private String[] selnames = null;
057     
058     
059     /**
060      @return Returns the names.
061      */
062     public Collection getNames() {
063         return this.names;
064     }
065     
066     /**
067      @return Returns the selnames.
068      */
069     public String[] getSelnames() {
070         return this.selnames;
071     }
072     
073     /**
074      @param selnames The selnames to set.
075      */
076     public void setSelnames(String[] selnames) {
077         this.selnames = selnames;
078     }
079     
080     /**
081      @param names The names to set.
082      */
083     public void setNames(Collection names) {
084         this.names = names;
085         setSelection();
086     }
087 
088     
089     /**
090      * setzt die selektierten Elemente bei der Initialisierung des Formulars
091      * richtig.<br>
092      * Wird nach setNames() oder bem reset() aufgerufen!
093      */
094     public synchronized void setSelection() {
095 
096         ifthis.getNames() == null) {
097             logger.debug("ChangeSightGruppeProfilAction.setSelection(): " +
098                 "Container hat keinen Wert -nichts zu tun!");
099             return;
100         }
101         
102         // jetzt selnames entsprechend setzen.
103         int selected = 0;
104         Iterator it = null;
105         HtmlCheckboxDarstellungBean bean = null;
106         
107         // 1. zählen, wie viele Elemente selektiert sind
108         it = this.getNames().iterator();
109         
110         while it.hasNext()) {
111             bean = (HtmlCheckboxDarstellungBeanit.next();
112             
113             ifbean.getAbostatus().booleanValue() ) selected++;
114         // end of while
115         
116         // 2. selektierte Elemente nach selnames übertragen
117         this.selnames = new String[selected];
118         int stelle = 0;
119         it = this.getNames().iterator();
120         
121         while it.hasNext()) {
122             bean = (HtmlCheckboxDarstellungBeanit.next();
123 
124             ifbean.getAbostatus().booleanValue() ) {
125                 this.selnames[stelle++= bean.getName();
126             // end if
127         // end of while
128         
129         logger.debug("selnames = " this.selnames.length);
130         logger.debug("ChangeSightGruppeProfilAction.setSelection(): " +
131       "selektierte Werte gesetzt");
132     // end of setSelection
133 // end of class