package com.cse10.gui.task.duplicateDetect; import com.cse10.duplicateDetector.DuplicateDetectorUIHandler; import org.apache.log4j.Logger; import javax.swing.*; import java.util.Observable; import java.util.Observer; /** * Created by TharinduWijewardane on 2015-01-29. */ public class DuplicateDetectorTask extends SwingWorker implements Observer { protected Logger logger = Logger.getLogger(this.getClass()); protected boolean done = false; protected Thread duplicateDetectorUIHandlerThread; protected DuplicateDetectorUIHandler duplicateDetectorUIHandler; public DuplicateDetectorTask() { this.duplicateDetectorUIHandler = new DuplicateDetectorUIHandler(); duplicateDetectorUIHandlerThread = new Thread(duplicateDetectorUIHandler); } /* * Main task. Executed in background thread. */ @Override protected Object doInBackground() { if (!done) { logger.info("Duplicate Detector -> In Background"); duplicateDetectorUIHandler.addObserver(this); duplicateDetectorUIHandlerThread.start(); try { duplicateDetectorUIHandlerThread.join(); } catch (InterruptedException e) { } duplicateDetectorUIHandler.deleteObserver(this); logger.info("Duplicate Detector -> Finished Task"); } return null; } public void stop() { duplicateDetectorUIHandlerThread.interrupt(); logger.info("interrupted by user"); } /* * Executed in event dispatching thread */ @Override public void done() { logger.info("Duplicate Detector -> Done"); done = true; } @Override public void update(Observable o, Object arg) { int progress = (Integer) arg; setProgress(progress); } }