package org.cytoscape.d3.internal.writer;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import org.cytoscape.io.write.CyWriter;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.task.AbstractNetworkTask;
import org.cytoscape.work.TaskMonitor;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* Writer for all D3 format. Output format will be determined by ObjectMapper.
*
*/
public class D3NetworkWriter extends AbstractNetworkTask implements CyWriter {
private final OutputStream outputStream;
private final ObjectMapper network2jsonMapper;
public D3NetworkWriter(final OutputStream outputStream, final CyNetwork network,
final ObjectMapper network2jsonMapper) {
super(network);
this.outputStream = outputStream;
this.network2jsonMapper = network2jsonMapper;
}
@Override
public void run(TaskMonitor taskMonitor) throws Exception {
if (taskMonitor != null) {
taskMonitor.setTitle("Writing to D3-Style JSON");
taskMonitor.setStatusMessage("Writing network in D3.js format...");
taskMonitor.setProgress(-1.0);
}
network2jsonMapper.writeValue(new OutputStreamWriter(outputStream, EncodingUtil.getEncoder()), network);
outputStream.close();
if (taskMonitor != null) {
taskMonitor.setStatusMessage("Success.");
taskMonitor.setProgress(1.0);
}
}
}