Newer
Older
marking / src / ui / SubmissionFrame.java
package ui;

import dao.ResultDAO;
import dao.ScheduleDAO;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;

/**
 *
 * @author mark
 */
public class SubmissionFrame extends javax.swing.JFrame {

	private final ScheduleDAO scheduleDAO = new ScheduleDAO();
	private Integer selectedRow = 0;

	/**
	 * Creates new form SubmissionDialog
	 */
	public SubmissionFrame() {
		initComponents();

		table.setModel(new ResultDAO().getSubmissions());

		this.setTitle(scheduleDAO.getAssessmentName() + " (" + scheduleDAO.getComplete() + "% marked)");
	}

	/**
	 * 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() {

      scrollPane = new javax.swing.JScrollPane();
      table = new javax.swing.JTable();
      btnMark = new javax.swing.JButton();
      btnQuit = new javax.swing.JButton();

      setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
      setPreferredSize(new java.awt.Dimension(300, 800));

      table.setModel(new javax.swing.table.DefaultTableModel(
         new Object [][] {
            {null, null},
            {null, null},
            {null, null},
            {null, null}
         },
         new String [] {
            "Submission", "Raw Mark"
         }
      ) {
         Class[] types = new Class [] {
            java.lang.String.class, java.lang.Double.class
         };
         boolean[] canEdit = new boolean [] {
            false, false
         };

         public Class getColumnClass(int columnIndex) {
            return types [columnIndex];
         }

         public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
         }
      });
      table.addMouseListener(new java.awt.event.MouseAdapter() {
         public void mouseClicked(java.awt.event.MouseEvent evt) {
            tableMouseClicked(evt);
         }
      });
      table.addKeyListener(new java.awt.event.KeyAdapter() {
         public void keyPressed(java.awt.event.KeyEvent evt) {
            tableKeyPressed(evt);
         }
      });
      scrollPane.setViewportView(table);

      btnMark.setText("Mark Selected Student");
      btnMark.addActionListener(new java.awt.event.ActionListener() {
         public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnMarkActionPerformed(evt);
         }
      });

      btnQuit.setText("Quit");
      btnQuit.addActionListener(new java.awt.event.ActionListener() {
         public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnQuitActionPerformed(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)
               .addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE)
               .addGroup(layout.createSequentialGroup()
                  .addComponent(btnQuit)
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                  .addComponent(btnMark, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
            .addContainerGap())
      );
      layout.setVerticalGroup(
         layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)
            .addGap(18, 18, 18)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
               .addComponent(btnMark)
               .addComponent(btnQuit))
            .addContainerGap())
      );

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

   private void btnQuitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnQuitActionPerformed
		System.exit(0);
   }//GEN-LAST:event_btnQuitActionPerformed

   private void btnMarkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMarkActionPerformed
		markSelected();
   }//GEN-LAST:event_btnMarkActionPerformed

   private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseClicked
		if (evt.getClickCount() >= 2) {
			markSelected();
		}
   }//GEN-LAST:event_tableMouseClicked

   private void tableKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tableKeyPressed
		if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
			evt.consume();
			markSelected();
		}
   }//GEN-LAST:event_tableKeyPressed

	private void markSelected() {

		// get selected ID from table
		selectedRow = table.getSelectedRow();
		String id = (String) table.getModel().getValueAt(selectedRow, 0);

		// copy selected ID to clipboard
		StringSelection stringSelection = new StringSelection(id);
		Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard();
		clpbrd.setContents(stringSelection, null);

		MarkingFrame frame = new MarkingFrame(this, scheduleDAO.getAssessmentName());

		// load data into frame
		ScheduleDAO dao = new ScheduleDAO();

		for (String cat : dao.getCategories()) {
			frame.addCategory(cat, dao.getCriteria(cat));
		}

		frame.load(id);
		frame.display();
	}

	public void refresh(String id) {
		// refresh table to display new mark
		table.setModel(new ResultDAO().getSubmissions());

		// update title to show latest completion %
		this.setTitle(scheduleDAO.getAssessmentName() + " (" + scheduleDAO.getComplete() + "% marked)");

		// reselect the most recently selected row
		table.setRowSelectionInterval(selectedRow, selectedRow);
	}

   // Variables declaration - do not modify//GEN-BEGIN:variables
   private javax.swing.JButton btnMark;
   private javax.swing.JButton btnQuit;
   private javax.swing.JScrollPane scrollPane;
   private javax.swing.JTable table;
   // End of variables declaration//GEN-END:variables
}