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

Last change on this file since 22085 was 22085, checked in by sjm84, 14 years ago

Created a util package from classes that could be useful outside of their original packages

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