package com.sforce.bulk; import com.sforce.ws.ConnectorConfig; import java.io.PrintStream; public class StreamHandler { private static final String BULK_TAG = "BULK-STREAM:"; private final ConnectorConfig config; private boolean shutdown = false; private int errorCount; public StreamHandler() { this.config = new ConnectorConfig(); } public ConnectorConfig getConfig() { return this.config; } public PrintStream getLogStream() { return System.out; } public void info(String message) { getLogStream().println("BULK-STREAM:INFO:" + message); } public void error(String message, Throwable e) throws StreamException { this.errorCount++; getLogStream().println("BULK-STREAM:ERROR:" + message); e.printStackTrace(getLogStream()); if (this.errorCount > getMaxErrorCount()) { String str = "Tried more than " + getMaxErrorCount() + "... gaving up ..."; info(str); this.shutdown = true; } else { long waitTime = getWaitTime(); info("Error count " + this.errorCount + ". Trying again after " + waitTime); try { Thread.sleep(waitTime); } catch (InterruptedException e1) { error("Failed to sleep", e1); } } } public long getWaitTime() { return (long)(Math.pow(2.0D, this.errorCount) * 1000.0D); } public void shutdown() { this.shutdown = true; } public boolean shouldContinue() { return !this.shutdown; } public int getMaxErrorCount() { return 10; } public int getMaxRecordsInBatch() { return 5000; } public long getMaxWaitTime() { return 600000L; } }