import data.*;
import sale.*;
import util.swing.*;

import java.awt.*;
import java.text.*;

import javax.swing.*;


/**
 * Editor für die Geldbeträge in den Tabellen.
 */
public class DMCellEditor extends DefaultCellEditor
{

  //// attributes ////////////////////////////////////////////////////////////

  private String[] result;


  //// constructor ///////////////////////////////////////////////////////////

  /**
   * Erstellt ein neues Objekt der Klasse <CODE>DMCellEditor</CODE>.
   */
  public DMCellEditor (String[] result, String init)
  {
    super(new JTextInput(result, init));
    this.result = result;
  }


  //// public methods ////////////////////////////////////////////////////////

  /**
   * Gibt die zum Editieren verwendete Komponente korrekt initialisiert
   * zur&uuml;ck.
   */
  public Component getTableCellEditorComponent(JTable jTable,
    Object value, boolean isSelected, int row, int column)
  {
    // die Komponente holen,
    Component component =
      super.getTableCellEditorComponent(jTable, value, isSelected, row, column);

    // ...initialisieren
    ((JTextInput)component).setText(((Currency)
      Shop.getTheShop().getCatalog("DM")).toString((NumberValue)value));

    // ...und zurueckgeben
    return component;
  }

  /**
   * Versucht, den eingegebenen Text als Geldbetrag zu interpretieren.
   */
  public Object getCellEditorValue()
  {
    // versuchen, den Text zu parsen und zurueckzugeben
    try {
      return ((Currency)Shop.getTheShop().getCatalog("DM")).parse(result[0]);
    }
    catch (ParseException pexc) {
      // Text konnte nicht verarbeitet werden, 0 zurueckgeben
      return new IntegerValue (0);
    }
  }

  /**
   * Versucht, das Editieren zu beenden und gibt eine Bewertung des
   * Erfolges zur&uuml;ck.
   */
  public boolean stopCellEditing()
  {
    // versuchen den Text zu parsen
    try {
      ((Currency)Shop.getTheShop().getCatalog("DM")).parse(result [0]);
    }
    catch (ParseException pexc) {
      // Text konnte nicht verarbeitet werden, editieren kann nicht
      // beendet werden
      return false;
    }

    // Editieren kann nach Maszgabe der Methode der Oberklasse beendet werden
    return super.stopCellEditing();
  }
}