FileDocCategorySizeDatePackage
InEntry.javaAPI DocExample13146Tue Dec 08 01:21:00 GMT 1998HumanInterface

InEntry.java

// Copyright 1997 Object UK Ltd.
// Author Andrew Carmichael
// Updated Tim Shelley
//
// Date
// Version 0.2
// Email: objectuk@objectuk.co.uk
// Web: http://www.objectuk.co.uk

package HumanInterface;

// Generated by Together/J

import java.awt.*;
import java.awt.event.*;
import java.util.Hashtable;
import ProblemDomain.*;

/**@note Dialog for creating individuals and families
@version 0.3
@author Tim Shelley
*/
public class InEntry extends Dialog implements java.awt.event.TextListener,java.awt.event.ActionListener {

  ListDialog listDlg;
  ErrorDialog errorDlg;

  Hashtable list = new Hashtable();
/**@associates <b>Individual</b>*/
  Hashtable people = new Hashtable();
  Family childReturned;
  Family parentReturned;
  Individual person;
  boolean newFamily = false;
  boolean newIndividual = true; 
  boolean cancel = false;

// GUI Components           
  private GridLayout gridLayout1 = new GridLayout();

  private Panel panel1 = new Panel();
  private Label label1 = new Label();
  private Label label2 = new Label();
  private Label label3 = new Label();
  private Label label4 = new Label();
  private Label label5 = new Label();
  private Label label6 = new Label();
  private Label label7 = new Label();
  private Label label8 = new Label();

  private TextField textField1 = new TextField();
  private TextField textField2 = new TextField();
  private TextField textField3 = new TextField();
  private TextField textField4 = new TextField();
  private TextField textField5 = new TextField();
  private TextField textField6 = new TextField();
  private TextField textField7 = new TextField();

  private Button button1 = new Button();
  private Button button2 = new Button();
  private Button button3 = new Button();
  private Button button4 = new Button();
  private Button button5 = new Button();

