package org.drugis.common.gui.task; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import org.drugis.common.threading.IterativeComputation; import org.drugis.common.threading.IterativeTask; import org.drugis.common.threading.SimpleSuspendableTask; import org.drugis.common.threading.Task; import org.drugis.common.threading.ThreadHandler; import org.drugis.common.threading.activity.ActivityModel; import org.drugis.common.threading.activity.ActivityTask; import org.drugis.common.threading.activity.ForkTransition; import org.drugis.common.threading.activity.JoinTransition; import org.drugis.common.threading.activity.Transition; public class TaskProgressBarExample { static class LongComputation implements IterativeComputation { private final int d_max; private int d_step; public LongComputation(int max) { d_max = max; d_step = 0; } public void initialize() {} public void step() { try { Thread.sleep(10); } catch (InterruptedException e) { } ++d_step; } public void finish() {} public int getIteration() { return d_step; } public int getTotalIterations() { return d_max; } } public static void main(String[] args) { Task start = new SimpleSuspendableTask(new Runnable() { public void run() { try { Thread.sleep(1500); } catch (InterruptedException e) { } } }, "start"); IterativeTask middle1 = new IterativeTask(new LongComputation(1500), "fork 1"); middle1.setReportingInterval(25); IterativeTask middle2 = new IterativeTask(new LongComputation(750), "fork 2"); middle2.setReportingInterval(25); IterativeTask middle3 = new IterativeTask(new LongComputation(2000), "fork 3"); middle3.setReportingInterval(25); List<Task> middle = Arrays.asList(new Task[] { middle1, middle2, middle3 } ); IterativeTask end = new IterativeTask(new LongComputation(500), "end"); end.setReportingInterval(50); List<Transition> trans = new ArrayList<Transition>(); trans.add(new ForkTransition(start, middle)); trans.add(new JoinTransition(middle, end)); ActivityModel actModel = new ActivityModel(start, end, trans); final ActivityTask test = new ActivityTask(actModel, "Testing"); TaskProgressBar taskProgressBar = new TaskProgressBar(test); taskProgressBar.setPreferredSize(new Dimension(350, 20)); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel jPanel = new JPanel(); jPanel.add(taskProgressBar); JButton jButton = new JButton("Start Task"); jButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ThreadHandler.getInstance().scheduleTask(test); } }); jPanel.add(jButton); frame.add(jPanel); frame.pack(); frame.setVisible(true); } }