source: trunk/gsdl3/src/java/org/greenstone/server/ServerSettings.java@ 13884

Last change on this file since 13884 was 13884, checked in by shaoqun, 17 years ago

update the port num

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