package edu.harvard.econcs.turkserver.server.gui; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JLabel; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.SwingWorker; import edu.harvard.econcs.turkserver.mturk.RequesterServiceExt; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.util.Arrays; import javax.swing.JTextField; public class WorkerPanel extends JPanel { private static final long serialVersionUID = 1L; RequesterServiceExt req; private JTextArea txaWorkerIds; private JLabel lblCommaseparatedWorkerIds; private JLabel lblMessage; private JTextArea txaMessage; private JButton btnSendMessage; private JLabel lblSubject; private JTextField txtSubject; /** * Create the panel. */ public WorkerPanel(RequesterServiceExt req) { this.req = req; initGUI(); } private void initGUI() { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); lblCommaseparatedWorkerIds = new JLabel("Comma-separated Worker IDs:"); add(lblCommaseparatedWorkerIds); txaWorkerIds = new JTextArea(); txaWorkerIds.setWrapStyleWord(true); txaWorkerIds.setLineWrap(true); txaWorkerIds.setRows(10); add(txaWorkerIds); lblSubject = new JLabel("Subject:"); add(lblSubject); txtSubject = new JTextField(); add(txtSubject); txtSubject.setColumns(10); lblMessage = new JLabel("Message:"); add(lblMessage); txaMessage = new JTextArea(); txaMessage.setWrapStyleWord(true); txaMessage.setRows(10); txaMessage.setLineWrap(true); add(txaMessage); btnSendMessage = new JButton("Send Message"); btnSendMessage.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new SendMessageWorker(txaWorkerIds.getText(), txtSubject.getText(), txaMessage.getText()).execute(); } }); add(btnSendMessage); } public class SendMessageWorker extends SwingWorker<String, Object> { String workerIds, subject, message; public SendMessageWorker(String workerIds, String subject, String message) { this.workerIds = workerIds; this.subject = subject; this.message = message; } @Override protected String doInBackground() throws Exception { String[] ids = workerIds.split("[, ]+"); req.notifyAllWorkers(subject, message, Arrays.asList(ids), 0); return "Workers Notified!"; } @Override protected void done() { try { JOptionPane.showMessageDialog(WorkerPanel.this, get()); } catch (Exception e) { e.printStackTrace(); } } } }