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

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

Fixed bug on saving settings in GS2.

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