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

Last change on this file since 18969 was 18969, checked in by ak19, 15 years ago

Updated several files so that the Server2 code in server.jar interacts with GLI code so that the local GS2 server for Linux works the same way as the GS2 Local Library Server on windows

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