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

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

Added a WindowListener to this Settings dialog for the closing event.

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