package de.mpicbg.knime.scripting.r.misc;
import java.io.File;
import java.io.FileInputStream;
import javax.imageio.ImageIO;
import org.knime.core.data.DataTableSpec;
import org.knime.core.data.image.png.PNGImageContent;
import org.knime.core.node.BufferedDataTable;
import org.knime.core.node.ExecutionContext;
import org.knime.core.node.InvalidSettingsException;
import org.knime.core.node.port.PortObject;
import org.knime.core.node.port.PortObjectSpec;
import org.knime.core.node.port.image.ImagePortObject;
import org.knime.core.node.port.image.ImagePortObjectSpec;
import de.mpicbg.knime.scripting.r.node.plot.RPlotCanvas;
import de.mpicbg.knime.scripting.r.node.plot.RPlotNodeModel;
/**
* Not in use anymore
*
* @author Holger Brandl
* @deprecated
*/
public class RPlotWithImPortNodeModel extends RPlotNodeModel {
protected static final ImagePortObjectSpec IM_PORT_SPEC = new ImagePortObjectSpec(PNGImageContent.TYPE);
public RPlotWithImPortNodeModel() {
super();
}
/**
* {@inheritDoc}
*/
@Override
protected PortObjectSpec[] configure(final PortObjectSpec[] inSpecs)
throws InvalidSettingsException {
configure(new DataTableSpec[]{(DataTableSpec) inSpecs[0]});
return new PortObjectSpec[]{IM_PORT_SPEC};
}
@Override
protected PortObject[] execute(PortObject[] inData, ExecutionContext exec) throws Exception {
BufferedDataTable[] result = (BufferedDataTable[]) super.executeImpl(new PortObject[]{ inData[0]}, exec);
// create the image port object
PNGImageContent content;
File m_imageFile = File.createTempFile("rportImage", ".png");
ImageIO.write(getImage(), "png", m_imageFile);
FileInputStream in = new FileInputStream(m_imageFile);
content = new PNGImageContent(in);
in.close();
PortObject[] outPorts = new PortObject[1 + result.length];
for (int i = 0; i < result.length; i++) {
outPorts[i] = result[1];
}
outPorts[outPorts.length - 1] = new ImagePortObject(content, IM_PORT_SPEC);
return outPorts;
}
}