package com.cse10.gui.task.extract; import com.cse10.extractor.gate.EntityExtractorTask; 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 ExtractorTask extends SwingWorker implements Observer { protected Logger logger = Logger.getLogger(this.getClass()); protected boolean done = false; private Thread extractorThread; /* * Main task. Executed in background thread. */ @Override protected Object doInBackground() { if (!done) { logger.info("in background"); EntityExtractorTask entityExtractorTask = new EntityExtractorTask(); entityExtractorTask.getEntityExtrator().addObserver(this); extractorThread = new Thread(entityExtractorTask); extractorThread.start(); try { extractorThread.join(); entityExtractorTask.getEntityExtrator().deleteObserver(this); } catch (InterruptedException e) { logger.info("Error: ", e); } } return null; } public void stopExtract() { extractorThread.interrupt(); logger.info("interrupted by user"); } /* * Executed in event dispatching thread */ @Override public void done() { logger.info("done"); done = true; } @Override public void update(Observable o, Object arg) { int progress = ((Integer) arg).intValue(); setProgress(progress); } }