package org.cytoscape.d3.internal.writer;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import org.cytoscape.io.write.CyWriter;
import org.cytoscape.task.AbstractNetworkViewTask;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.work.TaskMonitor;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* Writer for all JSON format. Output format will be determined by ObjectMapper.
*
*/
public final class D3NetworkViewWriter extends AbstractNetworkViewTask implements CyWriter {
private final OutputStream outputStream;
private final ObjectMapper networkView2jsonMapper;
public D3NetworkViewWriter(final OutputStream outputStream, final CyNetworkView networkView,
final ObjectMapper networkView2jsonMapper) {
super(networkView);
if (outputStream == null)
throw new NullPointerException("Output Stream is null.");
if (networkView2jsonMapper == null)
throw new NullPointerException("Object Mapper is null.");
this.outputStream = outputStream;
this.networkView2jsonMapper = networkView2jsonMapper;
}
@Override
public void run(TaskMonitor taskMonitor) throws Exception {
if (taskMonitor != null) {
taskMonitor.setTitle("Writing Network View to D3-Style JSON");
taskMonitor.setStatusMessage("Writing D3 style JSON...");
taskMonitor.setProgress(-1.0);
}
networkView2jsonMapper.writeValue(new OutputStreamWriter(outputStream, EncodingUtil.getEncoder()), view);
outputStream.close();
if (taskMonitor != null) {
taskMonitor.setStatusMessage("Success.");
taskMonitor.setProgress(1.0);
}
}
}