6
+ − 1 import java.util.*;
+ − 2 import java.awt.*;
+ − 3 import java.awt.event.ActionEvent;
+ − 4 import java.awt.event.ActionListener;
+ − 5 import java.io.*;
+ − 6 import javax.swing.*;
+ − 7 import javax.swing.filechooser.*;
+ − 8 import javax.swing.border.*;
+ − 9 import javax.swing.SwingUtilities;
+ − 10 import java.net.*;
+ − 11
+ − 12 public class SmartInstaller extends JPanel implements ActionListener {
+ − 13 int BUFFER = 1024;
+ − 14
+ − 15 JFrame mainFrame;
+ − 16 JTextArea logArea;
+ − 17
+ − 18 // configuration chooser buttons
+ − 19 String configurations[] = {"32 bits", "64 bits"};
+ − 20 JRadioButton configurationButtons[];
+ − 21
+ − 22 // program chooser buttons
+ − 23 String programChoosers[] = {"R", "R Color Brewer Package", "R HMisc Package", "Python 2.6", "S-MART"};
+ − 24 JCheckBox programChooserButtons[];
+ − 25
+ − 26 JButton goButton;
+ − 27
+ − 28 // install directory
+ − 29 JButton installDirectoryChooserButton;
+ − 30 JTextField installDirectoryChooserTextField;
+ − 31
+ − 32
+ − 33 public SmartInstaller() {
+ − 34 super();
+ − 35
+ − 36 Box box = Box.createVerticalBox();
+ − 37
+ − 38 // Header
+ − 39 JPanel headerPanel = new JPanel(false);
+ − 40 JTextArea headerArea = new JTextArea("This is the S-MART installation tool.\r\nIt will download and install the needed softwares, as well as S-MART itself.\r\nYou can unselect the software that you already have installed.\r\nDuring the installation, accept all the default parameters.");
+ − 41 TitledBorder headerBorder = BorderFactory.createTitledBorder("Welcome to the S-MART installer!");
+ − 42 headerArea.setEditable(false);
+ − 43 headerArea.setBackground(headerPanel.getBackground());
+ − 44 headerPanel.add(headerArea);
+ − 45 headerPanel.setBorder(headerBorder);
+ − 46
+ − 47
+ − 48 // Configuration
+ − 49 JPanel configurationPanel = new JPanel(false);
+ − 50 configurationPanel.setLayout(new GridLayout(1, 0));
+ − 51 configurationButtons = new JRadioButton[configurations.length];
+ − 52 ButtonGroup configurationGroup = new ButtonGroup();
+ − 53 for (int i = 0; i < configurations.length; i++) {
+ − 54 JRadioButton button = new JRadioButton(configurations[i]);
+ − 55 configurationPanel.add(button);
+ − 56 configurationButtons[i] = button;
+ − 57 configurationGroup.add(button);
+ − 58 }
+ − 59 configurationButtons[0].setSelected(true);
+ − 60 TitledBorder configurationBorder = BorderFactory.createTitledBorder("Configuration");
+ − 61 configurationPanel.setBorder(configurationBorder);
+ − 62
+ − 63
+ − 64 // Program chooser panel
+ − 65 JPanel programPanel = new JPanel(false);
+ − 66 programPanel.setLayout(new GridLayout(0, 1));
+ − 67
+ − 68 JLabel programLabel = new JLabel("Choose which programs to install:");
+ − 69 programPanel.add(programLabel);
+ − 70 programChooserButtons = new JCheckBox[programChoosers.length];
+ − 71 for (int i = 0; i < programChoosers.length; i++) {
+ − 72 JCheckBox button = new JCheckBox(programChoosers[i]);
+ − 73 button.setSelected(true);
+ − 74 programPanel.add(button);
+ − 75 programChooserButtons[i] = button;
+ − 76 }
+ − 77 TitledBorder programBorder = BorderFactory.createTitledBorder("Programs");
+ − 78 programPanel.setBorder(programBorder);
+ − 79
+ − 80 // Install directory chooser
+ − 81 JPanel installDirectoryChooserPanel = new JPanel(false);
+ − 82 installDirectoryChooserPanel.setLayout(new GridLayout(1, 0));
+ − 83 JLabel installDirectoryChooserLabel = new JLabel("Choose a directory to install S-MART: ");
+ − 84 installDirectoryChooserTextField = new JTextField();
+ − 85 installDirectoryChooserButton = new JButton("Open...");
+ − 86 installDirectoryChooserButton.addActionListener(this);
+ − 87
+ − 88 installDirectoryChooserPanel.add(installDirectoryChooserLabel);
+ − 89 installDirectoryChooserPanel.add(installDirectoryChooserTextField);
+ − 90 installDirectoryChooserPanel.add(installDirectoryChooserButton);
+ − 91 TitledBorder installDirectoryChooserBorder = BorderFactory.createTitledBorder("Installation directory");
+ − 92 installDirectoryChooserPanel.setBorder(installDirectoryChooserBorder);
+ − 93
+ − 94 // GO!
+ − 95 JPanel goPanel = new JPanel(false);
+ − 96 goButton = new JButton("GO!");
+ − 97 goButton.addActionListener(this);
+ − 98 goButton.setSelected(true);
+ − 99 goPanel.add(goButton);
+ − 100 TitledBorder goBorder = BorderFactory.createTitledBorder("Start install");
+ − 101 goPanel.setBorder(goBorder);
+ − 102
+ − 103 // Log
+ − 104 logArea = new JTextArea(10, 120);
+ − 105 logArea.setFont(new Font("Monospaced", logArea.getFont().getStyle(), logArea.getFont().getSize()));
+ − 106 JScrollPane logScroll = new JScrollPane(logArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ − 107 TitledBorder logBorder = BorderFactory.createTitledBorder("Log");
+ − 108 logScroll.setBorder(logBorder);
+ − 109
+ − 110 GridLayout horizontalLayout = new GridLayout(1, 0);
+ − 111
+ − 112 box.add(headerPanel);
+ − 113 box.add(configurationPanel);
+ − 114 box.add(programPanel);
+ − 115 box.add(installDirectoryChooserPanel);
+ − 116 box.add(goPanel);
+ − 117 box.add(logScroll);
+ − 118
+ − 119 add(box);
+ − 120 }
+ − 121
+ − 122
+ − 123 public void actionPerformed(ActionEvent e) {
+ − 124
+ − 125 // Install directories chooser
+ − 126 if (e.getSource() == goButton) {
+ − 127 boolean[] selectedPrograms = new boolean[programChoosers.length];
+ − 128 for (int i = 0; i < programChoosers.length; i++) {
+ − 129 selectedPrograms[i] = programChooserButtons[i].isSelected();
+ − 130 }
+ − 131 SmartInstallerTask task = new SmartInstallerTask(logArea, selectedPrograms, installDirectoryChooserTextField.getText(), (configurationButtons[0].isSelected())? 0: 1);
+ − 132 task.execute();
+ − 133 }
+ − 134 // Install directories chooser
+ − 135 else if (e.getSource() == installDirectoryChooserButton) {
+ − 136 JFileChooser chooser = new JFileChooser();
+ − 137 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+ − 138 if (chooser.showOpenDialog(mainFrame) == JFileChooser.APPROVE_OPTION) {
+ − 139 installDirectoryChooserTextField.setText(chooser.getSelectedFile().getPath());
+ − 140 }
+ − 141 }
+ − 142 }
+ − 143
+ − 144 private static void createAndShowGUI() {
+ − 145 // Create and set up the window.
+ − 146 JFrame mainFrame = new JFrame("S-Mart Installer");
+ − 147 mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ − 148
+ − 149 //Create and set up the content pane.
+ − 150 JComponent newContentPane = new SmartInstaller();
+ − 151 newContentPane.setOpaque(true);
+ − 152 mainFrame.setContentPane(newContentPane);
+ − 153
+ − 154 // Display the window.
+ − 155 mainFrame.pack();
+ − 156 mainFrame.setVisible(true);
+ − 157 }
+ − 158
+ − 159
+ − 160 public static void main(String[] args) {
+ − 161 javax.swing.SwingUtilities.invokeLater(new Runnable() {
+ − 162 public void run() {
+ − 163 createAndShowGUI();
+ − 164 }
+ − 165 });
+ − 166 }
+ − 167 }