/** * Used as an alternative to {@link #beginNextSubtask()}. Instead of calling {@link * #beginNextSubtask()} once after each subtask (except the last), you can instead call * beginSubTask at the beginning of every subtask including the first. */ public void beginSubtask() { if (numOperations == 0) { throw new IllegalStateException("This operation has no subtasks"); } currentSubTaskMessage = ""; if (!beganFirstSubTask) { beganFirstSubTask = true; } else { beginNextSubtask(); } }
@Override public List<AnnotatedPluginDocument> performOperation( AnnotatedPluginDocument[] annotatedDocuments, ProgressListener progressListener, Options options) throws DocumentOperationException { int PAGE_SIZE = 2; try { String query = options.getValueAsString("query"); int count = 0; InputStream countInput = queryServer("query count " + query); // Get the response BufferedReader rd = new BufferedReader(new InputStreamReader(countInput)); String line; while ((line = rd.readLine()) != null) { count = Integer.parseInt(line.trim()); } rd.close(); int numberOfPages = (int) Math.ceil(count / PAGE_SIZE); CompositeProgressListener composite = new CompositeProgressListener(progressListener, numberOfPages); for (int page = 0; page < numberOfPages; page++) { InputStream inputStream = queryServer("query page_size " + PAGE_SIZE + " page_number " + page + " text " + query); File outputFile = new File( System.getProperty("user.home") + File.separator + "traceData" + File.separator + "part" + page + ".tgz"); BufferedReader in = new BufferedReader(new InputStreamReader(inputStream)); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outputFile)); List<String> ids = new ArrayList<String>(); String line2 = null; while ((line2 = in.readLine()) != null) { if (composite.isCanceled()) { break; } System.out.println(line2); // out.write(n); ids.add(line2); } if (composite.isCanceled()) { break; } in.close(); InputStream tgzIn = queryServer("retrieve_gz all " + StringUtilities.join(", ", ids)); int n; int byteCount = 0; while ((n = tgzIn.read()) >= 0) { byteCount++; composite.setMessage("Downloaded " + byteCount + " bytes"); if (composite.isCanceled()) { break; } // out.write(n); } tgzIn.close(); out.close(); if (composite.isCanceled()) { break; } composite.beginNextSubtask(); break; // out.close(); } } catch (IOException ex) { ex.toString(); ex.printStackTrace(); throw new DocumentOperationException(ex.getMessage(), ex); } return Collections.emptyList(); }
/** * Convenience method to start the next operation AND set a new message. * * @param message message to set (will be passed to setMessage() */ public void beginNextSubtask(String message) { beginNextSubtask(); currentSubTaskMessage = message; setMessage(""); }