/**
 * PersonDialog.java - "Programmering i Java", 4.utgave - 2009-07-01
 *
 * Klassen ligger i pakken mittBibliotek.
 * Dette er en dialog tilpasset klassen mittBibliotek.Person.
 * Feltet med personnummer er låst for redigering.
 * Et Person-objekt er argument til visDialog(). Dersom dette inneholder et
 * negativt personnummer, vil teksten "ikke definert" vises i nummerfeltet i dialogen.
 */

package mittBibliotek;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import static javax.swing.JOptionPane.*;

public class PersonDialog extends MinDialog {  // MinDialog i pakken mittBibliotek
  private JTextField persnrFelt = new JTextField(8);
  private JTextField fornavnFelt = new JTextField(15);
  private JTextField etternavnFelt = new JTextField(15);

  public PersonDialog(JFrame forelder) {
    super(forelder, "Person");
    add(new JPanel(), BorderLayout.NORTH);  // litt "luft"
    add(new PersonDatapanel(), BorderLayout.CENTER);
    add(getKnappepanel(), BorderLayout.SOUTH);
    pack();
  }

  private class PersonDatapanel extends JPanel {
    public PersonDatapanel() {
      setLayout(new GridLayout(3, 2));
      add(new JLabel("Personnr: ", JLabel.RIGHT));
      add(persnrFelt);
      persnrFelt.setEditable(false); // brukeren kan ikke endre nummeret
      add(new JLabel("Fornavn: ", JLabel.RIGHT));
      add(fornavnFelt);
      add(new JLabel("Etternavn: ", JLabel.RIGHT));
      add(etternavnFelt);
    }
  }

  /**
   * Metode som viser et dialogvindu med data fra argumentet personen.
   * Hvis personnr er negativt, betyr det at nummer ikke er definert.
   * Brukeren kan editere i feltene for for- og etternavn.
   */
  public boolean visDialog(Person personen) {
    String tekstNrFelt = (personen.getPersonNr() < 0)
                                  ? "ikke definert" : "" + personen.getPersonNr();
    persnrFelt.setText(tekstNrFelt);
    fornavnFelt.setText(personen.getFornavn());
    etternavnFelt.setText(personen.getEtternavn());
    setOk(false);
    pack();
    fornavnFelt.requestFocusInWindow();
    setVisible(true);
    if (isOk()) {
      personen.setFornavn(fornavnFelt.getText());
      personen.setEtternavn(etternavnFelt.getText());
      return true;
    } else {
      return false;
    }
  }

  /**
   * Definerer krav til data:
   * Både fornavn og etternavn må være fylt ut av brukeren.
   * Dette er en omdefinering av metode arvet fra MinDialog
   */
  protected boolean okData() {
    String fornavn = fornavnFelt.getText().trim();
    String etternavn = etternavnFelt.getText().trim();
    if (fornavn.equals("") || etternavn.equals("")) {
      showMessageDialog(PersonDialog.this, "Både for- og etternavn må fylles ut!");
      if (!fornavn.equals("")) {
        etternavnFelt.requestFocusInWindow();
      } else {
        fornavnFelt.requestFocusInWindow();
      }
      return false; // data er ikke ok (for- og/eller etternavn er blankt)
    } else {
      return true;  // data er ok
    }
  }
}
