@Override public Representation convert(DataHandler handler, final Reference ref, CcData data) throws Exception { final StringBuilder sb = new StringBuilder(); Query query = handler.getQuery(); sb.setLength(0); String sep = ""; for (MdColumn c : query.getColumns()) { sb.append(sep).append(escapeStr(c.getCName())); sep = FS; } sb.append(NL); new DataVisitor(handler) { @Override public void startRow() {} @Override public void visitCol() { if (colNumber > 0) { sb.append(FS); } if (value != null) { switch (column.getType()) { case DATE: sb.append(DATE_FORMAT.format((Date) value)); break; case STRING: sb.append(escapeStr((String) value)); break; case BLOB: case CLOB: sb.append("[file]"); break; default: sb.append(value); } } } @Override public void endRow() { sb.append(NL); } }.visit(data.getValue()); return new WriterRepresentation(MediaType.TEXT_CSV) { @Override public void write(Writer writer) throws IOException { writer.write(sb.toString()); } }; }