source: greenstone3/trunk/src/java/org/greenstone/server/BaseServerSettings.java@ 20866

Last change on this file since 20866 was 20866, checked in by ak19, 14 years ago

Opening and then closing the GSI's Settings dialog in GS3, kept resizing the Main GSI dialog. Also, the Settings dialog was too big.

File size: 10.0 KB
Line 
1package org.greenstone.server;
2
3import java.awt.*;
4import java.awt.event.*;
5import java.io.File;
6import java.util.ArrayList;
7import java.util.HashMap;
8import javax.swing.*;
9
10import org.w3c.dom.*;
11
12import org.apache.log4j.*;
13
14public abstract class BaseServerSettings extends JDialog
15{
16 static Logger logger = Logger.getLogger(BaseServerSettings.class.getName());
17 static final int DEFPORT = 8080;
18
19 JCheckBox autoEnter;
20
21 protected JSpinner portNumber_spinner = null;
22 protected JTextField program_path_field = null;
23 protected JButton browse_button = null;
24 protected JRadioButton default_browser_button = null ;
25 protected JRadioButton other_browser_button = null;
26 protected Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
27
28 static final Color bg_color = Color.white;
29
30 protected int portNum = DEFPORT;
31 protected boolean autoStart = false;
32 protected String browserPath = "";
33 protected boolean useDefaultBrowser = true;
34
35 protected JDialog self;
36 protected BaseServer server;
37
38 public BaseServerSettings(BaseServer server)
39 {
40 super(server.getServerControl(), "", true);
41 this.self = this;
42 this.server = server;
43
44 try {
45 this.portNum = Integer.parseInt(server.config_properties.getProperty(BaseServer.Property.WEB_PORT));
46 }
47 catch(Exception e){
48 logger.error(e);
49 }
50
51 this.browserPath = server.config_properties.getProperty(BaseServer.Property.BROWSER_PATH);
52
53 if (this.browserPath == null || this.browserPath.equals("")){
54 useDefaultBrowser = true;
55 this.browserPath = "";
56 }
57 else{
58 useDefaultBrowser = false;
59 }
60
61 String auto_start_str = server.config_properties.getProperty(BaseServer.Property.AUTOSTART).trim();
62 if (auto_start_str.equals("true") || auto_start_str.equals("1")) {
63 this.autoStart = true;
64 } else {
65 this.autoStart = false;
66 }
67
68 setTitle(server.dictionary.get("ServerSettings.Title"));
69 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
70
71 JLabel port_label = new JLabel(BaseServer.dictionary.get(BaseServer.Property.SERVER_SETTINGS+".Port"));
72
73 portNumber_spinner = new JSpinner(new SpinnerNumberModel(portNum,1,65535,1));
74 portNumber_spinner.setEditor(new JSpinner.NumberEditor(portNumber_spinner, "#####"));
75
76 autoEnter = new JCheckBox(server.dictionary.get("ServerSettings.Auto_Start"));
77
78 if (autoStart) {
79 autoEnter.setSelected(true);
80 } else {
81 autoEnter.setSelected(false);
82 }
83 autoEnter.setBackground(bg_color);
84
85
86 JButton save_button = new JButton(BaseServer.dictionary.get("ServerSettings.OK"));
87 save_button.addActionListener(new SaveActionListener());
88
89 JButton exit_button = new JButton(BaseServer.dictionary.get("ServerSettings.Cancel"));
90 exit_button.addActionListener(new ActionListener() {
91 public void actionPerformed(ActionEvent ev) {
92 self.dispose();
93 }
94 });
95
96 addWindowListener(new WindowAdapter() {
97 public void windowClosing(WindowEvent we) {
98 self.dispose();
99 }
100 });
101
102 JPanel port_panel = new JPanel();
103 port_panel.setLayout(new FlowLayout(FlowLayout.LEFT));
104 port_panel.add(port_label);
105 port_panel.add(portNumber_spinner);
106 port_panel.setBackground(bg_color);
107
108 JPanel top_panel = new JPanel(new GridLayout(2,1));
109 top_panel.add(port_panel);
110 top_panel.add(autoEnter);
111
112 JPanel comb_panel = createServletPanel();
113 comb_panel.setBackground(bg_color);
114
115 JPanel mid_panel = new JPanel();
116 mid_panel.setLayout(new BorderLayout());
117 mid_panel.add(top_panel, BorderLayout.NORTH);
118 mid_panel.add(comb_panel, BorderLayout.CENTER);
119 mid_panel.setBackground(bg_color);
120 mid_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
121
122
123 JPanel browser_panel = new JPanel();
124 browser_panel.setLayout(new GridLayout(4,1));
125 default_browser_button = new JRadioButton(BaseServer.dictionary.get("ServerSettings.DefaultBrowser"));
126 other_browser_button = new JRadioButton(BaseServer.dictionary.get("ServerSettings.OtherBrowser"));
127 other_browser_button.addActionListener(new BrowserSelectionListener());
128 default_browser_button.addActionListener(new BrowserSelectionListener());
129
130 ButtonGroup bg = new ButtonGroup();
131 bg.add(default_browser_button);
132 bg.add(other_browser_button);
133 default_browser_button.setBorder(BorderFactory.createEmptyBorder(5,10,5,0));
134 default_browser_button.setBackground(bg_color);
135 other_browser_button.setBorder(BorderFactory.createEmptyBorder(5,10,5,0));
136 other_browser_button.setBackground(bg_color);
137 JPanel browse_program_panel = new JPanel();
138 browse_program_panel.setLayout(new BorderLayout());
139 program_path_field = new JTextField(this.browserPath);
140 browse_button = new JButton(BaseServer.dictionary.get("ServerSettings.Browse"));
141 browse_program_panel.add(program_path_field,BorderLayout.CENTER);
142 browse_program_panel.add(browse_button,BorderLayout.EAST);
143 browse_program_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,0));
144 browse_program_panel.setBackground(bg_color);
145 browser_panel.add(new JLabel(BaseServer.dictionary.get("ServerSettings.ChooseBrowser")));
146 browser_panel.add(default_browser_button);
147 browser_panel.add(other_browser_button);
148 browser_panel.add(browse_program_panel);
149 browser_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
150 browser_panel.setBackground(bg_color);
151 if (useDefaultBrowser){
152 default_browser_button.setSelected(true);
153 program_path_field.setEnabled(false);
154 browse_button.setEnabled(false);
155 }
156 else{
157 other_browser_button.setSelected(true);
158 }
159 browse_button.addActionListener(new BrowseActionListener());
160
161 JPanel down_panel = new JPanel();
162 down_panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
163 down_panel.add(save_button);
164 down_panel.add(exit_button);
165 down_panel.setBackground(bg_color);
166 down_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
167
168 getContentPane().add(mid_panel, BorderLayout.NORTH);
169 getContentPane().add(browser_panel, BorderLayout.CENTER);
170 getContentPane().add(down_panel, BorderLayout.SOUTH);
171 getContentPane().setBackground(bg_color);
172
173 pack();
174 setLocation((screen.width - getWidth()) / 2,
175 (screen.height - getHeight()) / 2);
176 setVisible(true);
177 }
178
179
180 protected boolean[] onSave() {
181 boolean[] returnValues = { false, false }; // hasChanged, requireRestart
182 return returnValues;
183 }
184 protected void save(ScriptReadWrite scriptReadWrite, ArrayList newFileLines) {}
185 protected abstract JPanel createServletPanel();
186
187
188 private class BrowseActionListener
189 implements ActionListener {
190
191 public void actionPerformed(ActionEvent ev) {
192 JFileChooser chooser = new JFileChooser();
193 int returnVal = chooser.showOpenDialog(self);
194
195 if(returnVal == JFileChooser.APPROVE_OPTION) {
196 File program_path = chooser.getSelectedFile();
197 program_path_field.setText(program_path.getPath());
198 }
199 }
200
201 }
202
203 private class BrowserSelectionListener
204 implements ActionListener {
205
206 public void actionPerformed(ActionEvent ev) {
207 if (default_browser_button.isSelected()){
208 program_path_field.setEnabled(false);
209 browse_button.setEnabled(false);
210 }
211 else{
212 program_path_field.setEnabled(true);
213 browse_button.setEnabled(true);
214 }
215 }
216
217 }
218
219
220 private class SaveActionListener
221 implements ActionListener {
222
223 public void actionPerformed(ActionEvent ev) {
224 // save everything to config_properties if things have changed
225 boolean has_changed = false;
226 boolean require_restart = false;
227
228 if (portNum != ((Integer)portNumber_spinner.getValue()).intValue()) {
229 has_changed = true;
230 require_restart = true;
231 server.reconfigRequired();
232 portNum = ((Integer)portNumber_spinner.getValue()).intValue();
233 logger.info("port changed, new port is "+portNumber_spinner.getValue());
234 }
235 if (autoStart != autoEnter.isSelected()) {
236 has_changed = true;
237 }
238
239 // call subclass' onSave method, which may indicate (further) changes,
240 // and which may or may not require a restart
241 boolean[] returnValues = onSave();
242 has_changed = has_changed || returnValues[0];
243 require_restart = require_restart || returnValues[1];
244
245 //changed to use other browser
246 if (useDefaultBrowser && other_browser_button.isSelected()){
247 browserPath = program_path_field.getText();
248 has_changed = true;
249 }
250 //the browser path has been changed
251 if (!useDefaultBrowser && !browserPath.equals(program_path_field.getText())){
252 browserPath = program_path_field.getText();
253 has_changed = true;
254 }
255
256 //changed to use the default browser
257 if (default_browser_button.isSelected() && !useDefaultBrowser){
258 browserPath = "";
259 has_changed = true;
260 }
261
262
263 if (has_changed) {
264 ArrayList oldFileLines = null;
265 ArrayList newFileLines = null;
266
267 ScriptReadWrite scriptReadWrite = new ScriptReadWrite();
268 oldFileLines = scriptReadWrite.readInFile(BaseServer.config_properties_file);
269
270 newFileLines = scriptReadWrite.queryReplace(oldFileLines, BaseServer.Property.WEB_PORT, portNum+"");
271
272 // call the subclass' save() method to save custom elements
273 save(scriptReadWrite, newFileLines);
274
275 String osName = System.getProperty("os.name");
276 if (osName.startsWith("Windows")){
277 browserPath = browserPath.replaceAll("\\\\","/");
278 }
279 newFileLines = scriptReadWrite.queryReplace(newFileLines,BaseServer.Property.BROWSER_PATH, browserPath);
280
281 scriptReadWrite.writeOutFile(BaseServer.config_properties_file,
282 newFileLines);
283 server.reloadConfigProperties();
284 server.reload(); // work out the URL again in case it has changed
285 if (require_restart){
286 JOptionPane.showMessageDialog(null,server.dictionary.get("ServerSettings.SettingChanged"),"Info", JOptionPane.INFORMATION_MESSAGE);
287 if(autoStart) {
288 server.autoStart();
289 server.getServerControl().updateControl();
290 }
291 }
292 }
293
294 self.dispose();
295 }
296 }
297
298}
Note: See TracBrowser for help on using the repository browser.