[Schmitzm-commits] r1496 - in trunk/schmitzm-core/src: main/java/de/schmitzm/net/mail main/java/de/schmitzm/swing/input test/java/de/schmitzm/net/mail

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Tue Feb 8 19:31:15 CET 2011


Author: alfonx
Date: 2011-02-08 19:31:15 +0100 (Tue, 08 Feb 2011)
New Revision: 1496

Modified:
   trunk/schmitzm-core/src/main/java/de/schmitzm/net/mail/MailUtil.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOption.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ManualInputOption.java
   trunk/schmitzm-core/src/test/java/de/schmitzm/net/mail/MailUtilTest.java
Log:
* added a regex to MailUtil to check for valid looking Email-Addresses
* Extended PasswordViewable (Manual Input Option) to disabled the checkbox also, when the component is disabled. Additionally the labels are disabled now.

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/net/mail/MailUtil.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/net/mail/MailUtil.java	2011-02-08 15:07:17 UTC (rev 1495)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/net/mail/MailUtil.java	2011-02-08 18:31:15 UTC (rev 1496)
@@ -6,6 +6,7 @@
 import java.util.Locale;
 import java.util.Properties;
 import java.util.Set;
+import java.util.regex.Pattern;
 
 import javax.mail.Message;
 import javax.mail.MessagingException;
@@ -33,6 +34,12 @@
 	/** Mail address for SCHMITZM bug reports. */
 	public static final String MAIL_ADDR_SCHMITZM_BUGS = "schmitzm-bugs at wikisquare.de";
 
