comparison SMART/Java/Installer/SmartInstaller.java @ 31:0ab839023fe4

Uploaded
author m-zytnicki
date Tue, 30 Apr 2013 14:33:21 -0400
parents 769e306b7933
children
comparison
equal deleted inserted replaced
30:5677346472b5 31:0ab839023fe4
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 }