package com.cse10.gui.task.classify; import com.cse10.classifier.ClassifierUIHandler; import org.apache.log4j.Logger; import javax.swing.*; import java.util.Date; import java.util.Observer; /** * Created by TharinduWijewardane on 2015-01-19. */ public abstract class ClassifyTask extends SwingWorker<Void, Void> implements Observer { protected Logger logger = Logger.getLogger(this.getClass()); protected boolean done = false; protected ClassifierUIHandler classifierUIHandler; protected Date startDate; protected Date endDate; public ClassifyTask() { } public ClassifyTask(Date startDate, Date endDate) { this.startDate = startDate; this.endDate = endDate; } /* * Main task. Executed in background thread. */ @Override public Void doInBackground() { if (!done) { logger.info(getPaperName() + " -> In Background"); Thread.currentThread().setName(getPaperName() + " Classifier Thread"); //Initialize progress property. setProgress(0); //start classification process classifierUIHandler = getClassifierUIHandler(); classifierUIHandler.getClassifierConfigurator().addObserver(this); classifierUIHandler.setEndDate(endDate); classifierUIHandler.setName(getPaperName() + " Classifier Thread"); classifierUIHandler.run(); try { classifierUIHandler.join(); } catch (InterruptedException e) { e.printStackTrace(); } classifierUIHandler.getClassifierConfigurator().deleteObserver(this); logger.info(getPaperName() + " Classifer -> Finished Task"); } return null; } /* * Executed in event dispatching thread */ @Override public void done() { logger.info(getPaperName() + " Classifer -> Done"); done = true; } protected abstract ClassifierUIHandler getClassifierUIHandler(); //tobe implemented in paper specific subclasses protected abstract String getPaperName(); //tobe implemented in paper specific subclasses //to stop classification process public void stopClassification() { classifierUIHandler.interrupt(); } }