+	/**
+	 * A RegEx pattern that matches Strings which look like email-addresses.
+	 */
+	public static final Pattern EMAIL_ADDRESS_REGEX = Pattern
+			.compile("\\b[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}\\b");
+
 	private static Logger log = Logger.getLogger(MailUtil.class);
 
 	/**

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOption.java	2011-02-08 15:07:17 UTC (rev 1495)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/InputOption.java	2011-02-08 18:31:15 UTC (rev 1496)
@@ -42,377 +42,426 @@
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 
-
 /**
- * Diese Klasse stellt die allgemeine Oberklasse fuer eine Eingabe-Option
- * des {@link MultipleOptionPane} dar. Jede Option besteht aus einem
+ * Diese Klasse stellt die allgemeine Oberklasse fuer eine Eingabe-Option des
+ * {@link MultipleOptionPane} dar. Jede Option besteht aus einem
  * {@linkplain #descLabel Label} und einem {@linkplain #inpComp Eingabefeld}.
  * Die Art des Eingabefelds wird durch die Unterklassen spezifiziert.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ * 
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ *         (University of Bonn/Germany)
  * @version 1.0
  */
 public abstract class InputOption<E> extends JPanel {
-  /** Speichert eine Referenz auf die Eingabe-Option (<code>this</code>), damit
-   *  in inneren Klassen darauf referenziert werden kann. */
-  protected final Component OPTION_COMPONENT = this;
-  /** Enhaelt das Label mit der Beschreibung der Option, sowie ggf. das Obligatorisch-Kennzeichen. */
-  protected Container descLabelContainer = null;
-  /** Speichert die Beschreibung der Option */
-  protected JLabel    descLabel = null;
-  /** Kennzeichnet die Option als obligatorisch. */
-  protected JLabel    inputNeededLabel = null;
-  /** Speichert die Eingabe-Komponente der Option. */
-  protected JComponent inpComp   = null;
-  /** Kann eine Fehlermeldung enthalten, wenn die Eingabe nicht
-   *  valide ist. Kann direkt von {@link #performIsInputValid()} befuellt
-   *  werden. Wird automatisch befuellt, wenn {@link #performIsInputValid()}
-   *  eine Exception wirft. */
-  protected String invalidInputMess = "";
+	/**
+	 * Speichert eine Referenz auf die Eingabe-Option (<code>this</code>), damit
+	 * in inneren Klassen darauf referenziert werden kann.
+	 */
+	protected final Component OPTION_COMPONENT = this;
+	/**
+	 * Enhaelt das Label mit der Beschreibung der Option, sowie ggf. das
+	 * Obligatorisch-Kennzeichen.
+	 */
+	protected Container descLabelContainer = null;
+	/** Speichert die Beschreibung der Option */
+	protected JLabel descLabel = null;
+	/** Kennzeichnet die Option als obligatorisch. */
+	protected JLabel inputNeededLabel = null;
+	/** Speichert die Eingabe-Komponente der Option. */
+	protected JComponent inpComp = null;
+	/**
+	 * Kann eine Fehlermeldung enthalten, wenn die Eingabe nicht valide ist.
+	 * Kann direkt von {@link #performIsInputValid()} befuellt werden. Wird
+	 * automatisch befuellt, wenn {@link #performIsInputValid()} eine Exception
+	 * wirft.
+	 */
+	protected String invalidInputMess = "";
 
-  private   boolean   inpNeeded = false;
-  private   Vector    listeners = new Vector();
-  private   E         oldValue  = null;
-  
-  /** Label (hinter der Bezeichnung), mit dem obligatorische Felder markiert werden. */
-  private static String defaultInputNeededSign = "*";
-  /** Farbe, in der die Markierung für obligatorische Felder dargestellt wird. */
-  private static Color  defaultInputNeededSignColor = Color.RED;//new Color(240,100,100);
+	private boolean inpNeeded = false;
+	private final Vector listeners = new Vector();
+	private E oldValue = null;
 
-  
-  /** 
-   * Liefert das Label (dargestellt hinter der Bezeichnung), mit dem
-   * obligatorische Felder markiert werden (Default: "*").
-   */
-  public static String getInputNeededSign() {
-    return defaultInputNeededSign;
-  }
-  
-  /** 
-   * Setzt das Label (dargestellt hinter der Bezeichnung), mit dem
-   * obligatorische Felder markiert werden (Default: "*").<br>
-   * Diese Einstellung wirkt sich erst auf neu erzeugte {@link InputOption}
-   * aus. Die Darstellung bestehender {@link InputOption}-Objekte aendert sich
-   * erst, wenn die inputNeeded-Eigenschaft neu gesetzt wird!
-   * @see #setInputNeeded(boolean)
-   */
-  public static void setInputNeededSign(String sign) {
-    defaultInputNeededSign = sign;
-  }
+	/**
+	 * Label (hinter der Bezeichnung), mit dem obligatorische Felder markiert
+	 * werden.
+	 */
+	private static String defaultInputNeededSign = "*";
+	/** Farbe, in der die Markierung für obligatorische Felder dargestellt wird. */
+	private static Color defaultInputNeededSignColor = Color.RED;// new
+																	// Color(240,100,100);
 
-  /** 
-   * Liefert die Farbe, mit der obligatorische Felder markiert werden
-   * (Default: {@link Color#RED}).
-   */
-  public static Color getInputNeededSignColor() {
-    return defaultInputNeededSignColor;
-  }
-  
-  /** 
-   * Setzt die Farbe, mit der obligatorische Felder markiert werden
-   * (Default: {@link Color#RED}).<br>
-   * Diese Einstellung wirkt sich erst auf neu erzeugte {@link InputOption}
-   * aus. Die Darstellung bestehender {@link InputOption}-Objekte aendert sich
-   * erst, wenn die inputNeeded-Eigenschaft neu gesetzt wird!
-   * @see #setInputNeeded(boolean)
-   */
-  public static void setInputNeededSignColor(Color signColor) {
-    defaultInputNeededSignColor = signColor;
-  }
+	/**
+	 * Liefert das Label (dargestellt hinter der Bezeichnung), mit dem
+	 * obligatorische Felder markiert werden (Default: "*").
+	 */
+	public static String getInputNeededSign() {
+		return defaultInputNeededSign;
+	}
 
-  /**
-   * Erzeugt eine neue Eingabe-Option.
-   * @param label       Beschreibung (wird im Label angezeigt)
-   * @param inputNeeded gibt an, ob eine Eingabe in der Option erforderlich ist
-   */
-  public InputOption(String label, boolean inputNeeded) {
-    this(label,inputNeeded,false);
-  }
+	/**
+	 * Setzt das Label (dargestellt hinter der Bezeichnung), mit dem
+	 * obligatorische Felder markiert werden (Default: "*").<br>
+	 * Diese Einstellung wirkt sich erst auf neu erzeugte {@link InputOption}
+	 * aus. Die Darstellung bestehender {@link InputOption}-Objekte aendert sich
+	 * erst, wenn die inputNeeded-Eigenschaft neu gesetzt wird!
+	 * 
+	 * @see #setInputNeeded(boolean)
+	 */
+	public static void setInputNeededSign(String sign) {
+		defaultInputNeededSign = sign;
+	}
 
-  /**
-   * Erzeugt eine neue Eingabe-Option.
-   * @param label       Beschreibung (wird im Label angezeigt)
-   * @param inputNeeded gibt an, ob eine Eingabe in der Option erforderlich ist
-   * @param centerInputComp bestimmt, ob die Eingabe-Komponente (siehe {@link #createInputComponent()})
-   *                        ins Zentrum des {@link BorderLayout} gelegt wird)
-   */
-  public InputOption(String label, boolean inputNeeded, boolean centerInputComp) {
-    this.inpNeeded = inputNeeded;
+	/**
+	 * Liefert die Farbe, mit der obligatorische Felder markiert werden
+	 * (Default: {@link Color#RED}).
+	 */
+	public static Color getInputNeededSignColor() {
+		return defaultInputNeededSignColor;
+	}
 
-    // Darstellung des Containers erzeugen
-    setLayout(new BorderLayout());
-    descLabel = new JLabel(label);
-    inputNeededLabel = new JLabel();
-    inputNeededLabel.setForeground(defaultInputNeededSignColor);
-    inpComp   = createInputComponent();
-    inpComp.addFocusListener( new FocusListener() {
-      public void focusGained(FocusEvent e) {
-        oldValue = getValue();
-        fireFocusGained();
-      }
-      public void focusLost(FocusEvent e) {
-        fireFocusLost();
-        if ( oldValue == null && getValue() != null ||
-             oldValue != null && !oldValue.equals( getValue() ) )
-          fireOptionChanged(oldValue,getValue());
-      }
-    });
-    setInputNeeded(inputNeeded);
+	/**
+	 * Setzt die Farbe, mit der obligatorische Felder markiert werden (Default:
+	 * {@link Color#RED}).<br>
+	 * Diese Einstellung wirkt sich erst auf neu erzeugte {@link InputOption}
+	 * aus. Die Darstellung bestehender {@link InputOption}-Objekte aendert sich
+	 * erst, wenn die inputNeeded-Eigenschaft neu gesetzt wird!
+	 * 
+	 * @see #setInputNeeded(boolean)
+	 */
+	public static void setInputNeededSignColor(Color signColor) {
+		defaultInputNeededSignColor = signColor;
+	}
 
-    // Elemente dem Container hinzufuegen
-    if ( label != null ) {
-      // put description and mandatory indicator in an
-      // container first
-      descLabelContainer = new Container();
-      descLabelContainer.setLayout( new FlowLayout(FlowLayout.LEFT,0,0) );
-      descLabelContainer.add( descLabel );
-      descLabelContainer.add( inputNeededLabel );
-      // add container to layout
-      add( descLabelContainer, BorderLayout.NORTH );
-      add( inpComp, centerInputComp ? BorderLayout.CENTER : BorderLayout.SOUTH );
-    } else {
-      add( inpComp, centerInputComp ? BorderLayout.CENTER : BorderLayout.NORTH );
-    }
-    doLayout();
-  }
+	/**
+	 * Erzeugt eine neue Eingabe-Option.
+	 * 
+	 * @param label
+	 *            Beschreibung (wird im Label angezeigt)
+	 * @param inputNeeded
+	 *            gibt an, ob eine Eingabe in der Option erforderlich ist
+	 */
+	public InputOption(String label, boolean inputNeeded) {
+		this(label, inputNeeded, false);
+	}
 
-  /**
-   * Deaktiviert die Option, in dem die Eingabe-Komponente deaktiviert wird.
-   */
-  public void setEnabled(boolean enabled) {
-    super.setEnabled(enabled);
-    inpComp.setEnabled(enabled);
-  }
+	/**
+	 * Erzeugt eine neue Eingabe-Option.
+	 * 
+	 * @param label
+	 *            Beschreibung (wird im Label angezeigt)
+	 * @param inputNeeded
+	 *            gibt an, ob eine Eingabe in der Option erforderlich ist
+	 * @param centerInputComp
+	 *            bestimmt, ob die Eingabe-Komponente (siehe
+	 *            {@link #createInputComponent()}) ins Zentrum des
+	 *            {@link BorderLayout} gelegt wird)
+	 */
+	public InputOption(String label, boolean inputNeeded,
+			boolean centerInputComp) {
+		this.inpNeeded = inputNeeded;
 
-  /**
-   * Setzt den Hilfetext fuer Eingabe-Komponente und Beschreibungslabel.
-   * @param text Hilfe-Text
-   */
-  public void setToolTipText(String text) {
-    super.setToolTipText(text);
-    if ( inpComp != null )
-      inpComp.setToolTipText(text);
-    if ( descLabel != null )
-      descLabel.setToolTipText(text);
-  }
+		// Darstellung des Containers erzeugen
+		setLayout(new BorderLayout());
+		descLabel = new JLabel(label);
+		inputNeededLabel = new JLabel();
+		inputNeededLabel.setForeground(defaultInputNeededSignColor);
+		inpComp = createInputComponent();
+		inpComp.addFocusListener(new FocusListener() {
+			public void focusGained(FocusEvent e) {
+				oldValue = getValue();
+				fireFocusGained();
+			}
 
-  /**
-   * Setzt den Fokus auf das Eingabe-Feld der {@code InputOption}.
-   */
-  public void grabFocus() {
-    inpComp.grabFocus();
-  }
+			public void focusLost(FocusEvent e) {
+				fireFocusLost();
+				if (oldValue == null && getValue() != null || oldValue != null
+						&& !oldValue.equals(getValue()))
+					fireOptionChanged(oldValue, getValue());
+			}
+		});
+		setInputNeeded(inputNeeded);
 
-  /**
-   * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
-   * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
-   * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig ist
-   *         (siehe {@link #isInputValid()})
-   */
-  public E getValue() {
-    if ( !isInputValid() )
-      return null;
-    return performGetValue();
-  }
+		// Elemente dem Container hinzufuegen
+		if (label != null) {
+			// put description and mandatory indicator in an
+			// container first
+			descLabelContainer = new Container();
+			descLabelContainer.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
+			descLabelContainer.add(descLabel);
+			descLabelContainer.add(inputNeededLabel);
+			// add container to layout
+			add(descLabelContainer, BorderLayout.NORTH);
+			add(inpComp, centerInputComp ? BorderLayout.CENTER
+					: BorderLayout.SOUTH);
+		} else {
+			add(inpComp, centerInputComp ? BorderLayout.CENTER
+					: BorderLayout.NORTH);
+		}
+		doLayout();
+	}
 
-  /**
-   * Setzt einen neuen Wert, mit der die Eingabe-Option belegt wird.
-   * Ruft {@link #performSetValue(Object)} auf und bewirkt ein
-   * {@link InputOptionListener#optionChanged(Object,Object)} fuer alle
-   * angeschlossenen {@link InputOptionListener}, falls sich der Wert der
-   * Option geaendert hat.
-   * @param newValue neuer Wert
-   * @return <code>false</code> gdw. der Objekt-Typ fuer die Option nicht
-   *         zulaessig ist
-   */
-  public boolean setValue(E newValue) {
-    // alten Wert speichern
-    oldValue = getValue();
-    if ( !performSetValue(newValue) )
-      return false;
-    newValue = getValue();
-    if ( oldValue==null && newValue!=null || oldValue!=null && newValue==null || oldValue!=null && !oldValue.equals( newValue ) )
-      fireOptionChanged(oldValue,getValue());
-    return true;
-  }
+	/**
+	 * Deaktiviert die Option, in dem die Eingabe-Komponente deaktiviert wird.
+	 */
+	@Override
+	public void setEnabled(boolean enabled) {
+		super.setEnabled(enabled);
+		inpComp.setEnabled(enabled);
+		descLabel.setEnabled(enabled);
+	}
 
-  /**
-   * Liefert die Beschreibung der Eingabe-Option.
-   */
-  public String getLabel() {
-    return descLabel.getText();
-  }
+	/**
+	 * Setzt den Hilfetext fuer Eingabe-Komponente und Beschreibungslabel.
+	 * 
+	 * @param text
+	 *            Hilfe-Text
+	 */
+	@Override
+	public void setToolTipText(String text) {
+		super.setToolTipText(text);
+		if (inpComp != null)
+			inpComp.setToolTipText(text);
+		if (descLabel != null)
+			descLabel.setToolTipText(text);
+	}
 
-  /**
-   * Prueft, ob fuer das Feld zwingend eine Eingabe erforderlich ist.
-   */
-  public boolean inputNeeded() {
-    return inpNeeded;
-  }
+	/**
+	 * Setzt den Fokus auf das Eingabe-Feld der {@code InputOption}.
+	 */
+	@Override
+	public void grabFocus() {
+		inpComp.grabFocus();
+	}
 
-  /**
-   * Bestimmt, ob fuer das Feld zwingend eine Eingabe erforderlich ist.
-   */
-  public void setInputNeeded(boolean inpNeeded) {
-    this.inpNeeded = inpNeeded;
-//    if ( inpComp != null ) {
-//      if ( inpNeeded )
-//        inpComp.setBackground( defaultInputNeededBackground );
-//      else
-//        inpComp.setBackground( SwingUtil.getDefaultBackground() );
-//    }
-    if ( inputNeededLabel != null ) {
-      if ( inpNeeded )
-        inputNeededLabel.setText( " " + defaultInputNeededSign );
-      else
-        inputNeededLabel.setText( "" );
-    }
-      
-  }
+	/**
+	 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst auf
+	 * Gueltigkeit und ruft dann {@link #performGetValue()} auf.
+	 * 
+	 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig ist
+	 *         (siehe {@link #isInputValid()})
+	 */
+	public E getValue() {
+		if (!isInputValid())
+			return null;
+		return performGetValue();
+	}
 
-  /**
-   * Prueft, ob die Eingabe in dem Feld zulaessig ist. Die Implementierung
-   * prueft zuerst auf Leereingabe und ruft dann {@link #performIsInputValid()}
-   * auf.
-   * @return <code>false</code> falls die Option leer ist, aber eine Eingabe
-   *         erforderlich ist
-   */
-  public boolean isInputValid() {
-    // Leereingabe
-    if (  inputEmpty() )
-      return !inputNeeded();
-    try {
-      this.invalidInputMess = "";
-      return performIsInputValid();
-    } catch (Exception err) {
-      this.invalidInputMess = err.getMessage();
-      return false;
-    }
-  }
+	/**
+	 * Setzt einen neuen Wert, mit der die Eingabe-Option belegt wird. Ruft
+	 * {@link #performSetValue(Object)} auf und bewirkt ein
+	 * {@link InputOptionListener#optionChanged(Object,Object)} fuer alle
+	 * angeschlossenen {@link InputOptionListener}, falls sich der Wert der
+	 * Option geaendert hat.
+	 * 
+	 * @param newValue
+	 *            neuer Wert
+	 * @return <code>false</code> gdw. der Objekt-Typ fuer die Option nicht
+	 *         zulaessig ist
+	 */
+	public boolean setValue(E newValue) {
+		// alten Wert speichern
+		oldValue = getValue();
+		if (!performSetValue(newValue))
+			return false;
+		newValue = getValue();
+		if (oldValue == null && newValue != null || oldValue != null
+				&& newValue == null || oldValue != null
+				&& !oldValue.equals(newValue))
+			fireOptionChanged(oldValue, getValue());
+		return true;
+	}
 
-  /**
-   * Prueft, ob die Eingabe in dem Feld zulaessig ist und wird ggf. eine
-   * Exception. Die Implementierung
-   */
-  public void checkInputAndError() throws Exception {
-    if ( !isInputValid() )
-      throw new Exception( getInvalidInputMessage() );
-  }
+	/**
+	 * Liefert die Beschreibung der Eingabe-Option.
+	 */
+	public String getLabel() {
+		return descLabel.getText();
+	}
 
-  /**
-   * Liefert die letzte von {@link #isInputValid()} erzeugte
-   * Fehlermeldung.
-   */
-  public String getInvalidInputMessage() {
-    return invalidInputMess;
-  }
+	/**
+	 * Prueft, ob fuer das Feld zwingend eine Eingabe erforderlich ist.
+	 */
+	public boolean inputNeeded() {
+		return inpNeeded;
+	}
 
-  /**
-   * Prueft, ob das Feld eine Leereingabe beinhaltet.
-   * @see #performIsInputEmpty()
-   */
-  public boolean inputEmpty() {
-    return performIsInputEmpty();
-  }
+	/**
+	 * Bestimmt, ob fuer das Feld zwingend eine Eingabe erforderlich ist.
+	 */
+	public void setInputNeeded(boolean inpNeeded) {
+		this.inpNeeded = inpNeeded;
+		// if ( inpComp != null ) {
+		// if ( inpNeeded )
+		// inpComp.setBackground( defaultInputNeededBackground );
+		// else
+		// inpComp.setBackground( SwingUtil.getDefaultBackground() );
+		// }
+		if (inputNeededLabel != null) {
+			if (inpNeeded)
+				inputNeededLabel.setText(" " + defaultInputNeededSign);
+			else
+				inputNeededLabel.setText("");
+		}
 
-  /**
-   * Liefert eine Referenz auf die Eingabe-Komponente.<br>
-   * <b>Bemerke:</b><br>
-   * Uber diese Referenz sollte hoechsten ihr Layout beeinflusst werden, aber
-   * nicht ihr Verhalten, da ansonsten die Funktionalitaet der <code>InputOption</code>
-   * negativ beeinflusst werden kann!!
-   */
-  public JComponent getInputComponent() {
-    return inpComp;
-  }
+	}
 
-  /**
-   * Liefert eine Referenz auf das Beschreibungs-Label.<br>
-   * <b>Bemerke:</b><br>
-   * Uber diese Referenz sollte hoechsten das Layout beeinflusst werden, aber
-   * nicht das Verhalten, da ansonsten die Funktionalitaet der <code>InputOption</code>
-   * negativ beeinflusst werden kann!!
-   */
-  public JLabel getDescriptionLabel() {
-    return descLabel;
-  }
+	/**
+	 * Prueft, ob die Eingabe in dem Feld zulaessig ist. Die Implementierung
+	 * prueft zuerst auf Leereingabe und ruft dann
+	 * {@link #performIsInputValid()} auf.
+	 * 
+	 * @return <code>false</code> falls die Option leer ist, aber eine Eingabe
+	 *         erforderlich ist
+	 */
+	public boolean isInputValid() {
+		// Leereingabe
+		if (inputEmpty())
+			return !inputNeeded();
+		try {
+			this.invalidInputMess = "";
+			return performIsInputValid();
+		} catch (Exception err) {
+			this.invalidInputMess = err.getMessage();
+			return false;
+		}
+	}
 
-  /**
-   * Erzeugt eine neue Instanz der Eingabe-Komponente. z.B. ein Text-Eingabefeld
-   * oder eine Combo-Box.
-   */
-  protected abstract JComponent createInputComponent();
+	/**
+	 * Prueft, ob die Eingabe in dem Feld zulaessig ist und wird ggf. eine
+	 * Exception. Die Implementierung
+	 */
+	public void checkInputAndError() throws Exception {
+		if (!isInputValid())
+			throw new Exception(getInvalidInputMessage());
+	}
 
-  /**
-   * Liefert den aktuellen Wert der Eingabe-Option.
-   */
-  protected abstract E performGetValue();
+	/**
+	 * Liefert die letzte von {@link #isInputValid()} erzeugte Fehlermeldung.
+	 */
+	public String getInvalidInputMessage() {
+		return invalidInputMess;
+	}
 
-  /**
-   * Setzt den aktuellen Wert der Eingabe-Option. Ist der Objekt-Typ fuer die
-   * Option nicht zulaessig, sollte nichts gemacht werden und <code>false</code>
-   * zurueckgegeben werden.
-   * @param newValue neuer Wert
-   * @return <code>false</code> gdw. der Objekt-Typ fuer die Eingabe-Option
-   *         nicht zulaessig ist
-   */
-  protected abstract boolean performSetValue(E newValue);
+	/**
+	 * Prueft, ob das Feld eine Leereingabe beinhaltet.
+	 * 
+	 * @see #performIsInputEmpty()
+	 */
+	public boolean inputEmpty() {
+		return performIsInputEmpty();
+	}
 
-  /**
-   * Prueft, ob die aktuelle Eingabe leer ist.
-   */
-  protected abstract boolean performIsInputEmpty();
+	/**
+	 * Liefert eine Referenz auf die Eingabe-Komponente.<br>
+	 * <b>Bemerke:</b><br>
+	 * Uber diese Referenz sollte hoechsten ihr Layout beeinflusst werden, aber
+	 * nicht ihr Verhalten, da ansonsten die Funktionalitaet der
+	 * <code>InputOption</code> negativ beeinflusst werden kann!!
+	 */
+	public JComponent getInputComponent() {
+		return inpComp;
+	}
 
-  /**
-   * Prueft, ob die aktuelle Eingabe leer ist.
-   */
-  protected abstract boolean performIsInputValid();
+	/**
+	 * Liefert eine Referenz auf das Beschreibungs-Label.<br>
+	 * <b>Bemerke:</b><br>
+	 * Uber diese Referenz sollte hoechsten das Layout beeinflusst werden, aber
+	 * nicht das Verhalten, da ansonsten die Funktionalitaet der
+	 * <code>InputOption</code> negativ beeinflusst werden kann!!
+	 */
+	public JLabel getDescriptionLabel() {
+		return descLabel;
+	}
 
-  /**
-   * Fuegt der Eingabeoption einen Listener hinzu.
-   * @param l neuer Listener
-   */
-  public void addInputOptionListener(InputOptionListener l) {
-    listeners.add(l);
-  }
+	/**
+	 * Erzeugt eine neue Instanz der Eingabe-Komponente. z.B. ein
+	 * Text-Eingabefeld oder eine Combo-Box.
+	 */
+	protected abstract JComponent createInputComponent();
 
-  /**
-   * Entfernt einen Listener von der Eingabeoption.
-   * @param l zu entfernender Listener
-   */
-  public void removeInputOptionListener(InputOptionListener l) {
-    listeners.remove(l);
-  }
+	/**
+	 * Liefert den aktuellen Wert der Eingabe-Option.
+	 */
+	protected abstract E performGetValue();
 
-  /**
-   * Informiert alle {@link InputOptionListener}, dass die Eingabe-Option
-   * den Fokus erhalten hat.
-   */
-  protected void fireFocusGained() {
-    for (int i=0; i<listeners.size(); i++)
-      if ( listeners.elementAt(i) instanceof InputOptionListener )
-        ((InputOptionListener)listeners.elementAt(i)).optionGainedFocus(this);
-  }
+	/**
+	 * Setzt den aktuellen Wert der Eingabe-Option. Ist der Objekt-Typ fuer die
+	 * Option nicht zulaessig, sollte nichts gemacht werden und
+	 * <code>false</code> zurueckgegeben werden.
+	 * 
+	 * @param newValue
+	 *            neuer Wert
+	 * @return <code>false</code> gdw. der Objekt-Typ fuer die Eingabe-Option
+	 *         nicht zulaessig ist
+	 */
+	protected abstract boolean performSetValue(E newValue);
 
-  /**
-   * Informiert alle {@link InputOptionListener}, dass die Eingabe-Option
-   * den Fokus verloren hat.
-   */
-  protected void fireFocusLost() {
-    for (int i=0; i<listeners.size(); i++)
-      if ( listeners.elementAt(i) instanceof InputOptionListener )
-        ((InputOptionListener)listeners.elementAt(i)).optionLostFocus(this);
-  }
+	/**
+	 * Prueft, ob die aktuelle Eingabe leer ist.
+	 */
+	protected abstract boolean performIsInputEmpty();
 
-  /**
-   * Informiert alle {@link InputOptionListener}, dass sich der Wert der
-   * Eingabeoption geaendert hat.
-   * @param oldValue alter Optionswert
-   * @param newValue neuer Optionswert
-   */
-  protected void fireOptionChanged(E oldValue, E newValue) {
-    for (int i=0; i<listeners.size(); i++)
-      if ( listeners.elementAt(i) instanceof InputOptionListener )
-        ((InputOptionListener)listeners.elementAt(i)).optionChanged(this,oldValue,newValue);
-  }
+	/**
+	 * Prueft, ob die aktuelle Eingabe leer ist.
+	 */
+	protected abstract boolean performIsInputValid();
 
+	/**
+	 * Fuegt der Eingabeoption einen Listener hinzu.
+	 * 
+	 * @param l
+	 *            neuer Listener
+	 */
+	public void addInputOptionListener(InputOptionListener l) {
+		listeners.add(l);
+	}
+
+	/**
+	 * Entfernt einen Listener von der Eingabeoption.
+	 * 
+	 * @param l
+	 *            zu entfernender Listener
+	 */
+	public void removeInputOptionListener(InputOptionListener l) {
+		listeners.remove(l);
+	}
+
+	/**
+	 * Informiert alle {@link InputOptionListener}, dass die Eingabe-Option den
+	 * Fokus erhalten hat.
+	 */
+	protected void fireFocusGained() {
+		for (int i = 0; i < listeners.size(); i++)
+			if (listeners.elementAt(i) instanceof InputOptionListener)
+				((InputOptionListener) listeners.elementAt(i))
+						.optionGainedFocus(this);
+	}
+
+	/**
+	 * Informiert alle {@link InputOptionListener}, dass die Eingabe-Option den
+	 * Fokus verloren hat.
+	 */
+	protected void fireFocusLost() {
+		for (int i = 0; i < listeners.size(); i++)
+			if (listeners.elementAt(i) instanceof InputOptionListener)
+				((InputOptionListener) listeners.elementAt(i))
+						.optionLostFocus(this);
+	}
+
+	/**
+	 * Informiert alle {@link InputOptionListener}, dass sich der Wert der
+	 * Eingabeoption geaendert hat.
+	 * 
+	 * @param oldValue
+	 *            alter Optionswert
+	 * @param newValue
+	 *            neuer Optionswert
+	 */
+	protected void fireOptionChanged(E oldValue, E newValue) {
+		for (int i = 0; i < listeners.size(); i++)
+			if (listeners.elementAt(i) instanceof InputOptionListener)
+				((InputOptionListener) listeners.elementAt(i)).optionChanged(
+						this, oldValue, newValue);
+	}
+
 }

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ManualInputOption.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ManualInputOption.java	2011-02-08 15:07:17 UTC (rev 1495)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/input/ManualInputOption.java	2011-02-08 18:31:15 UTC (rev 1496)
@@ -78,6 +78,7 @@
 	/**
 	 * Erzeugt eine neue Instanz von {@link JTextField}.
 	 */
