package org.greenstone.server; import java.awt.*; import java.awt.event.*; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import javax.swing.*; import org.w3c.dom.*; import org.apache.log4j.*; public abstract class BaseServerSettings extends JDialog { static Logger logger = Logger.getLogger(BaseServerSettings.class.getName()); static final int DEFPORT = 8080; JCheckBox autoEnter; JComboBox servlet_combobox; protected JSpinner portNumber_spinner = null; protected JTextField program_path_field = null; protected JButton browse_button = null; protected JRadioButton default_browser_button = null ; protected JRadioButton other_browser_button = null; protected Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); static final private Dimension SIZE = new Dimension(300, 350); static final Color bg_color = Color.white; protected int portNum = DEFPORT; protected boolean autoStart = false; protected String servletDefault = null; protected String browserPath = ""; protected boolean useDefaultBrowser = true; protected HashMap url_mappings = null; protected JDialog self; protected BaseServer server; public BaseServerSettings(BaseServer server) { super((Frame)null, "", true); this.self = this; this.server = server; try { this.portNum = Integer.parseInt(server.build_properties.getProperty(BaseServer.Property.WEB_PORT)); } catch(Exception e){ logger.error(e); } this.browserPath = server.build_properties.getProperty(BaseServer.Property.BROWSER_PATH); if (this.browserPath == null || this.browserPath.equals("")){ useDefaultBrowser = true; this.browserPath = ""; } else{ useDefaultBrowser = false; } String auto_start_str = server.build_properties.getProperty(BaseServer.Property.AUTOSTART); if ((auto_start_str.trim()).equals("true")) { this.autoStart = true; } else { this.autoStart = false; } this.servletDefault = server.build_properties.getProperty(BaseServer.Property.DEFAULT_SERVLET).replaceAll("/",""); setSize(SIZE); setTitle(server.dictionary.get("ServerSettings.Title")); setLocation((screen.width - SIZE.width) / 2, (screen.height - SIZE.height) / 2); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); JLabel port_label = new JLabel(BaseServer.dictionary.get(BaseServer.Property.SERVER_SETTINGS+".Port")); portNumber_spinner = new JSpinner(new SpinnerNumberModel(portNum,1,65535,1)); portNumber_spinner.setEditor(new JSpinner.NumberEditor(portNumber_spinner, "#####")); autoEnter = new JCheckBox(server.dictionary.get("ServerSettings.Auto_Start")); if (autoStart) { autoEnter.setSelected(true); } else { autoEnter.setSelected(false); } autoEnter.setBackground(bg_color); JButton save_button = new JButton(BaseServer.dictionary.get("ServerSettings.OK")); save_button.addActionListener(new SaveActionListener()); JButton exit_button = new JButton(BaseServer.dictionary.get("ServerSettings.Cancel")); exit_button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { self.dispose(); } }); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { self.dispose(); } }); JPanel port_panel = new JPanel(); port_panel.setLayout(new FlowLayout(FlowLayout.LEFT)); port_panel.add(port_label); port_panel.add(portNumber_spinner); port_panel.setBackground(bg_color); JPanel comb_panel = createServletPanel(); comb_panel.setBackground(bg_color); JPanel check_panel = new JPanel(); check_panel.setLayout(new FlowLayout(FlowLayout.LEFT)); check_panel.add(autoEnter); check_panel.setBackground(bg_color); JPanel mid_panel = new JPanel(); mid_panel.setLayout(new GridLayout(3,1)); mid_panel.add(port_panel); mid_panel.add(check_panel); mid_panel.add(comb_panel); mid_panel.setBackground(bg_color); mid_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10)); JPanel browser_panel = new JPanel(); browser_panel.setLayout(new GridLayout(4,1)); default_browser_button = new JRadioButton(BaseServer.dictionary.get("ServerSettings.DefaultBrowser")); other_browser_button = new JRadioButton(BaseServer.dictionary.get("ServerSettings.OtherBrowser")); other_browser_button.addActionListener(new BrowserSelectionListener()); default_browser_button.addActionListener(new BrowserSelectionListener()); ButtonGroup bg = new ButtonGroup(); bg.add(default_browser_button); bg.add(other_browser_button); default_browser_button.setBorder(BorderFactory.createEmptyBorder(5,10,5,0)); default_browser_button.setBackground(bg_color); other_browser_button.setBorder(BorderFactory.createEmptyBorder(5,10,5,0)); other_browser_button.setBackground(bg_color); JPanel browse_program_panel = new JPanel(); browse_program_panel.setLayout(new BorderLayout()); program_path_field = new JTextField(this.browserPath); browse_button = new JButton(BaseServer.dictionary.get("ServerSettings.Browse")); browse_program_panel.add(program_path_field,BorderLayout.CENTER); browse_program_panel.add(browse_button,BorderLayout.EAST); browse_program_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,0)); browse_program_panel.setBackground(bg_color); browser_panel.add(new JLabel(BaseServer.dictionary.get("ServerSettings.ChooseBrowser"))); browser_panel.add(default_browser_button); browser_panel.add(other_browser_button); browser_panel.add(browse_program_panel); browser_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10)); browser_panel.setBackground(bg_color); if (useDefaultBrowser){ default_browser_button.setSelected(true); program_path_field.setEnabled(false); browse_button.setEnabled(false); } else{ other_browser_button.setSelected(true); } browse_button.addActionListener(new BrowseActionListener()); JPanel down_panel = new JPanel(); down_panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); down_panel.add(save_button); down_panel.add(exit_button); down_panel.setBackground(bg_color); down_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10)); getContentPane().add(mid_panel, BorderLayout.NORTH); getContentPane().add(browser_panel, BorderLayout.CENTER); getContentPane().add(down_panel, BorderLayout.SOUTH); getContentPane().setBackground(bg_color); setVisible(true); } protected abstract JPanel createServletPanel(); private class BrowseActionListener implements ActionListener { public void actionPerformed(ActionEvent ev) { JFileChooser chooser = new JFileChooser(); int returnVal = chooser.showOpenDialog(self); if(returnVal == JFileChooser.APPROVE_OPTION) { File program_path = chooser.getSelectedFile(); program_path_field.setText(program_path.getPath()); } } } private class BrowserSelectionListener implements ActionListener { public void actionPerformed(ActionEvent ev) { if (default_browser_button.isSelected()){ program_path_field.setEnabled(false); browse_button.setEnabled(false); } else{ program_path_field.setEnabled(true); browse_button.setEnabled(true); } } } private class SaveActionListener implements ActionListener { public void actionPerformed(ActionEvent ev) { // save everything to build_properties if things have changed boolean has_changed = false; boolean require_restart = false; if (portNum != ((Integer)portNumber_spinner.getValue()).intValue()) { has_changed = true; require_restart = true; server.reconfigRequired(); portNum = ((Integer)portNumber_spinner.getValue()).intValue(); logger.info("port changed, new port is "+portNumber_spinner.getValue()); } if (autoStart != autoEnter.isSelected()) { has_changed = true; } if (!servletDefault.equals(servlet_combobox.getSelectedItem())) { has_changed = true; require_restart = true; } //changed to use other browser if (useDefaultBrowser && other_browser_button.isSelected()){ browserPath = program_path_field.getText(); has_changed = true; } //the browser path has been changed if ( !useDefaultBrowser && !browserPath.equals(program_path_field.getText())){ browserPath = program_path_field.getText(); has_changed = true; } //changed to use the default browser if ( default_browser_button.isSelected() && !useDefaultBrowser){ browserPath = ""; has_changed = true; } if (has_changed) { ArrayList oldFileLines = null; ArrayList newFileLines = null; ScriptReadWrite scriptReadWrite = new ScriptReadWrite(); oldFileLines = scriptReadWrite.readInFile(BaseServer.build_properties_file); newFileLines = scriptReadWrite.queryReplace(oldFileLines, BaseServer.Property.WEB_PORT, portNum+""); String newAutoEnter = (new Boolean(autoEnter.isSelected())).toString(); newFileLines = scriptReadWrite.queryReplace(newFileLines, BaseServer.Property.AUTOSTART, newAutoEnter); String newServletDef = (String) servlet_combobox.getSelectedItem(); newFileLines = scriptReadWrite.queryReplace(newFileLines,BaseServer.Property.DEFAULT_SERVLET, (String) url_mappings.get(newServletDef)); String osName = System.getProperty("os.name"); if (osName.startsWith("Windows")){ browserPath = browserPath.replaceAll("\\\\","/"); } newFileLines = scriptReadWrite.queryReplace(newFileLines,BaseServer.Property.BROWSER_PATH, browserPath); scriptReadWrite.writeOutFile(BaseServer.build_properties_file, newFileLines); server.reloadBuildProperties(); if (require_restart){ JOptionPane.showMessageDialog(null,server.dictionary.get("ServerSetting.SettingChanged"),"Info", JOptionPane.INFORMATION_MESSAGE); } } self.dispose(); } } }