Puka - Software for Detection of Breaths in Strain Gauge Recordings 1.0.0

File: <base>/sourceCode/subjectData/frmSessionData.java (40,732 bytes)
/*
 * frmSessionData.java
 *
 * Created on June 25, 2004, 9:44 AM
 */

package subjectData;

import java.sql.Connection; 
import java.sql.Statement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;
import javax.swing.JFileChooser; 
import java.io.File;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.util.zip.ZipOutputStream;
import java.util.zip.ZipEntry;

/**
 *
 * @author  jaetzel
 */

public class frmSessionData extends javax.swing.JInternalFrame {
  Connection conData; Statement stmSQL; 
  private boolean bolAddingNew = false;
  static final int intBUFFER = 2048;  //constant used for zip file access
	
  /** Creates new form frmSessionData */
  public frmSessionData() {
    initComponents();
    
    try { 
      Class.forName("org.gjt.mm.mysql.Driver"); 
      conData = SubjectData.getDatabaseConnection();   //gets connection to the correct database
    } catch (Exception e) { e.printStackTrace(); }
    FillComboBoxes();  //populate the GUI from the database
    DisableGUI();  //so can't edit the session info yet
  }

    private void FillComboBoxes() {
        //load the form after filling cboSubject & cboExperimenter
        String strNames = ""; int intSubID = 0; String strTemp = "";
        
        cboSubject.removeAllItems(); cboSubject.addItem("");
        cboExperimenter.removeAllItems();

        try {
            stmSQL = conData.createStatement();  //stmSQL is global - have to get it ready
            ResultSet rssSubjects = stmSQL.executeQuery("SELECT subID, PPG, firstName, middleInitial, lastName FROM subject ORDER BY lastName, PPG");
            while(rssSubjects.next()) {  //fill up cboSubject w/subject names & PPG numbers
                strTemp = rssSubjects.getString("PPG");
                if ( strTemp.equals("") == false ) { strNames = rssSubjects.getInt("subID") + ": " + strTemp; }
                else { strNames = rssSubjects.getInt("subID") + ": " + rssSubjects.getString("lastName") + ", " + rssSubjects.getString("firstName") + " " + rssSubjects.getString("middleInitial") + "."; }
                cboSubject.addItem(strNames); }
        
            //load into cboExperimenter
            stmSQL = conData.createStatement();  
            rssSubjects = stmSQL.executeQuery("SELECT boxChoice FROM comboBoxes WHERE boxID = 'Experimenter' ORDER BY boxChoice");
            while(rssSubjects.next()) { cboExperimenter.addItem(rssSubjects.getString("boxChoice")); } 
       
            //load into cboType
            stmSQL = conData.createStatement();  
            rssSubjects = stmSQL.executeQuery("SELECT boxChoice FROM comboBoxes WHERE boxID = 'ExperimentType' ORDER BY boxChoice");
            while(rssSubjects.next()) { cboType.addItem(rssSubjects.getString("boxChoice")); } 
        } catch(java.sql.SQLException e) { e.printStackTrace(); }
    }
    
