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

Last change on this file since 29845 was 29845, checked in by ak19, 9 years ago

Modified gs3-server dialog to have an Allow External Connections checkbox to match with GS2. Affects org/greenstone/server code and server.properties file, greenstone.xml.in of tomcat, build.xml and build.properties

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