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

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

Changes to Server.jar files and affected files to add address_resolution options so that the GSI dialog for GS2 looks and behaves more like server.exe.

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.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, 450);
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 top_panel = new JPanel(new GridLayout(2,1));
114 top_panel.add(port_panel);
115 top_panel.add(autoEnter);
116
117 JPanel comb_panel = createServletPanel();
118 comb_panel.setBackground(bg_color);
119
120 JPanel mid_panel = new JPanel();
121 mid_panel.setLayout(new BorderLayout());
122 mid_panel.add(top_panel, BorderLayout.NORTH);
123 mid_panel.add(comb_panel, BorderLayout.CENTER);
124 mid_panel.setBackground(bg_color);
125 mid_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
126
127
128 JPanel browser_panel = new JPanel();
129 browser_panel.setLayout(new GridLayout(4,1));
130 default_browser_button = new JRadioButton(BaseServer.dictionary.get("ServerSettings.DefaultBrowser"));
131 other_browser_button = new JRadioButton(BaseServer.dictionary.get("ServerSettings.OtherBrowser"));
132 other_browser_button.addActionListener(new BrowserSelectionListener());
133 default_browser_button.addActionListener(new BrowserSelectionListener());
134
135 ButtonGroup bg = new ButtonGroup();
136 bg.add(default_browser_button);
137 bg.add(other_browser_button);
138 default_browser_button.setBorder(BorderFactory.createEmptyBorder(5,10,5,0));
139 default_browser_button.setBackground(bg_color);
140 other_browser_button.setBorder(BorderFactory.createEmptyBorder(5,10,5,0));
141 other_browser_button.setBackground(bg_color);
142 JPanel browse_program_panel = new JPanel();
143 browse_program_panel.setLayout(new BorderLayout());
144 program_path_field = new JTextField(this.browserPath);
145 browse_button = new JButton(BaseServer.dictionary.get("ServerSettings.Browse"));
146 browse_program_panel.add(program_path_field,BorderLayout.CENTER);
147 browse_program_panel.add(browse_button,BorderLayout.EAST);
148 browse_program_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,0));
149 browse_program_panel.setBackground(bg_color);
150 browser_panel.add(new JLabel(BaseServer.dictionary.get("ServerSettings.ChooseBrowser")));
151 browser_panel.add(default_browser_button);
152 browser_panel.add(other_browser_button);
153 browser_panel.add(browse_program_panel);
154 browser_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
155 browser_panel.setBackground(bg_color);
156 if (useDefaultBrowser){
157 default_browser_button.setSelected(true);
158 program_path_field.setEnabled(false);
159 browse_button.setEnabled(false);
160 }
161 else{
162 other_browser_button.setSelected(true);
163 }
164 browse_button.addActionListener(new BrowseActionListener());
165
166 JPanel down_panel = new JPanel();
167 down_panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
168 down_panel.add(save_button);
169 down_panel.add(exit_button);
170 down_panel.setBackground(bg_color);
171 down_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
172
173 getContentPane().add(mid_panel, BorderLayout.NORTH);
174 getContentPane().add(browser_panel, BorderLayout.CENTER);
175 getContentPane().add(down_panel, BorderLayout.SOUTH);
176 getContentPane().setBackground(bg_color);
177 setVisible(true);
178 }
179
180
181 protected boolean[] onSave() {
182 boolean[] returnValues = { false, false }; // hasChanged, requireRestart
183 return returnValues;
184 }
185 protected void save(ScriptReadWrite scriptReadWrite, ArrayList newFileLines) {}
186 protected abstract JPanel createServletPanel();
187
188
189 private class BrowseActionListener
190 implements ActionListener {
191
192 public void actionPerformed(ActionEvent ev) {
193 JFileChooser chooser = new JFileChooser();
194 int returnVal = chooser.showOpenDialog(self);
195
196 if(returnVal == JFileChooser.APPROVE_OPTION) {
197 File program_path = chooser.getSelectedFile();
198 program_path_field.setText(program_path.getPath());
199 }
200 }
201
202 }
203
204 private class BrowserSelectionListener
205 implements ActionListener {
206
207 public void actionPerformed(ActionEvent ev) {
208 if (default_browser_button.isSelected()){
209 program_path_field.setEnabled(false);
210 browse_button.setEnabled(false);
211 }
212 else{
213 program_path_field.setEnabled(true);
214 browse_button.setEnabled(true);
215 }
216 }
217
218 }
219
220
221 private class SaveActionListener
222 implements ActionListener {
223
224 public void actionPerformed(ActionEvent ev) {
225 // save everything to config_properties if things have changed
226 boolean has_changed = false;
227 boolean require_restart = false;
228
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
240 // call subclass' onSave method, which may indicate (further) changes,
241 // and which may or may not require a restart
242 boolean[] returnValues = onSave();
243 has_changed = has_changed || returnValues[0];
244 require_restart = require_restart || returnValues[1];
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.config_properties_file);
270
271 newFileLines = scriptReadWrite.queryReplace(oldFileLines, BaseServer.Property.WEB_PORT, portNum+"");
272
273 // call the subclass' save() method to save custom elements
274 save(scriptReadWrite, newFileLines);
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.config_properties_file,
283 newFileLines);
284 server.reloadConfigProperties();
285 server.reload(); // work out the URL again in case it has changed
286 if (require_restart){
287 JOptionPane.showMessageDialog(null,server.dictionary.get("ServerSettings.SettingChanged"),"Info", JOptionPane.INFORMATION_MESSAGE);
288 if(autoStart) {
289 server.autoStart();
290 server.getServerControl().updateControl();
291 }
292 }
293 }
294
295 self.dispose();
296 }
297 }
298
299}
Note: See TracBrowser for help on using the repository browser.