package org.signalml.plugin.fftsignaltool; import java.awt.event.ActionEvent; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import org.apache.log4j.Logger; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; import org.signalml.plugin.export.view.AbstractSignalMLAction; public class SignalFFTPopupAction extends AbstractSignalMLAction { private static final long serialVersionUID = 1L; private SignalFFTTool tool; private double[] powerSpectrum; private double[] frequencies; private static FFTSignalToolI18nDelegate i18nDelegate; protected static final Logger logger = Logger .getLogger(SignalFFTPopupAction.class); public SignalFFTPopupAction(FFTSignalToolI18nDelegate i18nDelegate) { super(); this.i18nDelegate = i18nDelegate; setText("Export FFT to CSV"); } @Override public void actionPerformed(ActionEvent arg0) { logger.debug("Saving FFT in CSV file"); if (powerSpectrum == null || frequencies == null) { JOptionPane.showMessageDialog(null, _("First you have to comupte FFT."), _("No FFT computed"), JOptionPane.ERROR_MESSAGE); logger.debug("No FFT computed"); return; } JFileChooser fc = new JFileChooser(); fc.setFileFilter(new FileNameExtensionFilter("CSV Files", "csv")); fc.setMultiSelectionEnabled(false); int returnVal = fc.showSaveDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { File csvFile = fc.getSelectedFile(); try{ if (!csvFile.getName().toLowerCase().endsWith(".csv")) csvFile = new File(csvFile.getAbsolutePath() + ".csv"); if (!csvFile.exists()) csvFile.createNewFile(); String delimiter = (String)JOptionPane.showInputDialog( null, _("Type delimiter"), _("Delimiter selection"), JOptionPane.QUESTION_MESSAGE, null, null, ";"); if (delimiter != null && delimiter.length() > 0) { logger.debug("Writing FFT to " + csvFile.getCanonicalPath() + " with " + delimiter + " as a delimiter"); FileWriter fw = new FileWriter(csvFile.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); for (int i = 0; i < powerSpectrum.length; ++i) bw.write("" + frequencies[i] + delimiter + powerSpectrum[i] + "\n"); bw.close(); return; } } catch (IOException ex) { logger.error("IO error during FFT saving"); } } } public void setPowerAndFrequencies(double[] powerSpectrum, double[] frequencies) { this.powerSpectrum = powerSpectrum; this.frequencies = frequencies; } public static String _(String msgKey) { return i18nDelegate._(msgKey); } }