package org.jactr.eclipse.runtime.probe3.extract; /* * default logging */ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.jactr.eclipse.runtime.probe3.IProbeData; /** * probe data that doesn't actually save the data in memory, but to file. * * @author harrison */ public class OutputProbeData implements IProbeData { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(OutputProbeData.class); private final String _probeName; private final IResource _outputFile; private PrintWriter _outputWriter; private double _lastTimeStamp = Double.MIN_VALUE; public OutputProbeData(String probeName, IFolder outputDir) { _probeName = probeName; _outputFile = outputDir.getFile(probeName + ".txt"); openFile(); } protected void openFile() { File fp = _outputFile.getRawLocation().toFile(); try { fp.getParentFile().mkdirs(); _outputWriter = new PrintWriter(new FileWriter(fp)); _outputWriter.println(_probeName); _outputWriter.println("Time\tValue"); } catch (IOException e) { // TODO Auto-generated catch block LOGGER.error("OutputProbeData.openFile threw IOException : ", e); _outputWriter = null; } } public void close() { if (_outputWriter != null) { _outputWriter.flush(); _outputWriter.close(); _outputWriter = null; } } @Override public String getName() { return _probeName; } @Override public void addSample(double time, double value) { if (_lastTimeStamp >= time) LOGGER.error(String.format( "Time regression in probe data (%s)? last: %.3f now: %.3f ", getName(), _lastTimeStamp, time), new RuntimeException()); if (_outputWriter != null /* && _lastTimeStamp < time */) _outputWriter.println(String.format("%.3f\t%.3f", time, value)); _lastTimeStamp = time; } @Override public void setBufferSize(int size) { // noop } @Override public void setClipWindow(int window) { // noop } }