Newer
Older
democall3 / src / gui / processors / TutorLabelProcessor.java
package gui.processors;

import clients.StudentClient;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JLabel;
import network.MessageGenerator;
import network.RequestSender;

/**
 *
 * @author Mark
 */
public class TutorLabelProcessor extends LabelProcessor {

   private final String ip;

   public TutorLabelProcessor(String ip) {
      this.ip = ip;
   }

   @Override
   public MouseAdapter getMouseAdapter() {
      return new MouseAdapter() {

         @Override
         public void mousePressed(MouseEvent e) {
            super.mousePressed(e);
            JLabel label = (JLabel) e.getSource();
            String machine = label.getText();

            // send cancel request to server
            cancelRequest(machine);

            // cancel locally so change happens immediately
            cancel(new Integer(machine));
         }
      };
   }

   private void cancelRequest(String machine) {
      try {
         new RequestSender(ip).sendRequest(new MessageGenerator().cancelRequest(machine));
      } catch (Exception ex) {
         Logger.getLogger(StudentClient.class.getName()).log(Level.SEVERE, "Error cancelling request", ex);
      }
   }

   public void update(Set<Integer> queue) {
      clear();

      // copy the queue so we don't get ConcurrentModificationExceptions in this iterator
      Set<Integer> copy = new LinkedHashSet<Integer>(queue);

      for (Integer machine : copy) {
         request(machine);
      }
   }

   private void clear() {
      // copy the queue so we don't get ConcurrentModificationExceptions in this iterator
      Set<Integer> copy = new LinkedHashSet<Integer>(queue);
      for (Integer machine : copy) {
         cancel(machine);
      }
   }   
   
}