package com.mozilla.grouperfish.batch.handlers; import static com.mozilla.grouperfish.batch.scheduling.Helpers.inputFilename; import static com.mozilla.grouperfish.batch.scheduling.Helpers.parametersFilename; import static com.mozilla.grouperfish.batch.scheduling.Helpers.writer; import java.io.Writer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mozilla.grouperfish.base.Assert; import com.mozilla.grouperfish.base.json.TsvJsonWriter; import com.mozilla.grouperfish.batch.scheduling.Helpers; import com.mozilla.grouperfish.model.Document; import com.mozilla.grouperfish.model.Fail; import com.mozilla.grouperfish.model.Task; import com.mozilla.grouperfish.model.Type; import com.mozilla.grouperfish.services.api.FileSystem; import com.mozilla.grouperfish.services.api.Index; import com.mozilla.grouperfish.services.api.IndexProvider; public class FetchHandler implements TaskHandler { private static final Logger log = LoggerFactory.getLogger(FetchHandler.class); private final IndexProvider indexes; private final FileSystem fs; public FetchHandler(final FileSystem fs, final IndexProvider index) { this.fs = fs; this.indexes = index; } @Override public Task handle(final Task task) throws Fail { Index index = indexes.index(task.namespace().bucket(Type.DOCUMENT)); Assert.nonNull(task); try { final TsvJsonWriter tsvWriter = new TsvJsonWriter(writer(fs, task, inputFilename(task))); for (final Document doc : index.find(task.query())) tsvWriter.write(doc); tsvWriter.close(); final Writer parametersWriter = writer(fs, task, parametersFilename(task)); parametersWriter.write(task.transform().parametersJson()); parametersWriter.close(); } catch (final Exception e) { final String message = String.format( "Failed writing doc to %s", Helpers.inputFilename(task)); log.error("Exception", e); throw Fail.hard(task, message, e); } return task; } }