  /** This method is called from within the constructor to
   * initialize the form.
   * WARNING: Do NOT modify this code. The content of this method is
   * always regenerated by the Form Editor.
   */
  private void initComponents() {//GEN-BEGIN:initComponents
    java.awt.GridBagConstraints gridBagConstraints;

    lblSubject = new javax.swing.JLabel();
    cboSubject = new javax.swing.JComboBox();
    cmdAdd = new javax.swing.JButton();
    jLabel21 = new javax.swing.JLabel();
    cmdDelete = new javax.swing.JButton();
    cmdEditData = new javax.swing.JButton();
    cmdClose2 = new javax.swing.JButton();
    cmdOKClose = new javax.swing.JButton();
    jScrollPane3 = new javax.swing.JScrollPane();
    lstSessions1 = new javax.swing.JList();
    cmdCancel = new javax.swing.JButton();
    fraSessionInfo = new javax.swing.JPanel();
    txtAge = new javax.swing.JTextField();
    lblDate = new javax.swing.JLabel();
    txtDate = new javax.swing.JTextField();
    lblAge = new javax.swing.JLabel();
    lblType = new javax.swing.JLabel();
    cboType = new javax.swing.JComboBox();
    lblExperimenter = new javax.swing.JLabel();
    cboExperimenter = new javax.swing.JComboBox();
    txtTime = new javax.swing.JTextField();
    lblTime = new javax.swing.JLabel();
    txtComment = new javax.swing.JTextArea();
    jLabel20 = new javax.swing.JLabel();
    lblDataFile = new javax.swing.JLabel();
    txtDataFile = new javax.swing.JTextField();
    cmdSetData = new javax.swing.JButton();
    cmdDelete1 = new javax.swing.JButton();

    getContentPane().setLayout(new java.awt.GridBagLayout());

    setClosable(true);
    setIconifiable(true);
    setMaximizable(true);
    setResizable(true);
    setTitle("Work With Sessions");
    setPreferredSize(new java.awt.Dimension(800, 375));
    lblSubject.setText("select subject:");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(0, 0, 4, 0);
    getContentPane().add(lblSubject, gridBagConstraints);

    cboSubject.setPreferredSize(new java.awt.Dimension(250, 20));
    cboSubject.addItemListener(new java.awt.event.ItemListener() {
      public void itemStateChanged(java.awt.event.ItemEvent evt) {
        cboSubjectItemStateChanged(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridwidth = 3;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(0, 4, 4, 0);
    getContentPane().add(cboSubject, gridBagConstraints);

    cmdAdd.setMnemonic('A');
    cmdAdd.setText("add new");
    cmdAdd.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdAddActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.insets = new java.awt.Insets(5, 20, 5, 0);
    getContentPane().add(cmdAdd, gridBagConstraints);

    jLabel21.setText("sessions for this subject:");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
    getContentPane().add(jLabel21, gridBagConstraints);

    cmdDelete.setMnemonic('D');
    cmdDelete.setText("delete");
    cmdDelete.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdDeleteActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 3;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.insets = new java.awt.Insets(5, 30, 5, 0);
    getContentPane().add(cmdDelete, gridBagConstraints);

    cmdEditData.setMnemonic('V');
    cmdEditData.setText("edit");
    cmdEditData.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdEditDataActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.insets = new java.awt.Insets(5, 20, 5, 0);
    getContentPane().add(cmdEditData, gridBagConstraints);

    cmdClose2.setMnemonic('C');
    cmdClose2.setText("close");
    cmdClose2.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdClose2ActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 4;
    gridBagConstraints.gridy = 5;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST;
    gridBagConstraints.insets = new java.awt.Insets(10, 0, 0, 0);
    getContentPane().add(cmdClose2, gridBagConstraints);

    cmdOKClose.setMnemonic('S');
    cmdOKClose.setText("save");
    cmdOKClose.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdOKCloseActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.insets = new java.awt.Insets(5, 20, 5, 0);
    getContentPane().add(cmdOKClose, gridBagConstraints);

    jScrollPane3.setMinimumSize(new java.awt.Dimension(300, 100));
    jScrollPane3.setPreferredSize(new java.awt.Dimension(600, 100));
    lstSessions1.setBorder(new javax.swing.border.EtchedBorder());
    lstSessions1.setModel(new javax.swing.AbstractListModel() {
      String[] strings = { "select a session" };
      public int getSize() { return strings.length; }
      public Object getElementAt(int i) { return strings[i]; }
    });
    lstSessions1.setMaximumSize(new java.awt.Dimension(200, 30));
    lstSessions1.setMinimumSize(new java.awt.Dimension(200, 30));
    lstSessions1.setPreferredSize(new java.awt.Dimension(360, 30));
    lstSessions1.setVisibleRowCount(5);
    lstSessions1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
      public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
        lstSessions1ValueChanged(evt);
      }
    });

    jScrollPane3.setViewportView(lstSessions1);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.gridwidth = 5;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
    getContentPane().add(jScrollPane3, gridBagConstraints);

    cmdCancel.setText("cancel");
    cmdCancel.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdCancelActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 4;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.insets = new java.awt.Insets(5, 40, 5, 0);
    getContentPane().add(cmdCancel, gridBagConstraints);

    fraSessionInfo.setLayout(new java.awt.GridBagLayout());

    fraSessionInfo.setBorder(new javax.swing.border.TitledBorder("session details"));
    txtAge.setPreferredSize(new java.awt.Dimension(150, 19));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 0);
    fraSessionInfo.add(txtAge, gridBagConstraints);

    lblDate.setText("date (yyyy-mm-dd):");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 0);
    fraSessionInfo.add(lblDate, gridBagConstraints);

