view.ReviewInfoGUI.java Source code

Java tutorial

Introduction

Here is the source code for view.ReviewInfoGUI.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package view;

import DataModel.*;
import java.awt.event.WindowEvent;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

/**
 *
 * @author Steven
 */
public class ReviewInfoGUI extends javax.swing.JFrame {

    private static RARDocument doc;
    private ArrayList<Event> events;
    Event eventToReview;

    /**
     * Creates new form ReviewInfoGUI
     */
    public ReviewInfoGUI(RARDocument doc_) {
        this.doc = doc_;
        events = doc.getCompletedEvents();
        initComponents();
        initEventTable();
        this.deleteEventButton.setEnabled(false);
        this.exportButton.setEnabled(false);
        this.reviewButton.setEnabled(false);
        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
    }

    private void initEventTable() {
        String[][] tableBuilder = new String[events.size()][1];

        for (int i = 0; i < events.size(); i++) {
            tableBuilder[i][0] = events.get(i).getDescription();
        }

        this.completedEventsTable.setModel(new javax.swing.table.DefaultTableModel(tableBuilder,
                new String[] { "Name/Description of Event" }));
    }

    /**
     * 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.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        reviewButton = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        completedEventsTable = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        closeButton = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JSeparator();
        jScrollPane2 = new javax.swing.JScrollPane();
        attendedTable = new javax.swing.JTable();
        jScrollPane3 = new javax.swing.JScrollPane();
        didNotAttendTable = new javax.swing.JTable();
        deleteEventButton = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        exportButton = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        reviewButton.setText("Review this Event");
        reviewButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                reviewButtonActionPerformed(evt);
            }
        });

        completedEventsTable.setModel(new javax.swing.table.DefaultTableModel(new Object[][] {

        }, new String[] { "Completed Events" }));
        completedEventsTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                completedEventsTableMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(completedEventsTable);

        jLabel1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jLabel1.setText("Please select an event to review:");

        closeButton.setText("Close");
        closeButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                closeButtonMouseClicked(evt);
            }
        });

        attendedTable.setModel(new javax.swing.table.DefaultTableModel(new Object[][] {

        }, new String[] { "First", "Last" }) {
            Class[] types = new Class[] { java.lang.String.class, java.lang.String.class };

            public Class getColumnClass(int columnIndex) {
                return types[columnIndex];
            }
        });
        jScrollPane2.setViewportView(attendedTable);

        didNotAttendTable.setModel(new javax.swing.table.DefaultTableModel(new Object[][] {

        }, new String[] { "First", "Last" }) {
            Class[] types = new Class[] { java.lang.String.class, java.lang.Object.class };

            public Class getColumnClass(int columnIndex) {
                return types[columnIndex];
            }
        });
        jScrollPane3.setViewportView(didNotAttendTable);

        deleteEventButton.setText("Delete Event");
        deleteEventButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deleteEventButtonActionPerformed(evt);
            }
        });

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jLabel2.setText("Members who attended this event");

        jLabel3.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jLabel3.setText("Members who did not attend this event");

        exportButton.setText("Export to Excel");
        exportButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                exportButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup().addContainerGap().addGroup(layout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup().addComponent(jLabel1)
                                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addGroup(layout.createSequentialGroup()
                                                .addComponent(exportButton, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        120, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
                                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                .addComponent(closeButton, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        100, javax.swing.GroupLayout.PREFERRED_SIZE))
                                        .addGroup(layout.createSequentialGroup()
                                                .addComponent(reviewButton, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        148, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addGap(311, 311, 311)
                                                .addComponent(deleteEventButton,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 138,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addGap(0, 0, Short.MAX_VALUE)))
                                .addContainerGap())
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
                                layout.createSequentialGroup().addComponent(jScrollPane1).addGap(10, 10, 10))
                        .addGroup(layout.createSequentialGroup().addGroup(layout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jSeparator1).addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
                                        layout.createSequentialGroup().addGroup(layout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addGroup(
                                                        layout.createSequentialGroup().addGap(0, 0, Short.MAX_VALUE)
                                                                .addComponent(jScrollPane2,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 285,
                                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                .addGap(27, 27, 27))
                                                .addGroup(layout.createSequentialGroup().addComponent(jLabel2)
                                                        .addPreferredGap(
                                                                javax.swing.LayoutStyle.ComponentPlacement.RELATED,
                                                                javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                Short.MAX_VALUE)))
                                                .addGroup(layout
                                                        .createParallelGroup(
                                                                javax.swing.GroupLayout.Alignment.LEADING)
                                                        .addComponent(jLabel3).addComponent(jScrollPane3,
                                                                javax.swing.GroupLayout.PREFERRED_SIZE, 285,
                                                                javax.swing.GroupLayout.PREFERRED_SIZE))))
                                .addContainerGap()))));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 137, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(deleteEventButton, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(reviewButton, javax.swing.GroupLayout.PREFERRED_SIZE, 43,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(25, 25, 25)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel2).addComponent(jLabel3))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 300,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 300,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(closeButton, javax.swing.GroupLayout.PREFERRED_SIZE, 47,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(exportButton, javax.swing.GroupLayout.PREFERRED_SIZE, 47,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addContainerGap()));

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void closeButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_closeButtonMouseClicked
        this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
    }//GEN-LAST:event_closeButtonMouseClicked

    private void completedEventsTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_completedEventsTableMouseClicked
        this.deleteEventButton.setEnabled(true);
        this.reviewButton.setEnabled(true);
    }//GEN-LAST:event_completedEventsTableMouseClicked

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

        if (this.completedEventsTable.getSelectedRow() >= 0) {
            Event eventToDelete = events.get(this.completedEventsTable.getSelectedRow());
            this.eventToReview = null;
            int dialogButton = JOptionPane.YES_NO_OPTION;
            int dialogResult = JOptionPane.showConfirmDialog(null,
                    "Do you really want to remove this event?" + "\nName: " + eventToDelete.getDescription(),
                    "Warning", dialogButton);
            if (dialogResult == JOptionPane.YES_OPTION) {
                doc.getCompletedEvents().remove(eventToDelete);
                this.deleteEventButton.setEnabled(false);
                this.reviewButton.setEnabled(false);
                this.exportButton.setEnabled(false);
                this.initEventTable();

                //these setModel calls just clear the tables if they happen to have something in them already

                this.attendedTable.setModel(new javax.swing.table.DefaultTableModel(new String[0][0],
                        new String[] { "First", "Last" }));

                this.didNotAttendTable.setModel(new javax.swing.table.DefaultTableModel(new String[0][0],
                        new String[] { "First", "Last" }));

            }

        }
    }//GEN-LAST:event_deleteEventButtonActionPerformed

    private void reviewButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_reviewButtonActionPerformed
        if (this.completedEventsTable.getSelectedRow() >= 0) {
            eventToReview = events.get(this.completedEventsTable.getSelectedRow());

            ArrayList<Member> attendees = eventToReview.getAttendees().getRosterSet();
            ArrayList<Member> noShows = eventToReview.getInvites().getRosterSet();

            String t1[][] = new String[attendees.size()][2];
            String t2[][] = new String[noShows.size()][2];

            for (int i = 0; i < attendees.size(); i++) {
                t1[i][0] = attendees.get(i).getfName();
                t1[i][1] = attendees.get(i).getlName();
            }

            for (int i = 0; i < noShows.size(); i++) {
                t2[i][0] = noShows.get(i).getfName();
                t2[i][1] = noShows.get(i).getlName();
            }

            this.attendedTable
                    .setModel(new javax.swing.table.DefaultTableModel(t1, new String[] { "First", "Last" }));

            this.didNotAttendTable
                    .setModel(new javax.swing.table.DefaultTableModel(t2, new String[] { "First", "Last" }));

            this.exportButton.setEnabled(true);

        }
    }//GEN-LAST:event_reviewButtonActionPerformed

    private void exportButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportButtonActionPerformed
        if (this.eventToReview != null) {
            try {
                DefaultTableModel dtm = new DefaultTableModel();
                Vector<String> cols = new Vector<String>();
                dtm.addColumn("First");
                dtm.addColumn("Last");
                dtm.addColumn("Email");
                dtm.addColumn("Attended");

                Vector<String> dtmrow = null;
                dtmrow = new Vector<>();
                dtmrow.add("First");
                dtmrow.add("Last");
                dtmrow.add("Email");
                dtmrow.add("Attended (Yes or No)");

                dtm.addRow(dtmrow);

                dtmrow = null;

                for (int i = 0; i < this.eventToReview.getAttendees().getRosterSet().size(); i++) {
                    dtmrow = new Vector<>();

                    Member localM = this.eventToReview.getAttendees().getRosterSet().get(i);

                    dtmrow.add(localM.getfName());
                    dtmrow.add(localM.getlName());
                    dtmrow.add(localM.getEmail());
                    dtmrow.add("Yes");

                    dtm.addRow(dtmrow);
                }

                for (int i = 0; i < this.eventToReview.getInvites().getRosterSet().size(); i++) {
                    dtmrow = new Vector<>();

                    Member localM = this.eventToReview.getInvites().getRosterSet().get(i);

                    dtmrow.add(localM.getfName());
                    dtmrow.add(localM.getlName());
                    dtmrow.add(localM.getEmail());
                    dtmrow.add("No");

                    dtm.addRow(dtmrow);
                }

                ////////////////////////
                Workbook wb = new HSSFWorkbook();
                CreationHelper createhelper = wb.getCreationHelper();
                Sheet sheet = wb.createSheet("Attendence Data for " + this.eventToReview.getDescription());
                Row row = null;
                Cell cell = null;
                for (int i = 0; i < dtm.getRowCount(); i++) {
                    row = sheet.createRow(i);
                    for (int j = 0; j < dtm.getColumnCount(); j++) {

                        cell = row.createCell(j);
                        cell.setCellValue((String) dtm.getValueAt(i, j));
                    }
                }

                try (FileOutputStream out = new FileOutputStream(
                        ".\\" + this.eventToReview.getDescription().replaceAll(" ", "") + ".xls")) {
                    wb.write(out);
                    System.out.println("Here!");
                }
            } catch (Exception e) {
            }
        }

    }//GEN-LAST:event_exportButtonActionPerformed

    void initializeEventsTable() {
        ArrayList<ArrayList<String>> compEvents = new ArrayList<>();

        ArrayList<Event> completedEventsList = doc.getCompletedEvents();

    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(ReviewInfoGUI.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(ReviewInfoGUI.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(ReviewInfoGUI.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ReviewInfoGUI.class.getName()).log(java.util.logging.Level.SEVERE,
                    null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ReviewInfoGUI(new RARDocument()).setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTable attendedTable;
    private javax.swing.JButton closeButton;
    private javax.swing.JTable completedEventsTable;
    private javax.swing.JButton deleteEventButton;
    private javax.swing.JTable didNotAttendTable;
    private javax.swing.JButton exportButton;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JButton reviewButton;
    // End of variables declaration//GEN-END:variables
}