package com.robonobo.gui.tasks; import static com.robonobo.gui.GuiUtil.*; import java.io.File; import java.util.*; import com.robonobo.common.concurrent.CatchingRunnable; import com.robonobo.core.api.Task; import com.robonobo.core.api.model.Stream; import com.robonobo.core.api.model.StreamWithFile; import com.robonobo.gui.frames.RobonoboFrame; import com.robonobo.gui.model.StreamComparator; import com.robonobo.gui.sheets.TaskProgressSheet; public class ImportFilesTask extends Task { protected List<File> files = new ArrayList<File>(); protected RobonoboFrame frame; public ImportFilesTask(RobonoboFrame frame, List<File> files) { this.frame = frame; this.files = files; if(files != null) title = "Importing " + files.size() + " files"; } @Override public void runTask() throws Exception { statusText = "Reading file details"; fireUpdated(); final TaskProgressSheet tps = new TaskProgressSheet(frame, statusText, "Reading", files.size(), true); runOnUiThread(new CatchingRunnable() { public void doRun() throws Exception { frame.showSheet(tps); } }); final List<StreamWithFile> sl = new ArrayList<StreamWithFile>(); int i = 0; for (File f : files) { if(cancelRequested) { cancelConfirmed(); return; } Stream s = frame.ctrl.getStream(f); StreamWithFile swf = new StreamWithFile(); swf.copyFrom(s); swf.file = f; sl.add(swf); tps.setProgress(++i); statusText = "Reading file "+i+" of "+files.size(); fireUpdated(); } Collections.sort(sl, new StreamComparator()); final ChooseImportsSheet cfs = new ChooseImportsSheet(frame, sl, null, this); runOnUiThread(new CatchingRunnable() { public void doRun() throws Exception { if (tps.isVisible()) tps.setVisible(false); frame.showSheet(cfs); } }); } protected void streamsAdded(List<String> streamIds) { // Default impl does nothing } }