    txtDate.setMinimumSize(new java.awt.Dimension(130, 20));
    txtDate.setPreferredSize(new java.awt.Dimension(150, 19));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 0);
    fraSessionInfo.add(txtDate, gridBagConstraints);

    lblAge.setText("subject age:");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
    fraSessionInfo.add(lblAge, gridBagConstraints);

    lblType.setText("experiment name:  ");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 0);
    fraSessionInfo.add(lblType, gridBagConstraints);

    cboType.setPreferredSize(new java.awt.Dimension(150, 19));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 0);
    fraSessionInfo.add(cboType, gridBagConstraints);

    lblExperimenter.setText("experimenter:");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.ipady = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
    fraSessionInfo.add(lblExperimenter, gridBagConstraints);

    cboExperimenter.setPreferredSize(new java.awt.Dimension(150, 19));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 3;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.ipady = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 0);
    fraSessionInfo.add(cboExperimenter, gridBagConstraints);

    txtTime.setText("00:00");
    txtTime.setMinimumSize(new java.awt.Dimension(130, 26));
    txtTime.setPreferredSize(new java.awt.Dimension(70, 20));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 3;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 0);
    fraSessionInfo.add(txtTime, gridBagConstraints);

    lblTime.setText("time (hh:mm, 00 to 24):");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(4, 6, 0, 0);
    fraSessionInfo.add(lblTime, gridBagConstraints);

    txtComment.setFont(new java.awt.Font("Dialog", 0, 10));
    txtComment.setLineWrap(true);
    txtComment.setRows(3);
    txtComment.setWrapStyleWord(true);
    txtComment.setBorder(new javax.swing.border.EtchedBorder());
    txtComment.setMinimumSize(new java.awt.Dimension(400, 150));
    txtComment.setPreferredSize(new java.awt.Dimension(480, 50));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.gridwidth = 4;
    gridBagConstraints.ipady = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 0);
    fraSessionInfo.add(txtComment, gridBagConstraints);

    jLabel20.setText("comment:");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.ipady = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 0);
    fraSessionInfo.add(jLabel20, gridBagConstraints);

    lblDataFile.setText("data file:");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 4;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
    fraSessionInfo.add(lblDataFile, gridBagConstraints);

    txtDataFile.setEditable(false);
    txtDataFile.setPreferredSize(new java.awt.Dimension(290, 20));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 4;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(4, 4, 0, 0);
    fraSessionInfo.add(txtDataFile, gridBagConstraints);

    cmdSetData.setText("add data file");
    cmdSetData.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdSetDataActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 3;
    gridBagConstraints.gridy = 4;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(3, 2, 3, 0);
    fraSessionInfo.add(cmdSetData, gridBagConstraints);

    cmdDelete1.setText("delete data file");
    cmdDelete1.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdDelete1ActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 4;
    gridBagConstraints.gridy = 4;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 0);
    fraSessionInfo.add(cmdDelete1, gridBagConstraints);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 4;
    gridBagConstraints.gridwidth = 5;
    getContentPane().add(fraSessionInfo, gridBagConstraints);

    pack();
  }//GEN-END:initComponents

	private void cmdDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdDeleteActionPerformed
    //delete the session highlighted in lstSessions
      int intAnswer = 0; String strTemp = ""; String strSubID = ""; String strSesID = ""; 
      String strTime = ""; ResultSet rssSubjects; boolean bolMade = true; String strHour = ""; String strSQL = "";
        
      //check if a subject and session are selected and get the IDs
      strTemp = (String)cboSubject.getSelectedItem();  
      if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the subject you want to delete from the box.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; } 
      strSubID = strTemp.substring(0, strTemp.indexOf(":")); //ID is always the first part before the :
     
			strTemp = (String)lstSessions1.getSelectedValue();
			if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the session you want to delete from the list.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; } 
      strSesID = strTemp.substring(0, strTemp.indexOf(":")); //ID is always the first part before the :
        
      //ask the user if they are sure they want to do the delete, exit if not
      intAnswer = JOptionPane.showConfirmDialog(null, "This session will be deleted from the database.\nAre you sure that you want to delete this session?", "File Delete Confirm", JOptionPane.YES_NO_OPTION); 
      if (intAnswer == JOptionPane.NO_OPTION) { return; } 
        
     try {  //get the path to the previous data file for this session & subject & time
			stmSQL = conData.createStatement();
      rssSubjects = stmSQL.executeQuery("SELECT dataFile FROM sessionData WHERE subID = '" + strSubID + "' AND sessionID = '" + strSesID + "'");          
      rssSubjects.next();
			strTemp = rssSubjects.getString("dataFile");
			if (!strTemp.equals("")) { JOptionPane.showMessageDialog(null, "Please delete the data file before the session.", "Error", JOptionPane.ERROR_MESSAGE); return; }  
    } catch(java.sql.SQLException e) { e.printStackTrace();  }
				
      try {  //delete the existing record from the session table
				stmSQL = conData.createStatement();  //stmSQL & conData are global
        stmSQL.executeUpdate("DELETE FROM sessionData WHERE subID = \"" + strSubID + "\" AND sessionID = \"" + strSesID + "\"");          
      } catch(java.sql.SQLException e) { e.printStackTrace();  JOptionPane.showMessageDialog(null, "There has been an error deleting the session table database entry.", "Database Deletion Error", JOptionPane.ERROR_MESSAGE); return; }
      UpdateList();  //call sub to fill up the list of sessions for the current subject
      ClearGUI();  //call sub to blank out the bottom of the screen
	}//GEN-LAST:event_cmdDeleteActionPerformed

	private void cmdCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdCancelActionPerformed
		//call subs to update screen
		ClearGUI(); 
		UpdateList();      
		DisableGUI();
		cmdAdd.setEnabled(true); cmdDelete.setEnabled(true);
	}//GEN-LAST:event_cmdCancelActionPerformed

	private void cmdDelete1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdDelete1ActionPerformed
		//delete the zip file associated with this session and clear out txtPath and txtTime for new info
    int intAnswer = 0; String strPath = ""; boolean bolMade = true; String strTemp = ""; String strSubID = "";
    String strSesID = ""; ResultSet rssSubjects;	String strSQL = "";
		
		//get the subject and session ID
		strTemp = (String)cboSubject.getSelectedItem();  //get selected subject and session IDs
    if (strTemp.equals("") == true) { return; } 
    if (lstSessions1.getSelectedIndex() == -1) { return; } 
		strSubID = strTemp.substring(0, strTemp.indexOf(":")); //ID is always the first part before the :
    strTemp = (String)lstSessions1.getSelectedValue(); 
    strSesID = strTemp.substring(0, strTemp.indexOf(":"));  //session ID is first also
		
    try {  //get the path to the previous data file for this session & subject & time
			stmSQL = conData.createStatement();
      rssSubjects = stmSQL.executeQuery("SELECT dataFile FROM sessionData WHERE subID = '" + strSubID + "' AND sessionID = '" + strSesID + "'");          
      rssSubjects.next(); 
      strPath = rssSubjects.getString("dataFile");
    } catch(java.sql.SQLException e) { e.printStackTrace();  }
        
    File fileZipPath = new File(strPath);
    if (fileZipPath.exists() == true) {  //file should already exist
	    intAnswer = JOptionPane.showConfirmDialog(null, "The previous data file for this subject and session will be permanently deleted.\nIf you are replacing the existing file click yes, otherwise click no to cancel.", "File Delete Confirm", JOptionPane.YES_NO_OPTION); 
		  if (intAnswer == JOptionPane.NO_OPTION) { return; } 
      else { 
				bolMade = fileZipPath.delete();  //delete the existing file; bolMade shows if successful
        if (bolMade == false) { JOptionPane.showMessageDialog(null, "There has been an error deleting the previous file.  The old file was not deleted.", "Serious File Deletion Error", JOptionPane.ERROR_MESSAGE); return; }
      }
    }
		
    //blank and enable so can update the path & time
		//update data in the database as needed
    strSQL = "UPDATE sessionData SET dataFile = '' WHERE subID = '" + strSubID + "' AND sessionID = '" + strSesID + "'"; 
		try { stmSQL = conData.createStatement(); stmSQL.executeUpdate(strSQL); }
    catch (java.sql.SQLException e) { e.printStackTrace(); }
	
    txtDataFile.setText(""); 
		cmdSetData.setEnabled(true); cmdDelete1.setEnabled(false);
	}//GEN-LAST:event_cmdDelete1ActionPerformed

	private void cmdSetDataActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdSetDataActionPerformed
		//show a file chooser to let user pick a text file for compression.
    //JFileChooser comes with the ability to move around the directory structure
    int intC = 0; String strPath = ""; String strZipPath = "";
		String strSubID = ""; String strSesID = ""; String strTemp = ""; String strType = "";
    String strSQL = ""; boolean bolMade = true;  File fileZipPath;
    File fileDrive; String str1 = ""; int count = 0; int intRow = 0;
     
		//check that the session info - subID, sessionID, type - on the screen is ok
    strTemp = (String)cboSubject.getSelectedItem(); 
    if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the subject.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
    strSubID = strTemp.substring(0, strTemp.indexOf(":")); //ID is always the first part before the :
    strTemp = (String)lstSessions1.getSelectedValue(); 
    if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the session.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
		strSesID = strTemp.substring(0, strTemp.indexOf(":"));  
		strType = (String)cboType.getSelectedItem();
		if (strType.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the type of experiment the subject performed on this date.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
   
		//get the file(s) to put into the zip file and database
    JFileChooser frmFileOpen = new JFileChooser();  //declare a JFileChooser - the select file box
    frmFileOpen.setApproveButtonText("Select Text Files");  //have button say Select instead of Open
    frmFileOpen.setMultiSelectionEnabled(true);  //pick multiple files
    intC = frmFileOpen.showOpenDialog(null);  
    if (intC != JFileChooser.APPROVE_OPTION) { return; }  //user canceled, so exit sub
		
    File fileChosen[] = frmFileOpen.getSelectedFiles();  //the files picked
    for (intC = 0; intC < fileChosen.length; intC++) { strPath = "|" + fileChosen[intC].getPath() + strPath; }
		
		fileZipPath = new File(SubjectData.getSavePlace() + File.separator + "subject_" + strSubID + File.separator + "session_" + strSesID + ".zip");
		bolMade = fileZipPath.mkdirs();
		
		/*if (fileZipPath.exists() == true) {  //file already exists, so delete it.
			intC = JOptionPane.showConfirmDialog(null, "A file with for this subject and this session at this time already exists.\nIf you are replacing the existing file click yes, otherwise click no.", "File Delete Confirm", JOptionPane.YES_NO_OPTION); 
      if (intC == JOptionPane.NO_OPTION) { return; } 
      else { 
				bolMade = fileZipPath.delete();  //delete the existing file; bolMade shows if successful
				if (bolMade == false) { JOptionPane.showMessageDialog(null, "There has been an error deleting the previous file.  The old file was not deleted.", "File Deletion Error", JOptionPane.ERROR_MESSAGE); return; }
      }
    }
   */
    try {  //compress the file and resave it to strZipPath
			BufferedInputStream origin = null;
			strZipPath = fileZipPath.getAbsolutePath();
			bolMade = fileZipPath.createNewFile() ;
      FileOutputStream dest = new FileOutputStream(strZipPath);
      ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
      byte data[] = new byte[intBUFFER];
          
      if (strPath.substring(0,1).equals("|") == true) { //more than one file to put into zip
				strPath = strPath.substring(1);  //trim off first |
        while (strPath.indexOf("|") > 0) {
					str1 = strPath.substring(0, strPath.indexOf("|"));  //get next filename out
          strPath = strPath.substring(strPath.indexOf("|") + 1);  //trim off filename just saved to str1
          FileInputStream fi = new FileInputStream(str1);
          origin = new BufferedInputStream(fi, intBUFFER);
          ZipEntry entry = new ZipEntry(str1);
          out.putNextEntry(entry);
          while((count = origin.read(data, 0, intBUFFER)) != -1) { out.write(data, 0, count); }
          origin.close();
          out.closeEntry();
        }
      }  //add last file, or only file if multiples
      FileInputStream fi = new FileInputStream(strPath);   
      origin = new BufferedInputStream(fi, intBUFFER);
      ZipEntry entry = new ZipEntry(strPath);
      out.putNextEntry(entry);
      while((count = origin.read(data, 0, intBUFFER)) != -1) { out.write(data, 0, count); }
      origin.close();
      out.close();   //close these things for good
    } catch(Exception e) { e.printStackTrace(); }
      
    //update data in the database as needed
		strZipPath = SubjectData.AddEscapeChars(strZipPath);
    strSQL = "UPDATE sessionData SET dataFile = '" + strZipPath + "' WHERE subID = '" + strSubID + "' AND sessionID = '" + strSesID + "'"; 
		try { stmSQL = conData.createStatement(); stmSQL.executeUpdate(strSQL); }
    catch (java.sql.SQLException e) { e.printStackTrace(); }
				
	  txtDataFile.setText(strZipPath);  //show something on screen
		cmdSetData.setEnabled(false);  //have a data file now, so can't set a new one
	}//GEN-LAST:event_cmdSetDataActionPerformed

	private void cmdOKCloseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdOKCloseActionPerformed
		//adds or updates the database
    String strSubID = ""; String strSesID = ""; String strTemp = ""; String strComment = ""; String strType = "";
    String strExperimenter = ""; String strDate = ""; String strSQL = "";  String strAge = "";
		String strZipPath = ""; String strTime = ""; String strMinute = ""; String strHour = "";
    String strPath = ""; boolean bolMade = true;  int intAnswer = 0; File fileZipPath;
    File fileDrive; String strInPath = ""; String str1 = ""; int count = 0; int intRow = 0; 
        
    //get the subject ID and session ID from the combo & list boxes
    strTemp = (String)cboSubject.getSelectedItem(); 
    if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the subject.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
    strSubID = strTemp.substring(0, strTemp.indexOf(":")); //ID is always the first part before the :
    if (bolAddingNew == false) {  //updating the data in the database
			strTemp = (String)lstSessions1.getSelectedValue(); 
      if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the session.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
			strSesID = strTemp.substring(0, strTemp.indexOf(":"));  
		}
        
    //get the values from the user input and put into correct format
    strExperimenter = (String)cboExperimenter.getSelectedItem(); 
		strDate = txtDate.getText();
    strComment = txtComment.getText(); 
		strType = (String)cboType.getSelectedItem();
               
    //check for errors in the text boxes; show message box and exit sub if errors
    if (strExperimenter.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the experimenter for this session.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }
    if (strType.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the type of experiment the subject performed on this date.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
    if (SubjectData.CheckDate(strDate, "the experiment date field") == false) { return; } //call fn to check date       
    strComment = SubjectData.AddEscapeChars(strComment);  //call sub to add / before ', /, and "
    strAge = txtAge.getText();
		if (SubjectData.CheckTime(txtTime.getText(), "clip start time") == true) { strTime = txtTime.getText(); } 
		else { return; }
		
		//update or add data in the database as needed
    if (bolAddingNew == false) {  //updating the data in the database
			strSQL = "UPDATE sessionData SET experimenter = '" + strExperimenter + "', expDate = '" + strDate  + 
			"', comment = '" + strComment + "', expType='" + strType + "', age='" + strAge + "', timeStarted='" + strTime 			
			+ "' WHERE subID = '" + strSubID + "' AND sessionID = '" + strSesID + "'"; 
		} else if (bolAddingNew == true) {  //adding a new row
			strSQL = "INSERT INTO sessionData VALUES (" + strSubID + ", NULL, '" + strDate + "', '" + strExperimenter
			+ "', '" + strComment + "', '" + strType + "', '" + strAge + "', '" + strTime + "', '')"; 
		}
    
    try { stmSQL = conData.createStatement(); stmSQL.executeUpdate(strSQL); }
    catch (java.sql.SQLException e) { e.printStackTrace(); }
				
    ClearGUI(); DisableGUI(); UpdateList();  //call subs to update screen     
		cmdAdd.setEnabled(true); cmdDelete.setEnabled(true);
	}//GEN-LAST:event_cmdOKCloseActionPerformed

	private void cmdEditDataActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdEditDataActionPerformed
		String strTemp = ""; String strSubID = ""; String strSesID = ""; ResultSet rssSubjects;
		
		strTemp = (String)cboSubject.getSelectedItem();  //get selected subject and session IDs
    if (strTemp.equals("") == true) { return; } 
    if (lstSessions1.getSelectedIndex() == -1) { return; } 
		strSubID = strTemp.substring(0, strTemp.indexOf(":")); //ID is always the first part before the :
    strTemp = (String)lstSessions1.getSelectedValue(); 
    strSesID = strTemp.substring(0, strTemp.indexOf(":"));  //session ID is first also
		strTemp = "";
		
    try {  //get the path to the previous data file for this session & subject & time
			stmSQL = conData.createStatement();
      rssSubjects = stmSQL.executeQuery("SELECT dataFile FROM sessionData WHERE subID = '" + strSubID + "' AND sessionID = '" + strSesID + "'");          
      rssSubjects.next(); 
      strTemp = rssSubjects.getString("dataFile");
		} catch(java.sql.SQLException e) { e.printStackTrace();  }
		
		if (strTemp.equals("")) { cmdSetData.setEnabled(true); }
		else { cmdDelete1.setEnabled(true);	}
		EnableGUI();
		bolAddingNew = false;  //set flag - not adding a new session
		cmdAdd.setEnabled(false); cmdDelete.setEnabled(false);
	}//GEN-LAST:event_cmdEditDataActionPerformed

	private void cboSubjectItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboSubjectItemStateChanged
		 //call sub to fill up the list of sessions for this subject
			bolAddingNew = false;  //switch flag - viewing, not adding
      if ((String)cboSubject.getSelectedItem() != "") {  //only want to do this if clicked, not if loading
      if (evt.getStateChange() == java.awt.event.ItemEvent.SELECTED) { 
	      UpdateList();  //call sub to fill up the list of movies for the current subject and session
        ClearGUI();  //clear the boxes in case were previously filled
				DisableGUI();
      }}  //end the ifs
	}//GEN-LAST:event_cboSubjectItemStateChanged

	
    private void ClearGUI() {
      //blank out the controls
      txtDate.setText("0000-00-00");  txtComment.setText(""); txtAge.setText("");
			txtDataFile.setText(""); txtTime.setText("00:00");
			cboType.setSelectedIndex(0); cboExperimenter.setSelectedIndex(0); 
			lstSessions1.removeAll();
    }
    
    private void UpdateList() {
        //show the sessions in the list box for the current subject
        String strSQL = ""; String strTemp = ""; String strID = ""; String strDate = ""; String strType = "";
        String strSession = ""; int intID = 0; String strList[]; int intSize = 0; String strExperimenter = "";

        strTemp = (String)cboSubject.getSelectedItem(); //get the date to parse out the parts
        strID = strTemp.substring(0, strTemp.indexOf(":")); //ID is always the first part before the :
        strSQL = "SELECT sessionID, expDate, experimenter, expType FROM sessionData WHERE subID = \"" + strID + "\" ORDER BY expDate";

        try { 
            ResultSet rssSubjects = stmSQL.executeQuery(strSQL);  //make the resultset on the sql statement
            while(rssSubjects.next()) {  intSize = intSize + 1; }  //count the number of rows in the resultset
            rssSubjects.beforeFirst();  //move to the start of the resultset again
            strList = new String[intSize];  //get the array ready to hold the data
            intSize = 0;  

            while(rssSubjects.next()) {  //get the data out of the database
                intID = rssSubjects.getInt("sessionID"); strType = rssSubjects.getString("expType");
                strDate = rssSubjects.getString("expDate"); strExperimenter = rssSubjects.getString("experimenter");
                strList[intSize] = "" + intID + ": " + strDate + ", " + strType + " (" + strExperimenter + ")";  //store the list item
                intSize = intSize + 1;  //update count for next time
            }
            lstSessions1.setListData(strList); //done with the result set, so add the data to the list
        } catch(java.sql.SQLException e) { e.printStackTrace(); }     
    }
	
  private void lstSessions1ValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_lstSessions1ValueChanged
    //show the selected session's information in the boxes on the screen
    String strTemp = ""; String strSubID = ""; java.sql.Date dateTemp; String strSesID = "";
    
		bolAddingNew = false;  //switch flag - viewing, not adding
    strTemp = (String)cboSubject.getSelectedItem();  //get selected subject and session IDs
    if (strTemp.equals("") == true) { return; } 
    if (lstSessions1.getSelectedIndex() == -1) { return; } 
    
    strSubID = strTemp.substring(0, strTemp.indexOf(":")); //ID is always the first part before the :
    strTemp = (String)lstSessions1.getSelectedValue(); 
    strSesID = strTemp.substring(0, strTemp.indexOf(":"));  //session ID is first also
        
    try { //get all of the data from the database and put it up on the screen
			ResultSet rssSubjects = stmSQL.executeQuery("SELECT * FROM sessionData WHERE subID = " + strSubID + " AND sessionID = " + strSesID);
      rssSubjects.next();  //move forward so can get the data out of the database
      cboExperimenter.setSelectedItem(rssSubjects.getString("experimenter"));
      txtComment.setText(rssSubjects.getString("comment"));
      txtDate.setText(rssSubjects.getString("expDate"));
      cboType.setSelectedItem(rssSubjects.getString("expType"));
			txtAge.setText(rssSubjects.getString("age"));
			txtDataFile.setText(rssSubjects.getString("dataFile"));
    } catch(java.sql.SQLException e) { e.printStackTrace(); }      
		
		DisableGUI();
		cmdAdd.setEnabled(true); cmdDelete.setEnabled(true);
  }//GEN-LAST:event_lstSessions1ValueChanged

  private void cmdAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdAddActionPerformed
		
    if (((String)cboSubject.getSelectedItem()).equals("")) { return; } 
		
		ClearGUI();
		EnableGUI();
		cmdSetData.setEnabled(false);  //have to add the session before can set a data file
		bolAddingNew = true;  //set flag for adding a new session
		cmdAdd.setEnabled(false); cmdDelete.setEnabled(false);
  }//GEN-LAST:event_cmdAddActionPerformed

  private void cmdClose2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdClose2ActionPerformed
    try {  this.setClosed(true); }
    catch(java.beans.PropertyVetoException e) { e.printStackTrace(); }    
  }//GEN-LAST:event_cmdClose2ActionPerformed
  
	private void EnableGUI() {
		cboExperimenter.setEnabled(true);
		cboType.setEnabled(true);
		txtAge.setEditable(true);
  	txtComment.setEditable(true);
		txtDate.setEditable(true);
		txtTime.setEditable(true);
	}
	
	private void DisableGUI() {
		cboExperimenter.setEnabled(false);
		cboType.setEnabled(false);
		txtAge.setEditable(false);
  	txtComment.setEditable(false);
		txtDate.setEditable(false);
		txtTime.setEditable(false);
		cmdSetData.setEnabled(false);
		cmdDelete1.setEnabled(false);	
	}
  
  // Variables declaration - do not modify//GEN-BEGIN:variables
  private javax.swing.JComboBox cboExperimenter;
  private javax.swing.JComboBox cboSubject;
  private javax.swing.JComboBox cboType;
  private javax.swing.JButton cmdAdd;
  private javax.swing.JButton cmdCancel;
  private javax.swing.JButton cmdClose2;
  private javax.swing.JButton cmdDelete;
  private javax.swing.JButton cmdDelete1;
  private javax.swing.JButton cmdEditData;
  private javax.swing.JButton cmdOKClose;
  private javax.swing.JButton cmdSetData;
  private javax.swing.JPanel fraSessionInfo;
  private javax.swing.JLabel jLabel20;
  private javax.swing.JLabel jLabel21;
  private javax.swing.JScrollPane jScrollPane3;
  private javax.swing.JLabel lblAge;
  private javax.swing.JLabel lblDataFile;
  private javax.swing.JLabel lblDate;
  private javax.swing.JLabel lblExperimenter;
  private javax.swing.JLabel lblSubject;
  private javax.swing.JLabel lblTime;
  private javax.swing.JLabel lblType;
  private javax.swing.JList lstSessions1;
  private javax.swing.JTextField txtAge;
  private javax.swing.JTextArea txtComment;
  private javax.swing.JTextField txtDataFile;
  private javax.swing.JTextField txtDate;
  private javax.swing.JTextField txtTime;
  // End of variables declaration//GEN-END:variables
  
}