package me.osm.gazetter.join.out_handlers;
import java.io.File;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import me.osm.gazetter.utils.FileUtils;
/**
* Write result via single writer
*/
public abstract class SingleWriterJOHBase implements JoinOutHandler {
protected PrintWriter writer = new PrintWriter(System.out);
private static final Object mutex = new Object();
@Override
public JoinOutHandler initialize(HandlerOptions options) {
String out = options.getString("out", null);
if(out == null) {
out = options.getString(null, "-");
}
initializeWriter(out);
return this;
}
public HandlerOptions parseHandlerOptions(List<String> options) {
List<String> defOptions = new ArrayList<>();
defOptions.add("out");
return HandlerOptions.parse(options, getHandlerArguments(defOptions));
};
protected Collection<String> getHandlerArguments(Collection<String> defOptions) {
return defOptions;
}
protected void initializeWriter(String out) {
try {
if(out != null && !out.equals("-")) {
writer = FileUtils.getPrintWriter(new File(out), false);
}
}
catch(Exception e) {
throw new RuntimeException(e);
}
}
protected void println(String s) {
synchronized (mutex) {
writer.println(s);
}
}
@Override
public void stripeDone(String stripe) {
writer.flush();
}
@Override
public void allDone() {
writer.flush();
writer.close();
}
protected void flush() {
writer.flush();
}
}