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

Last change on this file since 18558 was 18558, checked in by davidb, 15 years ago

Restructuring of code to support a web server version for Greenstone2 and well as Greenstone3

File size: 10.1 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 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
120 JPanel check_panel = new JPanel();
121 check_panel.setLayout(new FlowLayout(FlowLayout.LEFT));
122 check_panel.add(autoEnter);
123 check_panel.setBackground(bg_color);
124
125 JPanel mid_panel = new JPanel();
126 mid_panel.setLayout(new GridLayout(3,1));
127 mid_panel.add(port_panel);
128 mid_panel.add(check_panel);
129 mid_panel.add(comb_panel);
130 mid_panel.setBackground(bg_color);
131 mid_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
132
133
134 JPanel browser_panel = new JPanel();
135 browser_panel.setLayout(new GridLayout(4,1));
136 default_browser_button = new JRadioButton(BaseServer.dictionary.get("ServerSettings.DefaultBrowser"));
137 other_browser_button = new JRadioButton(BaseServer.dictionary.get("ServerSettings.OtherBrowser"));
138 other_browser_button.addActionListener(new BrowserSelectionListener());
139 default_browser_button.addActionListener(new BrowserSelectionListener());
140
141 ButtonGroup bg = new ButtonGroup();
142 bg.add(default_browser_button);
143 bg.add(other_browser_button);
144 default_browser_button.setBorder(BorderFactory.createEmptyBorder(5,10,5,0));
145 default_browser_button.setBackground(bg_color);
146 other_browser_button.setBorder(BorderFactory.createEmptyBorder(5,10,5,0));
147 other_browser_button.setBackground(bg_color);
148 JPanel browse_program_panel = new JPanel();
149 browse_program_panel.setLayout(new BorderLayout());
150 program_path_field = new JTextField(this.browserPath);
151 browse_button = new JButton(BaseServer.dictionary.get("ServerSettings.Browse"));
152 browse_program_panel.add(program_path_field,BorderLayout.CENTER);
153 browse_program_panel.add(browse_button,BorderLayout.EAST);
154 browse_program_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,0));
155 browse_program_panel.setBackground(bg_color);
156 browser_panel.add(new JLabel(BaseServer.dictionary.get("ServerSettings.ChooseBrowser")));
157 browser_panel.add(default_browser_button);
158 browser_panel.add(other_browser_button);
159 browser_panel.add(browse_program_panel);
160 browser_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
161 browser_panel.setBackground(bg_color);
162 if (useDefaultBrowser){
163 default_browser_button.setSelected(true);
164 program_path_field.setEnabled(false);
165 browse_button.setEnabled(false);
166 }
167 else{
168 other_browser_button.setSelected(true);
169 }
170 browse_button.addActionListener(new BrowseActionListener());
171
172 JPanel down_panel = new JPanel();
173 down_panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
174 down_panel.add(save_button);
175 down_panel.add(exit_button);
176 down_panel.setBackground(bg_color);
177 down_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
178
179 getContentPane().add(mid_panel, BorderLayout.NORTH);
180 getContentPane().add(browser_panel, BorderLayout.CENTER);
181 getContentPane().add(down_panel, BorderLayout.SOUTH);
182 getContentPane().setBackground(bg_color);
183 setVisible(true);
184 }
185
186
187 protected abstract JPanel createServletPanel();
188
189
190 private class BrowseActionListener
191 implements ActionListener {
192
193 public void actionPerformed(ActionEvent ev) {
194 JFileChooser chooser = new JFileChooser();
195 int returnVal = chooser.showOpenDialog(self);
196
197 if(returnVal == JFileChooser.APPROVE_OPTION) {
198 File program_path = chooser.getSelectedFile();
199 program_path_field.setText(program_path.getPath());
200 }
201 }
202
203 }
204
205 private class BrowserSelectionListener
206 implements ActionListener {
207
208 public void actionPerformed(ActionEvent ev) {
209 if (default_browser_button.isSelected()){
210 program_path_field.setEnabled(false);
211 browse_button.setEnabled(false);
212 }
213 else{
214 program_path_field.setEnabled(true);
215 browse_button.setEnabled(true);
216 }
217 }
218
219 }
220
221
222 private class SaveActionListener
223 implements ActionListener {
224
225 public void actionPerformed(ActionEvent ev) {
226 // save everything to build_properties if things have changed
227 boolean has_changed = false;
228 boolean require_restart = false;
229 if (portNum != ((Integer)portNumber_spinner.getValue()).intValue()) {
230 has_changed = true;
231 require_restart = true;
232 server.reconfigRequired();
233 portNum = ((Integer)portNumber_spinner.getValue()).intValue();
234 logger.info("port changed, new port is "+portNumber_spinner.getValue());
235 }
236 if (autoStart != autoEnter.isSelected()) {
237 has_changed = true;
238 }
239 if (!servletDefault.equals(servlet_combobox.getSelectedItem())) {
240 has_changed = true;
241 require_restart = true;
242 }
243 //changed to use other browser
244 if (useDefaultBrowser && other_browser_button.isSelected()){
245 browserPath = program_path_field.getText();
246 has_changed = true;
247 }
248 //the browser path has been changed
249 if ( !useDefaultBrowser && !browserPath.equals(program_path_field.getText())){
250 browserPath = program_path_field.getText();
251 has_changed = true;
252 }
253
254 //changed to use the default browser
255 if ( default_browser_button.isSelected() && !useDefaultBrowser){
256 browserPath = "";
257 has_changed = true;
258 }
259
260
261 if (has_changed) {
262 ArrayList oldFileLines = null;
263 ArrayList newFileLines = null;
264
265 ScriptReadWrite scriptReadWrite = new ScriptReadWrite();
266 oldFileLines = scriptReadWrite.readInFile(BaseServer.build_properties_file);
267
268 newFileLines = scriptReadWrite.queryReplace(oldFileLines, BaseServer.Property.WEB_PORT, portNum+"");
269
270 String newAutoEnter = (new Boolean(autoEnter.isSelected())).toString();
271 newFileLines = scriptReadWrite.queryReplace(newFileLines, BaseServer.Property.AUTOSTART, newAutoEnter);
272
273 String newServletDef = (String) servlet_combobox.getSelectedItem();
274 newFileLines = scriptReadWrite.queryReplace(newFileLines,BaseServer.Property.DEFAULT_SERVLET, (String) url_mappings.get(newServletDef));
275
276 String osName = System.getProperty("os.name");
277 if (osName.startsWith("Windows")){
278 browserPath = browserPath.replaceAll("\\\\","/");
279 }
280 newFileLines = scriptReadWrite.queryReplace(newFileLines,BaseServer.Property.BROWSER_PATH, browserPath);
281
282 scriptReadWrite.writeOutFile(BaseServer.build_properties_file,
283 newFileLines);
284 server.reloadBuildProperties();
285 if (require_restart){
286 JOptionPane.showMessageDialog(null,server.dictionary.get("ServerSetting.SettingChanged"),"Info", JOptionPane.INFORMATION_MESSAGE);
287 }
288 }
289
290 self.dispose();
291 }
292 }
293
294}
Note: See TracBrowser for help on using the repository browser.