+	@Override
 	protected JTextField createInputComponent() {
 		return new JTextField();
 	}
@@ -86,6 +87,7 @@
 	 * Liefert immer <code>true</code>, da keine speziellen Anforderungen an die
 	 * Text-Eingabe gestellt werden.
 	 */
+	@Override
 	protected boolean performIsInputValid() {
 		return true;
 	}
@@ -93,6 +95,7 @@
 	/**
 	 * Prueft, ob im Eingabefeld ein Leerstring eingegeben wurde.
 	 */
+	@Override
 	protected boolean performIsInputEmpty() {
 		return ((JTextField) inpComp).getText().trim().equals("");
 	}
@@ -100,6 +103,7 @@
 	/**
 	 * Liefert die aktuelle Eingabe im {@link JTextField}.
 	 */
+	@Override
 	protected Object performGetValue() {
 		return ((JTextField) inpComp).getText();
 	}
@@ -111,6 +115,7 @@
 	 *            neuer Wert (muss vom Typ {@link String} sein!)
 	 * @return <code>false</code> wenn kein {@link String} uebergeben wird
 	 */
+	@Override
 	protected boolean performSetValue(Object newValue) {
 		if (newValue == null)
 			newValue = "";
@@ -178,7 +183,7 @@
 		public Text(String label, String defValue) {
 			this(label, true, defValue);
 		}
-		
+
 		/**
 		 * Liefert den Wert, der in der Option eingegeben wurde. Prueft zuerst
 		 * auf Gueltigkeit und ruft dann {@link #performGetValue()} auf.
@@ -186,6 +191,7 @@
 		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
 		 *         ist (siehe {@link #isInputValid()})
 		 */
+		@Override
 		public String getValue() {
 			return (String) super.getValue();
 		}
@@ -210,8 +216,10 @@
 		 * @param defValue
 		 *            Wert der im Textfeld vorgeblendet wird
 		 */
-		public Integer(String label, boolean inputNeeded, java.lang.Integer defValue) {
-			super(label, inputNeeded, defValue != null ? String.valueOf(defValue) : null);
+		public Integer(String label, boolean inputNeeded,
+				java.lang.Integer defValue) {
+			super(label, inputNeeded, defValue != null ? String
+					.valueOf(defValue) : null);
 		}
 
 		/**
@@ -257,6 +265,7 @@
 		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
 		 *         ist (siehe {@link #isInputValid()})
 		 */
+		@Override
 		public java.lang.Integer getValue() {
 			return (java.lang.Integer) super.getValue();
 		}
@@ -266,6 +275,7 @@
 		 * 
 		 * @return <code>null</code> falls das Eingabefeld leer ist.
 		 */
+		@Override
 		protected java.lang.Integer performGetValue() {
 			if (inputEmpty())
 				return null;
@@ -275,6 +285,7 @@
 		/**
 		 * Prueft, ob ein gueltiger Integer-Wert im Feld eingegeben wurde.
 		 */
+		@Override
 		protected boolean performIsInputValid() {
 			try {
 				java.lang.Integer.parseInt(((JTextField) inpComp).getText());
@@ -353,6 +364,7 @@
 		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
 		 *         ist (siehe {@link #isInputValid()})
 		 */
+		@Override
 		public java.lang.Double getValue() {
 			return (java.lang.Double) super.getValue();
 		}
@@ -362,6 +374,7 @@
 		 * 
 		 * @return <code>null</code> falls das Eingabefeld leer ist.
 		 */
+		@Override
 		protected java.lang.Double performGetValue() {
 			if (inputEmpty())
 				return null;
@@ -372,6 +385,7 @@
 		/**
 		 * Prueft, ob ein gueltiger Double-Wert im Feld eingegeben wurde.
 		 */
+		@Override
 		protected boolean performIsInputValid() {
 			try {
 				java.lang.Double.parseDouble(((JTextField) inpComp).getText());
@@ -448,6 +462,7 @@
 		/**
 		 * Erzeugt eine neue Instanz von {@link JPasswordField}.
 		 */
+		@Override
 		protected JPasswordField createInputComponent() {
 			return new JPasswordField();
 		}
@@ -455,6 +470,7 @@
 		/**
 		 * Liefert die aktuelle Eingabe im {@link JPasswordField}.
 		 */
+		@Override
 		protected Object performGetValue() {
 			return ((JPasswordField) inpComp).getPassword();
 		}
@@ -466,6 +482,7 @@
 		 * @return <code>null</code> wenn die aktuelle Eingabe nicht zulaessig
 		 *         ist (siehe {@link #isInputValid()})
 		 */
+		@Override
 		public char[] getValue() {
 			return (char[]) super.getValue();
 		}
@@ -486,6 +503,13 @@
 	 * @version 1.0
 	 */
 	public static class PasswordViewable extends Password {
+
+		@Override
+		public void setEnabled(boolean enabled) {
+			super.setEnabled(enabled);
+			visibleCheckBox.setEnabled(enabled);
+		};
+
 		private char oldEchoChar = '*';
 
 		/**
@@ -566,6 +590,7 @@
 		/**
 		 * Erzeugt eine neue Instanz von {@link JPasswordField}.
 		 */
+		@Override
 		protected JPasswordField createInputComponent() {
 			JPasswordField pwField = super.createInputComponent();
 			oldEchoChar = pwField.getEchoChar();

Modified: trunk/schmitzm-core/src/test/java/de/schmitzm/net/mail/MailUtilTest.java
===================================================================
--- trunk/schmitzm-core/src/test/java/de/schmitzm/net/mail/MailUtilTest.java	2011-02-08 15:07:17 UTC (rev 1495)
+++ trunk/schmitzm-core/src/test/java/de/schmitzm/net/mail/MailUtilTest.java	2011-02-08 18:31:15 UTC (rev 1496)
@@ -1,8 +1,11 @@
 package de.schmitzm.net.mail;
 
-
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.util.regex.Pattern;
+
 import org.junit.Ignore;
 import org.junit.Test;
 
@@ -11,6 +14,16 @@
 public class MailUtilTest extends TestingClass {
 
 	@Test
+	public void testEmailRegEx() {
+		Pattern p = MailUtil.EMAIL_ADDRESS_REGEX;
+		assertTrue(p.matcher("tzeggai at wikisquare.de").find());
+		assertFalse(p.matcher("@wikisquare.de").find());
+		assertFalse(p.matcher("tzeggai@").find());
+		assertFalse(p.matcher("aatb").find());
+
+	}
+
+	@Test
 	public void testSendSmtpMail_BugReport() {
 		String recipientsAddress = "bugreport at wikisquare.de";
 		String subject = "junit MailUtilTest";



More information about the Schmitzm-commits mailing list