package com.github.pgelinas.jackson.javax.json; import java.io.IOException; import java.io.OutputStream; import java.io.Writer; import javax.json.JsonArray; import javax.json.JsonException; import javax.json.JsonObject; import javax.json.JsonStructure; import javax.json.JsonWriter; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pgelinas.jackson.javax.json.stream.JacksonGenerator; public class JacksonWriter implements JsonWriter { private final ObjectMapper _mapper; private final JacksonGenerator _generator; public JacksonWriter(ObjectMapper mapper, Writer writer) throws IOException { _mapper = mapper; _generator = new JacksonGenerator(mapper.getFactory().createGenerator(writer)); } public JacksonWriter(ObjectMapper mapper, OutputStream out) throws IOException { _mapper = mapper; _generator = new JacksonGenerator(mapper.getFactory().createGenerator(out)); } @Override public void writeArray(JsonArray array) { writeValue(array); } @Override public void writeObject(JsonObject object) { writeValue(object); } @Override public void write(JsonStructure value) { writeValue(value); } private void writeValue(JsonStructure structure) { if (structure instanceof JacksonValue) { try { _mapper.writeTree(_generator.delegate(), ((JacksonValue<?>) structure).delegate()); } catch (IOException exception) { throw new JsonException("", exception); } } else { _generator.write(structure); } } @Override public void close() { _generator.close(); } }