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

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

Better way to ensure that the port is not arbitrarily modified. This bypasses the need to turn on the Do Not Modify Port server setting option by default, which then bypasses the need to make 8282 the default port for GS2 (which would have been necessary since the old GS2 default port of 80 would not have coped well with the Do Not Modify Port switch turned on by default).

File size: 10.5 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).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 server.reloadConfigProperties(port_has_changed);
300 server.reload(); // work out the URL again in case it has changed
301 if (require_restart){
302 JOptionPane.showMessageDialog(null,server.dictionary.get("ServerSettings.SettingChanged"),"Info", JOptionPane.INFORMATION_MESSAGE);
303 if(autoStart) {
304 server.autoStart();
305 server.getServerControl().updateControl();
306 }
307 }
308 }
309
310 self.dispose();
311 }
312 }
313
314}
Note: See TracBrowser for help on using the repository browser.