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

File: <base>/sourceCode/subjectData/MovieData.java (40,067 bytes)
/*
 * MovieData.java
 *
 * Created on April 1, 2002, 2:01 PM
 */

package subjectData;

/**
 *
 * @author  Joset A. Etzel
 */
import java.io.*; import java.util.*; import java.util.zip.*; import javax.swing.*; import java.sql.*;
import javax.swing.filechooser.*; import java.io.File; import java.awt.*; 
import java.awt.event.*; import subjectData.*;

public class MovieData extends javax.swing.JInternalFrame {
    static final int intBUFFER = 2048;  //constant used for zip file access
    Connection conData; Statement stmSQL;   //variables for sql database access
    /** Creates new form MovieData */
    public MovieData() {
        initComponents();
        //connect to the database
        try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (Exception e) {}
        try { conData = DriverManager.getConnection("jdbc:mysql://localhost/subjectData", "root", ""); }
        catch (java.sql.SQLException e) { e.printStackTrace(); }
        FillCombos();  //call sub 
    }

    private void FillCombos() {
        //fill cboSubject with the names from subject & cboMovie, cboCondition from comboBoxes
        String strNames = ""; String strTemp = "";
        
        cboSubject.removeAllItems(); cboMovie.removeAllItems(); cboCondition.removeAllItems();  //just in case
        
        try {  //get the subjects
            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");
            cboSubject.addItem("");  //on top
            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); }
        } catch(java.sql.SQLException e) { e.printStackTrace(); }    
       
        try {  //get the movies
            stmSQL = conData.createStatement();
            ResultSet rssSubjects = stmSQL.executeQuery("SELECT boxChoice FROM comboBoxes WHERE boxID = 'Movies' ORDER BY boxChoice"); 
            cboMovie.addItem("");  //on top
            while(rssSubjects.next()) { cboMovie.addItem(rssSubjects.getString("boxChoice")); }
        } catch(java.sql.SQLException e) { e.printStackTrace(); }    

        try {  //get the conditions
            stmSQL = conData.createStatement();
            ResultSet rssSubjects = stmSQL.executeQuery("SELECT boxChoice FROM comboBoxes WHERE boxID = 'Condition' ORDER BY boxChoice");  
            cboCondition.addItem("");  //on top
            while(rssSubjects.next()) { cboCondition.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;

    cmdOK = new javax.swing.JButton();
    cmdCancel = new javax.swing.JButton();
    lblAdded = new javax.swing.JLabel();
    cmdAddNew = new javax.swing.JButton();
    lblSubject = new javax.swing.JLabel();
    cboSubject = new javax.swing.JComboBox();
    lblSession = new javax.swing.JLabel();
    cboSession = new javax.swing.JComboBox();
    jSeparator1 = new javax.swing.JSeparator();
    cmdDelete = new javax.swing.JButton();
    jSeparator2 = new javax.swing.JSeparator();
    jScrollPane1 = new javax.swing.JScrollPane();
    lstSessions = new javax.swing.JList();
    pnlMovie = new javax.swing.JPanel();
    lblDot = new javax.swing.JLabel();
    cboMinute = new javax.swing.JComboBox();
    cboMinute.addItem("00"); cboMinute.addItem("05");
    for (int intC = 10; intC < 65; intC = intC + 5) {
      cboMinute.addItem("" + intC); }
    txtComment = new javax.swing.JTextArea();
    cboCondition = new javax.swing.JComboBox();
    lblMovie = new javax.swing.JLabel();
    cboHour = new javax.swing.JComboBox();
    for (int intC = 0; intC < 10; intC++) {
      cboHour.addItem("0" + intC); }
    for (int intC = 10; intC < 25; intC++) {
      cboHour.addItem("" + intC); }
    lblTime = new javax.swing.JLabel();
    cboMovie = new javax.swing.JComboBox();
    cmdSetFile = new javax.swing.JButton();
    txtSetFile = new javax.swing.JTextField();
    lblComment = new javax.swing.JLabel();
    lblCondition = new javax.swing.JLabel();
    lblSetFile = new javax.swing.JLabel();

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

    setMaximizable(true);
    setTitle("Data for a Movie Viewing");
    setIconifiable(true);
    setResizable(true);
    setPreferredSize(new java.awt.Dimension(800, 445));
    cmdOK.setText("OK");
    cmdOK.setEnabled(false);
    cmdOK.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdOKActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 4;
    gridBagConstraints.gridy = 7;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    getContentPane().add(cmdOK, gridBagConstraints);

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

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

    lblAdded.setText("data added for this session:");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.ipady = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(15, 0, 5, 0);
    getContentPane().add(lblAdded, gridBagConstraints);

    cmdAddNew.setMnemonic('\u0001');
    cmdAddNew.setText("Add or Edit this Session's Data");
    cmdAddNew.setEnabled(false);
    cmdAddNew.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdAddNewActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 3;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(5, 2, 0, 0);
    getContentPane().add(cmdAddNew, gridBagConstraints);

    lblSubject.setText("select subject:");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.ipadx = 2;
    getContentPane().add(lblSubject, gridBagConstraints);

    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.ipadx = 2;
    gridBagConstraints.ipady = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    getContentPane().add(cboSubject, gridBagConstraints);

    lblSession.setText("select session:  ");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 2);
    getContentPane().add(lblSession, gridBagConstraints);

    cboSession.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cboSessionActionPerformed(evt);
      }
    });
    cboSession.addItemListener(new java.awt.event.ItemListener() {
      public void itemStateChanged(java.awt.event.ItemEvent evt) {
        cboSessionItemStateChanged(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 3;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    getContentPane().add(cboSession, gridBagConstraints);

    jSeparator1.setPreferredSize(new java.awt.Dimension(400, 4));
    jSeparator1.setMinimumSize(new java.awt.Dimension(400, 4));
    jSeparator1.setAlignmentY(1.0F);
    jSeparator1.setMaximumSize(new java.awt.Dimension(400, 4));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 4;
    gridBagConstraints.gridwidth = 4;
    gridBagConstraints.insets = new java.awt.Insets(4, 0, 4, 0);
    getContentPane().add(jSeparator1, gridBagConstraints);

    cmdDelete.setText("Delete This Session's Data");
    cmdDelete.setEnabled(false);
    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.gridwidth = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(5, 2, 5, 0);
    getContentPane().add(cmdDelete, gridBagConstraints);

    jSeparator2.setPreferredSize(new java.awt.Dimension(400, 4));
    jSeparator2.setMinimumSize(new java.awt.Dimension(400, 4));
    jSeparator2.setAlignmentY(1.0F);
    jSeparator2.setMaximumSize(new java.awt.Dimension(400, 4));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 6;
    gridBagConstraints.gridwidth = 4;
    gridBagConstraints.insets = new java.awt.Insets(4, 0, 4, 0);
    getContentPane().add(jSeparator2, gridBagConstraints);

    jScrollPane1.setPreferredSize(new java.awt.Dimension(250, 100));
    jScrollPane1.setMinimumSize(new java.awt.Dimension(250, 100));
    lstSessions.setBorder(new javax.swing.border.EtchedBorder());
    lstSessions.setModel(new javax.swing.AbstractListModel() {
      String[] strings = { "select a session" };
      public int getSize() { return strings.length; }
      public Object getElementAt(int i) { return strings[i]; }
    });
    lstSessions.setPreferredSize(new java.awt.Dimension(90, 20));
    lstSessions.setMaximumSize(new java.awt.Dimension(250, 100));
    lstSessions.setVisibleRowCount(5);
    lstSessions.setEnabled(false);
    lstSessions.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(java.awt.event.MouseEvent evt) {
        lstSessionsMouseClicked(evt);
      }
    });

    jScrollPane1.setViewportView(lstSessions);

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

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

    pnlMovie.setBorder(new javax.swing.border.TitledBorder("movieData"));
    pnlMovie.setMinimumSize(new java.awt.Dimension(626, 193));
    pnlMovie.setVisible(false);
    lblDot.setText(":");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 4;
    gridBagConstraints.gridy = 0;
    pnlMovie.add(lblDot, gridBagConstraints);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 5;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(2, 1, 0, 0);
    pnlMovie.add(cboMinute, gridBagConstraints);

    txtComment.setPreferredSize(new java.awt.Dimension(350, 100));
    txtComment.setDoubleBuffered(true);
    txtComment.setMinimumSize(new java.awt.Dimension(350, 100));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.gridwidth = 5;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(2, 1, 2, 0);
    pnlMovie.add(txtComment, gridBagConstraints);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(2, 0, 2, 0);
    pnlMovie.add(cboCondition, gridBagConstraints);

    lblMovie.setText("Movie:  ");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 2);
    pnlMovie.add(lblMovie, gridBagConstraints);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 3;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 1);
    pnlMovie.add(cboHour, gridBagConstraints);

    lblTime.setText("Start Time:  ");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 3);
    pnlMovie.add(lblTime, gridBagConstraints);

    cboMovie.setFont(new java.awt.Font("Dialog", 0, 12));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(2, 0, 2, 0);
    pnlMovie.add(cboMovie, gridBagConstraints);

    cmdSetFile.setText("Set Data File");
    cmdSetFile.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        cmdSetFileActionPerformed(evt);
      }
    });

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 3;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.gridwidth = 3;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
    gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 0);
    pnlMovie.add(cmdSetFile, gridBagConstraints);

    txtSetFile.setPreferredSize(new java.awt.Dimension(250, 21));
    txtSetFile.setMinimumSize(new java.awt.Dimension(250, 21));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 1;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.gridwidth = 2;
    pnlMovie.add(txtSetFile, gridBagConstraints);

    lblComment.setText("Comment:  ");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 2);
    pnlMovie.add(lblComment, gridBagConstraints);

    lblCondition.setText("Condition:  ");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 1;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 2);
    pnlMovie.add(lblCondition, gridBagConstraints);

    lblSetFile.setText("Text Data File:  ");
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 3;
    gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
    gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 2);
    pnlMovie.add(lblSetFile, gridBagConstraints);

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

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

   private void cboSessionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cboSessionActionPerformed
   }//GEN-LAST:event_cboSessionActionPerformed

    private void cmdESetPathActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdESetPathActionPerformed

    }//GEN-LAST:event_cmdESetPathActionPerformed

    private void lstSessionsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lstSessionsMouseClicked
        cmdDelete.setEnabled(true);
    }//GEN-LAST:event_lstSessionsMouseClicked

    private void cmdCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdCancelActionPerformed
        // try to close the frame
        try {  this.setClosed(true); }
        catch(java.beans.PropertyVetoException e) { e.printStackTrace(); }
    }//GEN-LAST:event_cmdCancelActionPerformed

    private void cmdDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdDeleteActionPerformed
        //call appropriate delete sub depending on what type of data to delete
        String strTemp = ""; String strType = "";
        
        strTemp = (String)cboSession.getSelectedItem();  //determine type of session
        if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the session.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
        strType = strTemp.substring((strTemp.indexOf("(") + 1), strTemp.indexOf(")"));  //parse out the expType
        
        if (strType.equals("Movie Viewing") == true) { DeleteMovieData(); }  //call sub to delete a movieData session
    }
    
    private void DeleteMovieData() {
        //delete the movie highlighted in lstSessions; called by cmdDeleteActionPerformed
        int intAnswer = 0; String strTemp = ""; String strSubID = ""; String strSesID = ""; 
        String strTime = ""; boolean bolMade = true; String strSQL = ""; String strPath = "";
        
        strTemp = (String)cboSession.getSelectedItem();
        if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the session.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
        strSesID = strTemp.substring(0, strTemp.indexOf(":"));  //parse out the subID
        
        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(":"));  //parse out the subID

        strTemp = (String)lstSessions.getSelectedValue(); //get the item that's highlighted
        if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the movie session to delete.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
        strTime = strTemp.substring((strTemp.indexOf(", ") + 2));  //parse out the timeStarted

        //ask the user if they are sure they want to delete the movie
        intAnswer = JOptionPane.showConfirmDialog(null, "The movie session " + strTemp + " will be permanently deleted from the database, including the data file. \n  Are you sure you want to delete this?", "File Delete Confirm", JOptionPane.YES_NO_OPTION); 
        if (intAnswer == JOptionPane.NO_OPTION) { return; } 
        
        try {   //get the dataFile out of the database
            strSQL = "SELECT dataFile FROM movieData WHERE subID = \"" + strSubID + "\" AND sessionID = \"" + strSesID + "\" AND timeStarted = \"" + strTime + "\"";
            stmSQL = conData.createStatement();
            ResultSet rssSubjects = stmSQL.executeQuery(strSQL);
            rssSubjects.next();
            strPath = rssSubjects.getString("dataFile");
        } catch(java.sql.SQLException e) { e.printStackTrace(); }
        
        File fileZipPath = new File(strPath);
        if (fileZipPath.exists() == true) {   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 {  //delete the existing record from the movieData table
            stmSQL = conData.createStatement();  //stmSQL & conData are global
            stmSQL.executeUpdate("DELETE FROM movieData WHERE subID = \"" + strSubID + "\" AND sessionID = \"" + strSesID + "\" AND timeStarted = \"" + strTime + "\"");          
        } catch(java.sql.SQLException e) { e.printStackTrace();  JOptionPane.showMessageDialog(null, "There has been an error deleting the database entry.", "Database Deletion Error", JOptionPane.ERROR_MESSAGE); return; }
        UpdateListBox();  //call sub to fill up the list of movies for the current subject and session 
        ResetMovieDataScreen();
    }//GEN-LAST:event_cmdDeleteActionPerformed

    private void cboSessionItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboSessionItemStateChanged
       //call sub to fill up the list of movies for the current subject and session
        if ((String)cboSession.getSelectedItem() != "") {  //only want to do this if clicked, not if loading
        if (evt.getStateChange() == ItemEvent.SELECTED) { lstSessions.setEnabled(true);
            UpdateListBox();  //call sub to fill up the list of movies for the current subject and session
        }}  //end the ifs
    }//GEN-LAST:event_cboSessionItemStateChanged

    private void UpdateListBox () {
        //show the movies entered in the list box for the current subject and session
        String strSQL = ""; String strTemp = ""; String strID = ""; String strTime = ""; String strType = "";
        String strMovie = ""; String strList[]; int intSize = 0;

        strTemp = (String)cboSession.getSelectedItem();  //determine type & sessionID of session
        if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the session.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
        strType = strTemp.substring((strTemp.indexOf("(") + 1), strTemp.indexOf(")"));  //parse out the expType
        strID = strTemp.substring(0, strTemp.indexOf(":"));  //parse out the sessionID

        if (strType.equals("Movie Viewing") == true) {    //show the movieData sessions
            strSQL = "SELECT timeStarted, whichMovie FROM movieData WHERE sessionID = \"" + strID + "\" ORDER BY timeStarted";
            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
                    strTime = rssSubjects.getString("timeStarted"); strMovie = rssSubjects.getString("whichMovie");
                    strList[intSize] = strMovie + ", " + strTime;  //store the movie
                    intSize = intSize + 1;  }  //update count for next time
                lstSessions.setListData(strList);  //put data in strList into lstSessions so visible
            } catch(java.sql.SQLException e) { e.printStackTrace(); } 
        }  
        else if (strType.equals("Erica Sound Clips") == true)  {  //show the ericaData sessions
            strSQL = "SELECT timeStarted FROM ericaData WHERE sessionID = \"" + strID + "\" ORDER BY timeStarted";
            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
                    strTime = rssSubjects.getString("timeStarted"); 
                    strList[intSize] = strTime;  //store the clip in strList
                    intSize = intSize + 1;  }  //update count for next time
                lstSessions.setListData(strList);  //put data in strList into lstSessions so visible
            } catch(java.sql.SQLException e) { e.printStackTrace(); }     
        }
    }
    
    private void cboSubjectItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboSubjectItemStateChanged
     //after the subject's name was selected, show the session numbers in the session combo box
        String strSQL = ""; String strDate = ""; String strSubID = ""; String strTemp = ""; int intID = 0;
        
        if ((String)cboSubject.getSelectedItem() != "") {  //only want to do this if clicked, not if loading
        if (evt.getStateChange() == ItemEvent.SELECTED) {
        cboSession.removeAllItems(); cboSession.addItem("");  //blank on top; don't want duplicates  
        
        strTemp = (String)cboSubject.getSelectedItem(); //parse out subID
        strSubID = strTemp.substring(0, strTemp.indexOf(":")); 

        try {  //get the sessions for this subject from the database
            strSQL = "SELECT sessionID, expDate, expType FROM session WHERE subID = \"" + strSubID + "\" ORDER BY expDate";  //sql statement to execute
            stmSQL = conData.createStatement();  //stmSQL is global - have to get it ready
            ResultSet rssSubjects = stmSQL.executeQuery(strSQL);  //make the resultset on the sql statement

            while(rssSubjects.next()) {  //fill up cboSession
                intID = rssSubjects.getInt("sessionID"); strDate = rssSubjects.getString("expDate");
                cboSession.addItem("" + intID + ": " + strDate + " (" + rssSubjects.getString("expType") + ")"); } 
        } catch(java.sql.SQLException e) { e.printStackTrace(); }
        cmdAddNew.setEnabled(true); 
        }}
    }//GEN-LAST:event_cboSubjectItemStateChanged

    private void cmdAddNewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdAddNewActionPerformed
        //enable the controls needed to enter a new movie if subject and session selected
        String strTemp = ""; String strType = ""; String strTempName = ""; String strTempID = ""; String strSesID = "";
        
        strTemp = (String)cboSubject.getSelectedItem();
        if (strTemp.length() < 1) { JOptionPane.showMessageDialog(null, "Please select the subject.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }
        strTemp = (String)cboSession.getSelectedItem();
        if (strTemp.length() < 1) { JOptionPane.showMessageDialog(null, "Please select the session.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }
        
        strType = strTemp.substring((strTemp.indexOf("(") + 1), strTemp.indexOf(")"));  //parse out the expType
        if (strType.equals("Movie Viewing") == true) { pnlMovie.setVisible(true);  }  //a movieData session
        else if (strType.equals("Erica Sound Clips") == true) { 
          //display EricaData; have to pass it the subjectID & sessionID from cboSubject
          strTemp = (String)cboSubject.getSelectedItem();
          strTempID = strTemp.substring(0, strTemp.indexOf(":"));
          strTempName = strTemp.substring(strTemp.indexOf(":") + 2);
          if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the subject from the box.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }
          strTemp = (String)cboSession.getSelectedItem();
          strSesID = strTemp.substring(0, strTemp.indexOf(":"));
          EricaData frmErica = new EricaData(strTempID, strTempName, strSesID);

          JDesktopPane contentPane = this.getDesktopPane();  //get desktop pane that this internal frame is in
          contentPane.add(frmErica, javax.swing.JLayeredPane.DEFAULT_LAYER); //add new frame to desktop frame
          frmErica.setBounds(20, 20, 700, 580);
          frmErica.show();    
        }
        cmdOK.setEnabled(true); 
    }//GEN-LAST:event_cmdAddNewActionPerformed

    private void cmdOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdOKActionPerformed
        //call appropriate sub to enter data from whatever panel is visible (depends on session type)
        String strTemp = ""; String strType = "";
        
        strTemp = (String)cboSession.getSelectedItem();  //determine type of session
        if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the session.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
        strType = strTemp.substring((strTemp.indexOf("(") + 1), strTemp.indexOf(")"));  //parse out the expType
        
        if (strType.equals("Movie Viewing") == true) { EnterMovieData(); }  //call sub to enter a movieData session
    }//GEN-LAST:event_cmdOKActionPerformed

    private void EnterMovieData() {
        //put the movie into movieData for this session and zip the data file.  called by cmdOKActionPerformed
        String strMovie = ""; String strCondition = ""; String strHour = ""; String strMinute = ""; 
        String strComment = ""; String strPath = ""; String strSubID = ""; String strSesID = "";
        String strTime = ""; String strZipPath = ""; String strTemp = ""; boolean bolMade = false;
        int intAnswer = 0; 

        strTemp = (String)cboSession.getSelectedItem();
        if (strTemp.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the session.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
        strSesID = strTemp.substring(0, strTemp.indexOf(":"));  //parse out the sessionID

        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(":"));  //parse out the subID

        strMovie = (String)cboMovie.getSelectedItem(); strCondition = (String)cboCondition.getSelectedItem();
        strMinute = (String)cboMinute.getSelectedItem(); strHour = (String)cboHour.getSelectedItem();
        strComment = txtComment.getText(); strPath = txtSetFile.getText();
        strTime = strHour + ":" + strMinute + ":00";  //put together the time string in the correct format
        strZipPath = "c:\\subjectData\\subject_" + strSubID + "\\session_" + strSesID + "\\" + strMovie + "_" + strHour + "_" + strMinute + ".zip";
                
        //check that the user input was ok
        if (strMovie.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the movie.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
        if (strCondition.equals("") == true) { JOptionPane.showMessageDialog(null, "Please select the condition.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }        
        if (strComment.equals("") == true) { JOptionPane.showMessageDialog(null, "Please enter a comment.  If the movie was viewed without incident, please type OK in the comment box.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }
        if (strPath.equals("") == true) { JOptionPane.showMessageDialog(null, "Please indicate the path to the text data file by clicking the Set Data File button.", "Missing Data Error", JOptionPane.ERROR_MESSAGE); return; }
        
        //check if the directory exists, and make it if not
        File fileZipPath = new File("c:\\subjectData\\subject_" + strSubID + "\\session_" + strSesID + "\\");
        if (fileZipPath.exists() == false) {  //look to see if session's directory already exists
            bolMade = fileZipPath.mkdirs();   //if not, make it. check if error and exit if there was
            if (bolMade == false) { JOptionPane.showMessageDialog(null, "There has been an error making the directory needed to store this subject's data.  The data was not stored.", "Directory Creation Error", JOptionPane.ERROR_MESSAGE); return; } }
        fileZipPath = new File("c:\\subjectData\\subject_" + strSubID + "\\session_" + strSesID + "\\" + strMovie + "_" + strHour + "_" + strMinute + ".zip");        
        if (fileZipPath.exists() == true) {  //file already exists
            intAnswer = JOptionPane.showConfirmDialog(null, "A file with for this subject, this session, and this movie, at this time already exists.  If you are replacing the existing file click yes, otherwise click no and correct the subject, session, time, or movie.", "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.", "File Deletion Error", JOptionPane.ERROR_MESSAGE); return; }
                try {  //delete the existing record from the movieData table
                    stmSQL = conData.createStatement();  //stmSQL & conData are global
                    stmSQL.executeUpdate("DELETE FROM movieData WHERE subID = \"" + strSubID + "\" AND sessionID = \"" + strSesID + "\" AND timeStarted = \"" + strTime + "\" AND whichMovie = \"" + strMovie + "\"");          
                } catch(java.sql.SQLException e) { e.printStackTrace();  JOptionPane.showMessageDialog(null, "There has been an error deleting the previous database entry.", "Database Deletion Error", JOptionPane.ERROR_MESSAGE); return; }
        }}
        
        try {  //put the new movie into the movieData table
            stmSQL = conData.createStatement();  //stmSQL & conData are global
            strZipPath = SubjectData.AddEscapeChars(strZipPath);
            strComment = SubjectData.AddEscapeChars(strComment);
            stmSQL.executeUpdate("INSERT INTO movieData VALUES ('" + strSubID + "', '" + strSesID + "', '" + strTime + "', '" + strMovie + "', '" + strCondition + "', '" + strZipPath + "', '" +  strComment + "')");          
        } catch(java.sql.SQLException e) { e.printStackTrace();  }
        
        try {  //compress the file and resave it to strZipPath
            BufferedInputStream origin = null;
        
            FileOutputStream dest = new FileOutputStream(strZipPath);
            //FileOutputStream dest = new FileOutputStream(txttxtSetFile.getText());
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
            byte data[] = new byte[intBUFFER];
        
            FileInputStream fi = new FileInputStream(txtSetFile.getText());
            origin = new BufferedInputStream(fi, intBUFFER);
            ZipEntry entry = new ZipEntry(txtSetFile.getText());
            out.putNextEntry(entry);
            int count;
            while((count = origin.read(data, 0, intBUFFER)) != -1) { out.write(data, 0, count); }
            origin.close();
            out.close();
        } catch(Exception e) { e.printStackTrace(); }
        
        pnlMovie.setVisible(false); 
        ResetMovieDataScreen();  //call sub to blank out the boxes & disable everything again
        UpdateListBox();  //call sub to fill up the list of movies for the current subject and session
    }
    
    private void ResetMovieDataScreen() {
        //blanks the controls on pnlMovie
        cboMovie.setSelectedIndex(0); cboHour.setSelectedIndex(0); cboMinute.setSelectedIndex(0); 
        cboCondition.setSelectedIndex(0); txtComment.setText(""); txtSetFile.setText("");      
    }
    
 
    
    private void cmdSetFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdSetFileActionPerformed
        //show a file chooser to let user pick a text file for compression.
        //JFileChooser comes with the ability to move around the directory structure
        
        JFileChooser frmFileOpen = new JFileChooser();  //declare a JFileChooser - the select file box
        frmFileOpen.setApproveButtonText("Select Text File");  //have button say Select instead of Open
        int intResult = frmFileOpen.showOpenDialog(null);  //this returns if select or cancel was clicked
        File fileChosen = frmFileOpen.getSelectedFile();  //the file picked, if any
        if (intResult == JFileChooser.APPROVE_OPTION) { txtSetFile.setText(fileChosen.getPath()); }
        else if (intResult == JFileChooser.CANCEL_OPTION) { txtSetFile.setText(""); }

    }//GEN-LAST:event_cmdSetFileActionPerformed


  // Variables declaration - do not modify//GEN-BEGIN:variables
  private javax.swing.JComboBox cboCondition;
  private javax.swing.JComboBox cboHour;
  private javax.swing.JComboBox cboMinute;
  private javax.swing.JComboBox cboMovie;
  private javax.swing.JComboBox cboSession;
  private javax.swing.JComboBox cboSubject;
  private javax.swing.JButton cmdAddNew;
  private javax.swing.JButton cmdCancel;
  private javax.swing.JButton cmdDelete;
  private javax.swing.JButton cmdOK;
  private javax.swing.JButton cmdSetFile;
  private javax.swing.JScrollPane jScrollPane1;
  private javax.swing.JSeparator jSeparator1;
  private javax.swing.JSeparator jSeparator2;
  private javax.swing.JLabel lblAdded;
  private javax.swing.JLabel lblComment;
  private javax.swing.JLabel lblCondition;
  private javax.swing.JLabel lblDot;
  private javax.swing.JLabel lblMovie;
  private javax.swing.JLabel lblSession;
  private javax.swing.JLabel lblSetFile;
  private javax.swing.JLabel lblSubject;
  private javax.swing.JLabel lblTime;
  private javax.swing.JList lstSessions;
  private javax.swing.JPanel pnlMovie;
  private javax.swing.JTextArea txtComment;
  private javax.swing.JTextField txtSetFile;
  // End of variables declaration//GEN-END:variables

}