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

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

Fixed a bug that Diego Spano found: in the Settings dialog, the browser path for the Other Browser option was not getting saved previously.

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