src/main/java/org/embulk/output/SalesforceOutputPlugin.java in embulk-output-salesforce-0.1.0 vs src/main/java/org/embulk/output/SalesforceOutputPlugin.java in embulk-output-salesforce-0.1.1

- old
+ new

@@ -8,10 +8,11 @@ import com.sforce.soap.partner.SaveResult; import com.sforce.soap.partner.UpsertResult; import com.sforce.soap.partner.sobject.SObject; import com.sforce.ws.ConnectionException; import com.sforce.ws.ConnectorConfig; +import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -53,11 +54,11 @@ @Config("password") public String getPassword(); @Config("login_endpoint") - @ConfigDefault("https://login.salesforce.com") + @ConfigDefault("\"https://login.salesforce.com\"") public Optional<String> getLoginEndpoint(); @Config("sobject") public String getSObject(); @@ -76,21 +77,30 @@ @Config("version") @ConfigDefault("34.0") public Optional<String> getVersion(); @Config("result_dir") - @ConfigDefault("\"./target\"") + @ConfigDefault("null") public Optional<String> getResultDir(); } @Override public ConfigDiff transaction(ConfigSource config, Schema schema, int taskCount, OutputPlugin.Control control) { PluginTask task = config.loadConfig(PluginTask.class); logger = Exec.getLogger(getClass()); + + if (task.getResultDir().isPresent() && task.getResultDir().get() != null) { + File resultDir = new File(task.getResultDir().get()); + if (!resultDir.exists() || !resultDir.isDirectory()) { + logger.error("{} is not exist or is not directory.", task.getResultDir().get()); + throw new RuntimeException(task.getResultDir().get() + " is not exist or is not directory."); + } + } + final String username = task.getUsername(); final String password = task.getPassword(); final String loginEndpoint = task.getLoginEndpoint().get(); try { if (client == null) { @@ -143,11 +153,11 @@ } public class SalesforcePageOutput implements TransactionalPageOutput { - private final String datePostFix = new SimpleDateFormat("yyyyMMddhhmmssSSS").format(new Date()); + private final String dateSuffix = new SimpleDateFormat("yyyyMMddhhmmssSSS").format(new Date()); private final PageReader pageReader; private final PartnerConnection client; private final int batchSize; private List<SObject> records; @@ -346,19 +356,25 @@ private void createResultsFiles(List<SObject> records, ResultWrapper resultWrapper) throws IOException{ ICsvListWriter successListWriter = null; ICsvListWriter errorListWriter = null; try { - String successFileName = this.resultDir + "/success_" + datePostFix + ".csv"; + String successFileName = this.resultDir + "/success_" + dateSuffix + ".csv"; + Boolean isExistSuccessFile = new File(successFileName).exists(); successListWriter = new CsvListWriter(new FileWriter(successFileName, true), CsvPreference.STANDARD_PREFERENCE); - //successListWriter.write(createSuccessHeader()); + if (!isExistSuccessFile) { + successListWriter.write(createSuccessHeader()); + } - String errorFileName = this.resultDir + "/error_" + datePostFix + ".csv"; + String errorFileName = this.resultDir + "/error_" + dateSuffix + ".csv"; + Boolean isExistErrorFile = new File(errorFileName).exists(); errorListWriter = new CsvListWriter(new FileWriter(errorFileName, true), CsvPreference.STANDARD_PREFERENCE); - //errorListWriter.write(createErrorHeader()); - + if (!isExistErrorFile) { + errorListWriter.write(createErrorHeader()); + } + CellProcessor[] processors = new CellProcessor[pageReader.getSchema().getColumns().size() + 1]; ArrayList<ArrayList<String>> errorValues = new ArrayList<>(); for (Integer i = 0, imax = records.size(); i < imax; i++) { SObject record = records.get(i);