package org.archive.cdxserver.writer; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringEscapeUtils; import org.archive.format.cdx.CDXLine; import org.archive.format.cdx.FieldSplitFormat; public class JsonWriter extends HttpCDXWriter { boolean writeHeader = true; boolean firstLine = true; public JsonWriter(HttpServletResponse response, boolean gzip) throws IOException { super(response, gzip); setContentType("application/json"); } @Override public void begin() { firstLine = true; writer.print('['); } protected void writeHeader(FieldSplitFormat names) { if (names == null || names.getLength() == 0) { writer.print("[]"); return; } writer.print('['); for (int i = 0; i < names.getLength(); i++) { if (i > 0) { writer.print(','); } writer.print('\"'); writer.print(names.getName(i)); writer.print('\"'); } writer.print(']'); } @Override public int writeLine(CDXLine line) { if (firstLine) { if (writeHeader) { writeHeader(line.getNames()); writer.println(','); } firstLine = false; } else { writer.println(','); } writer.print('['); boolean firstField = true; for (int i = 0; i < line.getNumFields(); i++) { String field = line.getField(i); if (firstField) { writer.print('\"'); firstField = false; } else { writer.print("\", \""); } writer.print(StringEscapeUtils.escapeJava(field)); } if (!firstField) { writer.print('\"'); } writer.print(']'); return 1; } @Override public void end() { writer.println(']'); } @Override public void writeResumeKey(String resumeKey) { writer.println(","); writer.println("[],"); writer.print("[\""); writer.print(resumeKey); writer.print("\"]"); } }