package pl.edu.fuw.fid.signalanalysis; import java.io.File; import javax.swing.JMenu; import org.fuin.utils4j.Utils4J; import org.signalml.plugin.export.Plugin; import org.signalml.plugin.export.SvarogAccess; import org.signalml.plugin.export.signal.SvarogAccessSignal; import org.signalml.plugin.export.view.SvarogAccessGUI; import pl.edu.fuw.fid.signalanalysis.dtf.DtfMethodAction; import pl.edu.fuw.fid.signalanalysis.ica.DescribeComponentsAction; import pl.edu.fuw.fid.signalanalysis.ica.IcaMethodAction; import pl.edu.fuw.fid.signalanalysis.stft.PopupActionForSTFT; import pl.edu.fuw.fid.signalanalysis.wavelet.PopupActionForWavelet; import pl.edu.fuw.fid.signalanalysis.ica.ZeroMethodAction; import pl.edu.fuw.fid.signalanalysis.stft.AveragedStftDialog; import pl.edu.fuw.fid.signalanalysis.stft.ImageRendererForSTFT; import pl.edu.fuw.fid.signalanalysis.waveform.AveragedBaseAction; import pl.edu.fuw.fid.signalanalysis.wavelet.AveragedWaveletDialog; import pl.edu.fuw.fid.signalanalysis.wavelet.ImageRendererForWavelet; /** * Main class for the Signal Analysis plugin. * Since parts of the plugin (time-frequency transforms) require JavaFX, * this plugin adds JavaFX runtime (jfxrt.jar) to the classpath, * with a little help from Utils4J. * Should JavaFX cease to be required, Utils4J dependency may be removed. * * @author ptr@mimuw.edu.pl */ public class SignalAnalysisPlugin implements Plugin { private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(SignalAnalysisPlugin.class); private SvarogAccessGUI guiAccess; private SvarogAccessSignal signalAccess; private void addToClasspathIfExists(String relativePath) { String path = System.getProperty("java.home")+File.separator+relativePath; if (new File(path).isFile()) { Utils4J.addToClasspath("file:///"+path); } } @Override public void register(SvarogAccess access) { // for java-7-oracle addToClasspathIfExists("lib"+File.separator+"jfxrt.jar"); // for java-8-oracle addToClasspathIfExists("lib"+File.separator+"ext"+File.separator+"jfxrt.jar"); guiAccess = access.getGUIAccess(); signalAccess = access.getSignalAccess(); JMenu icaMenu = new JMenu("Independent Component Analysis"); icaMenu.add(new IcaMethodAction(guiAccess, signalAccess)); icaMenu.add(new DescribeComponentsAction(guiAccess, signalAccess)); icaMenu.add(new ZeroMethodAction(guiAccess, signalAccess)); guiAccess.addSubmenuToToolsMenu(icaMenu); guiAccess.addButtonToToolsMenu(new DtfMethodAction(guiAccess, signalAccess)); JMenu stftMenu = new JMenu("Short-Time Fourier Transform"); stftMenu.add(new PopupActionForSTFT(signalAccess)); try { stftMenu.add(new AveragedBaseAction(guiAccess, signalAccess, AveragedStftDialog.class, ImageRendererForSTFT.class)); } catch (Exception ex) { logger.error(ex); } guiAccess.addSubmenuToToolsMenu(stftMenu); JMenu wtMenu = new JMenu("Wavelet Transform"); wtMenu.add(new PopupActionForWavelet(signalAccess)); try { wtMenu.add(new AveragedBaseAction(guiAccess, signalAccess, AveragedWaveletDialog.class, ImageRendererForWavelet.class)); } catch (Exception ex) { logger.error(ex); } guiAccess.addSubmenuToToolsMenu(wtMenu); } }