mirror of https://github.com/jlizier/jidt
213 lines
7.0 KiB
Java
213 lines
7.0 KiB
Java
/*
|
|
* Java Information Dynamics Toolkit (JIDT)
|
|
* Copyright (C) 2017, Joseph T. Lizier
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
package infodynamics.demos.autoanalysis;
|
|
|
|
|
|
import javax.swing.BorderFactory;
|
|
import javax.swing.ImageIcon;
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JButton;
|
|
import javax.swing.SwingConstants;
|
|
import javax.swing.ToolTipManager;
|
|
|
|
import java.awt.BorderLayout;
|
|
import java.awt.GridBagConstraints;
|
|
import java.awt.GridBagLayout;
|
|
import java.awt.MediaTracker;
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.ActionEvent;
|
|
import java.lang.reflect.Constructor;
|
|
import java.net.URL;
|
|
|
|
/**
|
|
* This class provides a single GUI to launch the AutoAnalyser GUIs from.
|
|
*
|
|
*
|
|
* @author Joseph Lizier
|
|
*
|
|
*/
|
|
public class AutoAnalyserLauncher extends JFrame
|
|
implements ActionListener {
|
|
|
|
/**
|
|
* Need serialVersionUID to be serializable
|
|
*/
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
protected JButton[] launcherButtons;
|
|
|
|
protected String[] buttonLabels = {
|
|
"Entropy",
|
|
"Mutual Info",
|
|
"Conditional Mutual Info",
|
|
"Active Info Storage",
|
|
"Transfer Entropy",
|
|
"Conditional Transfer Entropy"
|
|
};
|
|
|
|
@SuppressWarnings("rawtypes")
|
|
protected Class[] launcherClasses = {
|
|
AutoAnalyserEntropy.class,
|
|
AutoAnalyserMI.class,
|
|
AutoAnalyserCMI.class,
|
|
AutoAnalyserAIS.class,
|
|
AutoAnalyserTE.class,
|
|
AutoAnalyserCTE.class
|
|
};
|
|
|
|
protected String appletTitle = "JIDT AutoAnalyser Launcher";
|
|
|
|
protected String offsetFromJidtToAutoAnalyserFolder = "demos/AutoAnalyser/";
|
|
|
|
protected String autoAnalyserFolder = null;
|
|
|
|
/**
|
|
* Constructor to generate the application windows
|
|
*/
|
|
public AutoAnalyserLauncher(boolean useCurrentLocation) {
|
|
|
|
String jidtFolder = null;
|
|
if (!useCurrentLocation) {
|
|
// Figure out the location of the resource this class was run from.
|
|
// Presumably it is the infodynamics.jar file:
|
|
URL resource = getClass().getProtectionDomain().getCodeSource().getLocation();
|
|
if (resource.getPath().endsWith("jar")) {
|
|
// This resource came from a jar
|
|
jidtFolder = resource.getPath().replaceFirst("infodynamics.jar", "");
|
|
autoAnalyserFolder = jidtFolder + offsetFromJidtToAutoAnalyserFolder;
|
|
}
|
|
// System.out.println(resource.getPath());
|
|
}
|
|
if (autoAnalyserFolder == null) {
|
|
// Either useCurrentLocation is true, or the current resource did not
|
|
// come from the infodynamics.jar file. Either way, we're simply
|
|
// going to assume the current location is the auto analyser folder
|
|
autoAnalyserFolder = System.getProperty("user.dir") + "/";
|
|
jidtFolder = autoAnalyserFolder + "/../../";
|
|
}
|
|
|
|
// Build the swing applet
|
|
|
|
ImageIcon icon = new ImageIcon(jidtFolder + "JIDT-logo.png"); // Location for distributions
|
|
if (icon.getImageLoadStatus() != MediaTracker.COMPLETE) {
|
|
// Try the alternative image location for git checkouts
|
|
icon = new ImageIcon(jidtFolder + "web/JIDT-logo.png");
|
|
}
|
|
setIconImage(icon.getImage());
|
|
|
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
setSize(250,300);
|
|
setTitle(appletTitle);
|
|
// Centre in the middle of the screen
|
|
setLocationRelativeTo(null);
|
|
|
|
// Add buttons to launch each AutoAnalyser:
|
|
launcherButtons = new JButton[buttonLabels.length];
|
|
for (int i = 0; i < launcherButtons.length; i++) {
|
|
launcherButtons[i] = new JButton(buttonLabels[i]);
|
|
launcherButtons[i].addActionListener(this);
|
|
}
|
|
|
|
// Add all the components in:
|
|
/*
|
|
add(calcTypePanel, BorderLayout.NORTH);
|
|
add(dataFileChooserPanel, BorderLayout.EAST);
|
|
add(dataFileDescriptorPanel, BorderLayout.WEST);
|
|
add(computeButton, BorderLayout.SOUTH);
|
|
*/
|
|
// gridbag.setConstraints(calcTypePanel, c);
|
|
// add(calcTypePanel);
|
|
JPanel calcButtonsPanel = new JPanel();
|
|
calcButtonsPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
|
|
GridBagLayout gridbag = new GridBagLayout();
|
|
GridBagConstraints c = new GridBagConstraints();
|
|
calcButtonsPanel.setLayout(gridbag);
|
|
c.anchor = GridBagConstraints.CENTER; // Not sure what I put EAST for?
|
|
|
|
// Add the buttons for each AutoAnalyser
|
|
c.gridwidth = GridBagConstraints.REMAINDER; //end row
|
|
c.fill = GridBagConstraints.BOTH;
|
|
c.weightx = 1.0;
|
|
JLabel textLabel = new JLabel("Select AutoAnalyser to launch:");
|
|
textLabel.setSize(10, 10);
|
|
textLabel.setHorizontalAlignment(SwingConstants.CENTER);
|
|
calcButtonsPanel.add(textLabel, c);
|
|
JLabel dummyLabel = new JLabel(" ");
|
|
dummyLabel.setSize(10, 10);
|
|
dummyLabel.setHorizontalAlignment(SwingConstants.CENTER);
|
|
calcButtonsPanel.add(dummyLabel, c);
|
|
for (int i = 0; i < launcherButtons.length; i++) {
|
|
launcherButtons[i].setHorizontalAlignment(SwingConstants.CENTER);
|
|
calcButtonsPanel.add(launcherButtons[i], c);
|
|
JLabel dummyLabel1 = new JLabel(" ");
|
|
dummyLabel1.setSize(10, 10);
|
|
calcButtonsPanel.add(dummyLabel1, c);
|
|
}
|
|
|
|
// Add all panels into the frame with Border layout
|
|
add(calcButtonsPanel, BorderLayout.WEST);
|
|
|
|
setVisible(true);
|
|
|
|
// The default tool tip delay before dismissing was too short to read these, so
|
|
// I'm setting it to 30 sec.
|
|
ToolTipManager.sharedInstance().setDismissDelay(30000);
|
|
|
|
}
|
|
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
// Check which (if any) button the action came from
|
|
for (int i = 0; i < launcherButtons.length; i++) {
|
|
if (e.getSource() == launcherButtons[i]) {
|
|
try {
|
|
// Call the constructor for the relevant AutoAnalyser
|
|
// passing in the offset to the AutoAnalyser directory.
|
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
|
Constructor cons = launcherClasses[i].getConstructor(String.class);
|
|
cons.newInstance(autoAnalyserFolder);
|
|
} catch (Exception ex) {
|
|
JOptionPane.showMessageDialog(null, ex.getMessage(),
|
|
"Error launching " + buttonLabels[i] + " AutoAnalyser",
|
|
JOptionPane.ERROR_MESSAGE);
|
|
ex.printStackTrace();
|
|
System.out.println();
|
|
return;
|
|
}
|
|
// The AutoAnalyser started correctly, so we can close this launcher
|
|
dispose();
|
|
}
|
|
}
|
|
// Else nothing extra to do
|
|
}
|
|
|
|
/**
|
|
* @param args
|
|
*/
|
|
public static void main(String[] args) {
|
|
// Assume that any command argument means to take the current
|
|
// directory as the AutoAnalyser folder.
|
|
// Double clicking jar won't pass any arguments in.
|
|
new AutoAnalyserLauncher(args.length > 0);
|
|
}
|
|
}
|