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

Last change on this file since 24490 was 24490, checked in by ak19, 13 years ago

Bugfix to recent commit (r24479).

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