/**
 * @(#) gTextFieldDouble.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 javax.swing.text.Document;
import org.app.mvc.MvcModell;
import org.app.gui.gTextField0;
import org.app.documents.AbstractDoc;
import org.app.documents.DblDoc;
import org.app.documents.AbstractSharedDoc;
import org.app.mvc.MvcModell;

/**
 * description:
 *
 * @version     1.0  19.07.01
 * @author      Thomas Schmidt, Michael Wilhelem
 */

public class gTextFieldDouble extends gTextField0 {

    public gTextFieldDouble() {
        setText("x");
    }

    /**
     * Constructor
     * @return none
     * @param Modell modell, long ViewNr
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see setzt die ViewNr, zum Abgleich mit dem update des Controllers Das Modell wird nur als Parameter übergeben !
     * Es dient dazu, das DialogElement in den Listener einzutragen
     */
    public gTextFieldDouble(MvcModell modell, String szDokId) {
        _modell = modell;
        AbstractSharedDoc Daten1Obj = _modell.GetModellData(szDokId);
        DblDoc Obj = (DblDoc)Daten1Obj;
        setUpdateModus(true);
        setViewNr(gViewer0.getViewerNr());
        //Debug.print("GUI", Debug.INFO,  "JTextFieldDouble: getViewNr():" +getViewNr()  );
        setObject(Obj);
        long k = Obj.getId();
        setId(Obj.getId());
        modell.addObserver(this);
        _textfield.getDocument().addDocumentListener(this);
        setUpdateModus(false);
    } // create

    /**
     * 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 Document createDefaultModel() {
        gDoubleTextDocument doc = new gDoubleTextDocument();
        doc.addDocumentListener(this);
        return doc;
    }
    //---------------------------------------------------------------------

    /**
     * change
     * @return none
     * @param none
     * @exception none
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #insertUpdate
     * @see #removeUpdate
     * @see #changedUpdate wird von indertUpdate und removeUpdate aufgerufen
     */
    protected void change() {
    /*
    Debug.print("GUI", Debug.INFO, "Methode change: ");
    Debug.print("GUI", Debug.INFO, "   _modell.ID: "+_modell.getModellId() );
    Debug.print("GUI", Debug.INFO, "    getViewNr: "+getViewNr() );
    Debug.print("GUI", Debug.INFO, "    getId : "+getId() );
    */

        if (!getUpdateModus()) {
            //Debug.print("GUI", Debug.INFO, "setObject Aufgerufen");
            _modell.setModellData(getViewNr(), getId(), 0, new DblDoc(getValue()));
            // set modify
        }
    }

    /**
     * isValid
     * @return boolean Textfield ist eine gültige Double Zahl
     * @param none
     * @exception NumberFormatException
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #getValue
     */
    public boolean isValid() {
        try {
            // ein leerer String muss auch korrekt sein
            // da ein komplettes Löschen möglich sein muss
            // ev. auch ein komplettes Markieren mit
            String s = super.getText();
            if (s.compareTo("") == 0)
                return true;
            else
                Double.parseDouble(super.getText());
            return true;
        }
        catch (NumberFormatException e) {
            return false;
        }
    } // isValid

    /**
     * getValue
     * @return double Wert des textFields
     * @param none
     * @exception NumberFormatException
     * @version      1.0
     * @author Thomas Schmidt, Michael Wilhelm FH MD, FB Bauwesen
     * @use Example
     * @see #isValid
     */
    public double getValue() {
        //Debug.print("GUI", Debug.INFO,  "getValue  in JtextFieldDouble  _id: " + _id+ "  Inhalt: "+super.getText() );
        try {
            String s = super.getText();
            if (s.compareTo("") == 0)
                return 0;
            else
                return Double.parseDouble(super.getText());
        }
        catch (NumberFormatException e) {
            return 0;
        }
    } // getValue
}
