package com.tinkerpop.rexster.gremlin.converter;
import com.tinkerpop.pipes.util.iterators.SingleIterator;
import org.apache.commons.collections.iterators.ArrayIterator;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
* @author Blake Eggleston (bdeggleston.github.com)
*/
public class ConsoleResultConverter implements ResultConverter<List<String>> {
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
private final Writer outputWriter;
public ConsoleResultConverter(final Writer outputWriter) {
this.outputWriter = outputWriter;
}
public List<String> convert(final Object result) throws Exception {
try {
final List<Object> resultLines = new ArrayList<Object>();
final Iterator itty;
if (result instanceof Iterable) {
itty = ((Iterable) result).iterator();
} else if (result instanceof Iterator) {
itty = (Iterator) result;
} else if (result instanceof Object[]) {
itty = new ArrayIterator((Object[]) result);
} else if (result instanceof Map) {
itty = ((Map) result).entrySet().iterator();
} else if (result instanceof Throwable) {
itty = new SingleIterator<Object>(((Throwable) result).getMessage());
} else {
itty = new SingleIterator<Object>(result);
}
while (itty.hasNext()) {
resultLines.add(itty.next());
}
// Handle output data
final List<String> outputLines = new ArrayList<String>();
// Handle eval() result
final String[] printLines = this.outputWriter.toString().split(LINE_SEPARATOR);
if (printLines.length > 0 && printLines[0].length() > 0) {
for (String printLine : printLines) {
outputLines.add(printLine);
}
}
if (resultLines != null && resultLines.size() > 0) {
// Make sure all lines are strings
for (Object resultLine : resultLines) {
outputLines.add(resultLine != null ? resultLine.toString() : "null");
}
}
return outputLines;
} catch (Exception ex) {
final ArrayList<String> resultList = new ArrayList<String>();
resultList.add(ex.getMessage());
return resultList;
}
}
}