
eu.interedition.text.json.TextStreamSerializer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of text-core Show documentation
Show all versions of text-core Show documentation
Stand-off Markup/Annotation Text Model
The newest version!
package eu.interedition.text.json;
import com.google.common.base.Throwables;
import com.google.common.collect.Iterables;
import eu.interedition.text.Layer;
import eu.interedition.text.TextRange;
import eu.interedition.text.TextStream;
import java.io.IOException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
/**
* @author Gregor Middell
*/
public class TextStreamSerializer extends JsonSerializer {
@Override
public Class handledType() {
return TextStream.class;
}
@SuppressWarnings("unchecked")
@Override
public void serialize(TextStream value, final JsonGenerator jgen, SerializerProvider provider) throws IOException {
try {
value.stream(new TextStream.ExceptionPropagatingListenerAdapter() {
@Override
protected void doStart(long contentLength) throws Exception {
jgen.writeStartArray();
jgen.writeStartObject();
jgen.writeStringField("event", "startStream");
jgen.writeNumberField("contentLength", contentLength);
jgen.writeEndObject();
}
@Override
protected void doStart(long offset, Iterable layers) throws Exception {
jgen.writeStartObject();
jgen.writeStringField("event", "start");
jgen.writeNumberField("offset", offset);
jgen.writeArrayFieldStart("layers");
for (Layer layer : Iterables.filter(layers, Layer.class)) {
jgen.writeObject(layer);
}
jgen.writeEndArray();
jgen.writeEndObject();
}
@Override
protected void doEnd(long offset, Iterable layers) throws Exception {
jgen.writeStartObject();
jgen.writeStringField("event", "end");
jgen.writeNumberField("offset", offset);
jgen.writeArrayFieldStart("layers");
for (Layer layer : Iterables.filter(layers, Layer.class)) {
jgen.writeObject(layer);
}
jgen.writeEndArray();
jgen.writeEndObject();
}
@Override
protected void doText(TextRange r, String text) throws Exception {
jgen.writeStartObject();
jgen.writeStringField("event", "text");
jgen.writeObjectField("range", r);
jgen.writeStringField("text", text);
jgen.writeEndObject();
}
@Override
protected void doEnd() throws Exception {
jgen.writeStartObject();
jgen.writeStringField("event", "endStream");
jgen.writeEndObject();
jgen.writeEndArray();
}
});
} catch (Throwable t) {
Throwables.propagateIfInstanceOf(Throwables.getRootCause(t), IOException.class);
throw Throwables.propagate(t);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy