/**
 * @(#) gTextField0.java 19.07.01
 *
 * jfem - a java finite element system
 *
 * Copyright (C) 1999-2001 HS-MD
 * jfem.support@jfem.de
 * www.jfem.de
 *
 * For License information see License.txt
 */

package org.app.gui;

import org.app.mvc.IMvcObserver; // update Methode
import org.app.mvc.MvcModellDataObject; // MvcModellDataObject wird übergeben
import org.app.mvc.MvcModell;
import org.app.basis.BasisIO;
import org.app.documents.AbstractSharedDoc;
import javax.swing.text.Document;
import javax.swing.event.DocumentListener;
import javax.swing.event.DocumentEvent;
import java.awt.event.*;
import org.app.gui.gViewer0; // viewerNr
import org.debug.Debug;

import org.app.views.AbstractView;


/**
 * description:
 * gui TextField Klasse , abgeleitet von javax.swing.JList mit Interface IMvcObserver
 * Basis Klasse aller Textfelder für numerische Eingaben
 *
 * @version     1.0  19.07.01
 * @author      Thomas Schmidt, Michael Wilhelem
 * @see         #app.gui.gTextFieldInt
 * @see         #app.gui.gTextFieldDouble
 * @see         #app.gui.gTextFieldLong
 * @see         #app.gui.gTextField Organisation:  FH Magdeburg
 */



public abstract class gTextField0 extends AbstractView implements IMvcObserver, DocumentListener {

    protected javax.swing.JTextField _textfield;

    /**
     * Constructor
     * @return none
     * @param none
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #app.gui.gTextFieldInt
     * @see #app.gui.gTextFieldDouble
     * @see #app.gui.gTextFieldLong
     * @see #app.gui.gTextField
     */
    public gTextField0() {
      _textfield = new javax.swing.JTextField();
    }
    // ---------------------------------------------------


    /**
     * getguiElement
     * @return _textfield
     * @param none
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * return the intern _textfield to insert to the panel
     */
    public javax.swing.JTextField getguiElement() {
      return _textfield;
    }

    /**
     * insertUpdate
     * @return none
     * @param DocumentEvent e
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #Change
     * @see #removeUpdate
     * @see #changedUpdate
     * @see #getUpdateModus mit Hilfe des DocumentenListener erhält man eine Meldung, wenn
     * der Inhalt des Feldes sich geändert hat. changeUpdate wird aber nicht aufgerufen  !!!!!!
     */
    public void insertUpdate(DocumentEvent e) {
        if (getUpdateModus()) return;
        // Debug.print("GUI", Debug.INFO, " insertUpdate "+e.getType().toString() );
        change();
    }

    /**
     * removeUpdate
     * @return none
     * @param DocumentEvent e
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #Change
     * @see #insertUpdate
     * @see #changedUpdate
     * @see #getUpdateModus mit Hilfe des DocumentenListener erhält man eine Meldung, wenn
     * der Inhalt des Feldes sich geändert hat. changeUpdate wird aber nicht aufgerufen  !!!!!!
     */
    public void removeUpdate(DocumentEvent e) {
        if (getUpdateModus()) return;
        change();
    }

    /**
     * changedUpdate
     * @return none
     * @param DocumentEvent e
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #Change
     * @see #insertUpdate
     * @see #changedUpdate
     * @see #getUpdateModus mit Hilfe des DocumentenListener erhält man eine Meldung, wenn
     * der Inhalt des Feldes sich geändert hat. changeUpdate wird aber nicht aufgerufen  !!!!!!
     */
    public void changedUpdate(DocumentEvent e) {
        if (getUpdateModus()) return;
        change();
    }

    /**
     * update
     * @return none
     * @param Modell modell, MvcModellDataObject e
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #readDaten
     * @see #setUpdateModus Methode über Interface, wenn die ViewNr verschieden ist, hole die Daten
     */
    public void update(MvcModell modell, MvcModellDataObject e) {
        if (( getViewNr() != e.getViewerId()) && (getId() == e.getId())) {
            setUpdateModus(true);
            readDaten(modell);
            setUpdateModus(false);
        }
        else {
            //Debug.print("GUI", Debug.INFO,  " updatewert wird nicht geholt");
        }
    } // updateOneView  Frame1

    /**
     * setText
     * @return none
     * @param String s
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #readDaten
     * @see #setUpdateModus setzt über die Superklasse den String s
     * holt sich mit Hilfe der statischen Variable aus Daten0, die letzte ObjId und setzt diesen Wert
     */
    public void setText(String s) {
        setUpdateModus(true);
        _textfield.setText(s);
        String ss = _textfield.getText();
        setUpdateModus(false);
    }


    /**
     * getText
     * @return _textfield.getText()
     * @param none
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #setText
     *
     */
    public String getText() {
      return _textfield.getText();
    }



    /**
     * readDaten
     * @return none
     * @param Modell modell
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #Update
     * @see #setObject liest mit Hilfe des Modells und der ObjId das gew. Object
     */
    protected void readDaten(MvcModell modell) {
        AbstractSharedDoc Obj = modell.getModellData(getId());
        //Debug.print("GUI", Debug.INFO, getId() + " update");
        setObject(Obj);
    }

    /**
     * setObject
     * @return none
     * @param Object Obj
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #Update
     * @see #readDaten setzt den Inhalt des Dokumentes
     */
    public void setObject(AbstractSharedDoc Obj) {
        this.setText(AbstractSharedDoc.ObjectToString(Obj));
    }


    /**
     * Constructor für ein DefaultModel des DocumentenListerner
     * @return none
     * @param none
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see verwendet die Klasse DobleTextDocument, damit eine immer eine gültige Zahl im Feld eingetragen ist.
     */
    protected abstract Document createDefaultModel();

    /**
     * change
     * @return none
     * @param none
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #isValid Abstracte Klasse
     */
    protected abstract void change();

    /**
     * isValid
     * @return none
     * @param none
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #Change Abstracte Klasse
     */
    public abstract boolean isValid();
    //  public abstract Object getValue();    ????????????????????
}