  public InEntry(Frame frame, String title, boolean modal) {
    super(frame, title, modal);
    try {
      setup();
      add(panel1);
      pack();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
    this.setSize(410,291);
    Dimension frmSize = Toolkit.getDefaultToolkit().getScreenSize();
    setLocation((frmSize.width - getSize().width)/2, (frmSize.height - getSize().height)/2);
//    validate();
  }

  public InEntry(Frame frame) {
    this(frame, "", false);
  }

  public InEntry(Frame frame, boolean modal) {
    this(frame, "", modal);
  }

  public InEntry(Frame frame, String title) {
    this(frame, title, false);
  }

/**@note Setup labels for the dialog
@exception Exception*/
  public void setup() throws Exception{

    this.setTitle("Individual Detail Entry...");

    label1.setText("First Names");
    label2.setText("Child Of");
    label3.setText("Sex");
    label4.setText("Date of Birth");
    label6.setText("Date of Death");
    label7.setText("Parent Of");
    label8.setText("Maiden Name");

    textField2.addKeyListener(new textEventHandler(this));
    textField3.addTextListener(this);
    textField6.setEditable(false);
    textField7.setEditable(false);

    button1.setLabel("OK");
    button1.addActionListener(this);
    button2.setLabel("Cancel");
    button2.addActionListener(this);
    button3.setLabel("Child Of >>");
    button3.addActionListener(this);
    button4.setLabel("Married To >>");
    button4.addActionListener(this);
    button5.setLabel("Individual >>");
    button5.addActionListener(this);

    gridLayout1.setRows(10);
    gridLayout1.setHgap(5);
    gridLayout1.setColumns(2);
    gridLayout1.setVgap(5);

    panel1.setLayout(gridLayout1);
    panel1.add(label1, null);
    panel1.add(textField1, null);
    panel1.add(label2, null);
    panel1.add(textField7, null);
    panel1.add(label7, null);
    panel1.add(textField2, null);
    panel1.add(button5, null);
    panel1.add(button3, null);
    panel1.add(button4, null);
    panel1.add(label5, null);
    panel1.add(label3, null);
    panel1.add(textField3, null);
    panel1.add(label8, null);
    panel1.add(textField6, null);
    panel1.add(label4, null);
    panel1.add(textField4, null);
    panel1.add(label6, null);
    panel1.add(textField5, null);
    panel1.add(button1, null);
    panel1.add(button2, null);
    this.addWindowListener(new InEntry_windowEvent(this));
  }

/**@note Method to set up the list for the dialog
@param Hashtable list*/
  void setList(Hashtable list) {
    this.list = list;  
  }

/**@note Method to set up temporary individual list
@param Hashtable list*/
  void setInList(Hashtable list) {
    people = list;
  }

/**@note Small method to check to see if the cancel button has been 
pressed
@return boolean*/
  boolean getCancel() {
    return cancel;
  }

/**@note Create and setup a list dialog*/
  void createListDialog() {
    listDlg = new ListDialog((Frame)getParent());
    Dimension frmSize = getSize();
    Point loc = getLocation();
    listDlg.setLocation((frmSize.width - 180)/ 2 + loc.x, (frmSize.height - 300) / 2 + loc.y);
    listDlg.setModal(true);
    listDlg.setMenu(false);
  }

/**@note This method is called when the 'Child Of' button is pressed.  
It displays a list of families for the list dialog to display.
When a family is chosen it will appear in the Child Of field.*/
  void setChildOfField() {
    createListDialog();
    listDlg.setTitle("Child of...");
    listDlg.createFamilyList(list);
    listDlg.setVisible(true);
    childReturned = listDlg.getFamily();
    if(childReturned != null) textField7.setText(childReturned.getHusband().getFamilyName());
    if(textField2.getText().length() > 0) {
      textField3.setText("F");
      textField6.setText(textField7.getText());
    }
    else
      textField6.setText("");
  }

/**@note This method is called when the 'Parent Of' button is pressed 
and allows the user to choose which individual the current 
individual is married to.  When chosen it will display the name 
in the Parent Of field.*/
  void setParentOfField() {
    createListDialog();
    listDlg.setTitle("Married To...");
    listDlg.createSinglesList(list);
    listDlg.setVisible(true);
    parentReturned = listDlg.getFamily();
    if(parentReturned != null)
    {
      textField2.setText(parentReturned.getHusband().getFamilyName());
      newFamily = false;
	}
    if(textField7.getText().length() > 0) {
       textField3.setText("F");
       textField6.setText(textField7.getText());
    }       
    if(textField3.getText().toUpperCase().equals("F"))
      textField6.setEditable(true);

  }

/**@note This method is called when the 'Individual' button is pressed.  
It allows the user to pick an individual to be display in this 
dialog.*/
  void setIndividualFields() {
    Family family;
    String test;

    createListDialog();
    listDlg.setTitle("Individuals...");
    listDlg.createIndividualList(people);
    listDlg.setVisible(true);
    person = listDlg.getIndividual();
    if(person != null) {
      newFamily = true;    
      parentReturned = null;
      newIndividual = false;
      textField1.setText(person.getGivenNames()); 
      family = person.getChildOf();
      if(family != null) textField7.setText(family.getHusband().getFamilyName());
      textField3.setText(person.getSex());
      test = person.getSex();
      if(test.equals("M")) textField2.setText(person.getFamilyName());
      button1.setLabel("Update");
    }
  }

/**@note Method to return the individual if one has been newly created.
@return ProblemDomain.Individual*/
  Individual getIndividual() {
    return person;
  }

/**@note A simple method to check to see if the Individual is a child of 
any family*/
  boolean isChild() {
    if(childReturned != null) {
      if(newIndividual) return true;
      else return false;
    }
    else return false;
  }

  Family getChild() {
    return childReturned;
  }

  boolean isParent() {
    if(parentReturned != null) return true;
    else return false;
  }

  Family getParentOf() {
    return parentReturned;
  }

/**@note When the OK button is pressed a new individual is created*/
  void createIndividual() {
    Family family;
    String testSex = new String();
    int notComplete = 0;
    String error = new String();
                     
    testSex = textField3.getText().toUpperCase();
    if(textField1.getText().length() == 0) {
      notComplete = 1;
      error = new String("Need to input first name");
    }
    else {
      if(parentReturned != null) {
        if(testSex.equals("M")) {
          if(parentReturned.getHusband() != null) {
            notComplete = 1;
            error = error + "\nHusband for family already exists";
          }
        }
        else {
          if(testSex.equals("F")) {
            if(parentReturned.getWife() != null) {
              notComplete = 1;
              error = error + "\nWife for family already exists";
            }
          }
        }
      }
    }

    if(textField7.getText().length() == 0) {
      if(textField2.getText().length() == 0) {
        notComplete = 1;
        error = error + "\nNeed childOf or parentOf";
      }
    }
    if(textField3.getText().length() == 0) {
      error = error + "\nNeed to enter sex";
      notComplete = 1;
    }
    else {
      if(!testSex.equals("M") && !testSex.equals("F")) {
        notComplete = 1;
        error = error + "\nSex must be m or f";
      }
    }
    if(newFamily == true && testSex.equals("F")) {
      notComplete = 1;
      error = error + "\nCreation of new family must start with \nhusband";
    }
    if(notComplete == 0) {
      if(newIndividual) {
        person = new Individual();
        if(textField7.getText().length() == 0) {
          if(testSex.equals("F") && textField6.getText().length() != 0)
            person.setFamilyName(textField6.getText());
          else
            person.setFamilyName(textField2.getText());
        }
        else person.setFamilyName(textField7.getText());
        person.setGivenNames(textField1.getText());
        person.setSex(testSex);
      }
      dispose();
    }
    else {
      errorDlg = new ErrorDialog((Frame)getParent(),true);
      errorDlg.setMessage(error);
      Dimension frmSize = getParent().getSize();
      Point loc = getParent().getLocation();
      errorDlg.setLocation((frmSize.width - 253)/ 2 + loc.x, (frmSize.height - 192) / 2 + loc.y);
      errorDlg.setVisible(true);
    }
  }

/**@note If the Individual already exists then this method is called to
update the Individuals' record.*/  
  void updateIndividual() {
    if(textField1.getText().length() > 0) person.setGivenNames(textField1.getText());
    dispose();
  }

/**@return Returns true if it is a new Family.*/
  boolean getNewFamily() {
    return newFamily;
  }

/**@return Returns true if Individual is a new Individual.*/
  boolean isNewIndividual() {
    return newIndividual;
  }

  public void textValueChanged(TextEvent e) {
    String testSex = textField3.getText().toUpperCase();
    if(testSex.equals("F") && textField2.getText().length() != 0)
      textField6.setEditable(true);
    else textField6.setEditable(false);
    validate();
  }

  void keyPressed() {
    newFamily = true;
    parentReturned = null;
  }

/**@note Implemented method to handle action events, in this class only
handles the button events.*/
  public void actionPerformed(ActionEvent e) {
    String command = e.getActionCommand();
    if(command.equals("OK")) createIndividual();
    if(command.equals("Update")) updateIndividual();
    if(command.equals("Cancel"))
    {
      cancel = true;
      dispose();
    }
    if(command.equals("Child Of >>")) setChildOfField();
    if(command.equals("Married To >>")) setParentOfField();       
    if(command.equals("Individual >>")) setIndividualFields();
  }

/**@note Captures the windowClosing event and calls dispose() so that 
the dialog closes.*/
  void this_windowClosing(WindowEvent ee) {
    dispose();
  }
}

class textEventHandler extends java.awt.event.KeyAdapter {
 InEntry adaptee;

  textEventHandler(InEntry adaptee) {
    this.adaptee = adaptee;
  }

  public void keyPressed(KeyEvent e) {
    adaptee.keyPressed();
  }
}

class InEntry_windowEvent extends java.awt.event.WindowAdapter {
  InEntry adaptee;

  InEntry_windowEvent(InEntry object) {
    adaptee = object;
  }

  public void windowClosing(WindowEvent e) {
    adaptee.this_windowClosing(e);
  }
}