/**
*
*/
package org.korsakow.ide.task;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.List;
import org.korsakow.domain.task.ITask;
import org.korsakow.services.export.ExportOptions;
public abstract class AbstractTask implements Task
{
private final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
protected List<ITask> subTasks = new ArrayList<ITask>();
/**
* Must synchronize on access.
*/
protected ExportOptions exportOptions;
public AbstractTask(ExportOptions exportOptions)
{
this.exportOptions = exportOptions;
}
public AbstractTask()
{
exportOptions = null;
}
public AbstractTask(List<ITask> subTasks)
{
this();
this.subTasks = subTasks;
}
public void addPropertyChangeListener(PropertyChangeListener listener)
{
changeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener)
{
changeSupport.addPropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
{
changeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)
{
changeSupport.removePropertyChangeListener(propertyName, listener);
}
public void firePropertyChanged(String propertyName, Object oldValue, Object newValue)
{
changeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
public void fireProgressChanged(int oldValue, int newValue)
{
firePropertyChanged(PROPERTY_PROGRESS, oldValue, newValue);
}
public void fireDisplayStringChanged(String oldValue, String newValue)
{
firePropertyChanged(PROPERTY_DISPLAY_STRING, oldValue, newValue);
}
public String getTitleString()
{
return "";
}
public void run() throws TaskException, InterruptedException
{
runTask();
runSubTasks();
}
protected void runSubTasks() throws TaskException, InterruptedException
{
int i = 0;
int size = subTasks.size();
for (ITask subTask : subTasks) {
fireProgressChanged(0, ++i*100/size);
fireDisplayStringChanged("", subTask.getTitleString());
subTask.run();
}
}
public abstract void runTask() throws TaskException, InterruptedException;
}