Changeset 13561 for trunk/gsdl3/src/java/org/greenstone
- Timestamp:
- 2007-01-11T13:16:38+13:00 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl3/src/java/org/greenstone/server/ServerControl.java
r13229 r13561 10 10 import org.greenstone.gsdl3.util.GlobalProperties; 11 11 12 import org.apache.log4j.*; 12 13 /** 13 14 * This class is to start or restart the library server … … 16 17 public class ServerControl extends JFrame { 17 18 19 static Logger logger = Logger.getLogger(org.greenstone.server.ServerControl.class.getName()); 20 18 21 /** The dimension of the frame */ 19 22 static final private Dimension FRAME_SIZE = new Dimension(350, 250); 20 23 21 /** Ant command for managing Tomcat */ 22 static final private String START_CMD = "start"; 23 static final private String RESTART_CMD = "restart"; 24 static final private String CONFIGURE_CMD = "configure"; 25 static final private String STOP_CMD = "stop"; 26 27 /** images for the panel */ 28 static final private String ICON_IMG = "gatherer_small.gif"; 29 static final private String LOGO_IMG = "logogreenstone.gif"; 30 static final private String CHALK_IMG = "chalk.gif"; 31 32 private boolean configure_required = false; 33 private boolean tomcat_running = false; 34 24 Color bg_color = Color.white; 25 35 26 /** some components we need to refer to later */ 36 private JPanel mid_panel; 37 private JLabel process_label; 38 private JTextArea info_label; 27 private JLabel info_label; 39 28 private JButton enter_button; 40 41 public ServerControl() { 29 private JMenu fMenu; 30 private Server server; 31 private JFrame thisframe; 32 33 public ServerControl(Server server) { 42 34 super(Server.dictionary.get("ServerControl.Frame_Title")); 35 36 this.server = server; 37 thisframe = this; 38 43 39 setSize(FRAME_SIZE); 44 setIconImage(Toolkit.getDefaultToolkit().getImage(Server.images_path + ICON_IMG));45 40 setDefaultCloseOperation(EXIT_ON_CLOSE); 46 41 Dimension screen_size = Toolkit.getDefaultToolkit().getScreenSize(); … … 48 43 (screen_size.height - FRAME_SIZE.height) / 2); 49 44 setBackground(Color.white); 50 51 // do we automatically start the server/browser on launching? 52 String auto_start_str = Server.build_properties.getProperty(StaticStrings.AUTOSTART_PROPERTY); 53 boolean auto_start = false; 54 if (auto_start_str!= null && auto_start_str.equals("true")) { 55 auto_start = true; 56 } 57 addWindowListener(new MyWindowAdapter()); 58 59 JPanel content_panel = (JPanel) getContentPane(); 60 JPanel title_panel = new JPanel(); 61 mid_panel = new JPanel(); 62 JPanel button_panel = new JPanel(); 63 64 JLabel title_label = new JLabel(Server.dictionary.get("ServerControl.Title"), JLabel.CENTER); 65 title_label.setFont(new Font("Dialog", Font.BOLD, 18)); 66 67 JLabel version_label = new JLabel(Server.dictionary.get("ServerControl.Version", new String [] {GlobalProperties.getProperty(StaticStrings.GSDL3_VERSION_PROPERTY)}), JLabel.CENTER); 45 addWindowListener(new MyAdapter()); 46 47 JPanel title_panel = new JPanel(); 48 title_panel.setLayout(new BorderLayout()); 49 50 JLabel title_label = new JLabel(); 51 String title = Server.dictionary.get("ServerControl.Title"); 52 title_label.setText(stringToHTML(title)); 53 title_label.setOpaque(false); 54 title_label.setHorizontalAlignment(SwingConstants.CENTER); 55 title_label.setFont(new Font("SansSerif",Font.PLAIN,18)); 56 57 58 JLabel version_label = new JLabel(); 59 String version = Server.dictionary.get("ServerControl.Version", new String [] {GlobalProperties.getProperty(StaticStrings.GSDL3_VERSION_PROPERTY)}).toLowerCase(); 60 61 version_label.setText(stringToHTML(version)); 62 version_label.setOpaque(false); 63 version_label.setHorizontalAlignment(SwingConstants.CENTER); 64 version_label.setFont(new Font("SansSerif",Font.PLAIN,14)); 65 66 title_panel.add(title_label,BorderLayout.CENTER); 67 title_panel.add(version_label,BorderLayout.SOUTH); 68 title_panel.setBackground(bg_color); 69 title_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10)); 70 71 info_label = new JLabel(); 72 info_label.setOpaque(false); 73 info_label.setHorizontalAlignment(SwingConstants.LEFT); 74 info_label.setVerticalAlignment(SwingConstants.CENTER); 75 info_label.setFont(new Font("SansSerif",Font.PLAIN,14)); 76 info_label.setBorder(BorderFactory.createEmptyBorder(5,10,5,10)); 68 77 69 title_panel.setBorder(BorderFactory.createEmptyBorder(20, 0, 0, 0)); 70 title_panel.setLayout(new BorderLayout()); 71 title_panel.add(title_label, BorderLayout.NORTH); 72 title_panel.add(version_label, BorderLayout.CENTER); 73 title_panel.setBackground(Color.white); 74 75 process_label = new JLabel(Server.dictionary.get("ServerControl.Starting"), JLabel.CENTER); 76 info_label = new JTextArea(); 77 info_label.setEditable(false); 78 info_label.setLineWrap(true); 79 info_label.setWrapStyleWord(true); 80 mid_panel.setBorder(BorderFactory.createEmptyBorder(20, 0, 0, 0)); 81 mid_panel.setLayout(new BorderLayout()); 82 mid_panel.setBackground(Color.white); 83 84 if (auto_start) { 85 // starting automatically, just show starting.... and set up the 86 // info and button to restart - will be added by windowListener 87 88 mid_panel.add(process_label, BorderLayout.CENTER); 89 enter_button = new JButton(Server.dictionary.get("ServerControl.Restart")); 90 enter_button.setVisible(false); 91 info_label.setText(Server.dictionary.get("ServerControl.Help_Restart")); 92 } else { 93 info_label.setText(Server.dictionary.get("ServerControl.Help_Start")); 94 mid_panel.add(info_label, BorderLayout.CENTER); 95 enter_button = new JButton(Server.dictionary.get("ServerControl.Start")); 96 enter_button.setVisible(true); 97 } 78 JPanel button_panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); 79 enter_button = new JButton(); 80 enter_button.setEnabled(false); 98 81 enter_button.addActionListener(new EnterButtonListener()); 99 100 ImageIcon logo_icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage(Server.images_path + LOGO_IMG)); 101 button_panel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 10)); 102 button_panel.add(enter_button); 103 button_panel.add(new JLabel(logo_icon)); 104 button_panel.setBackground(Color.white); 105 106 ImageIcon chalk_icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage(Server.images_path + CHALK_IMG)); 107 content_panel.setBorder(BorderFactory.createMatteBorder(0, 40, 0, 0, 108 chalk_icon)); 109 content_panel.setLayout(new GridLayout(3, 1)); 110 content_panel.add(title_panel); 111 content_panel.add(mid_panel); 112 content_panel.add(button_panel); 113 content_panel.setBackground(Color.white); 114 115 setJMenuBar(createMenu()); 82 enter_button.setText(Server.dictionary.get("ServerControl.EnterLibrary")); 83 button_panel.add(enter_button); 84 button_panel.setBackground(bg_color); 85 button_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10)); 86 87 getContentPane().setLayout(new BorderLayout()); 88 getContentPane().add(title_panel,BorderLayout.NORTH); 89 getContentPane().add(info_label,BorderLayout.CENTER); 90 getContentPane().add(button_panel,BorderLayout.SOUTH); 91 getContentPane().setBackground(bg_color); 92 setJMenuBar(createMenu()); 116 93 setVisible(true); 117 94 } … … 119 96 protected JMenuBar createMenu() { 120 97 JMenuBar menuBar = new JMenuBar(); 121 JMenufMenu = new JMenu(Server.dictionary.get("ServerControl.Menu.File"));98 fMenu = new JMenu(Server.dictionary.get("ServerControl.Menu.File")); 122 99 JMenuItem iConf = new JMenuItem(Server.dictionary.get("ServerControl.Menu.Settings")); 123 100 iConf.setBackground(Color.white); 124 101 iConf.addActionListener(new ActionListener() { 125 102 public void actionPerformed(ActionEvent ae) { 126 ServerSettings serverSetting = new ServerSettings(); 127 configure_required = serverSetting.isConfigureRequired(); 103 ServerSettings serverSetting = new ServerSettings(server); 128 104 } 129 105 }); 130 106 131 107 JMenuItem iExit = new JMenuItem(Server.dictionary.get("ServerControl.Menu.Exit")); 132 108 iExit.setBackground(Color.white); 133 109 iExit.addActionListener(new ActionListener() { 134 110 public void actionPerformed(ActionEvent ae) { 135 stopServer(); 136 System.exit(0); 111 Thread runInThread = new Thread(new Runnable(){ 112 public void run(){ 113 server.stop(); 114 115 } 116 },"stop server"); 117 try{ 118 runInThread.start(); 119 120 } 121 catch(Exception e){ 122 logger.error(e); 123 } 124 thisframe.dispose(); 137 125 } 138 126 }); 139 127 fMenu.add(iConf); 140 128 fMenu.add(iExit); 129 fMenu.setEnabled(false); 141 130 menuBar.add(fMenu); 142 131 menuBar.setBorder(new BevelBorder(BevelBorder.RAISED)); … … 144 133 } 145 134 146 protected void stopServer() { 147 RunAnt runAnt = new RunAnt(); 148 runAnt.setAntCmd(STOP_CMD); 149 runAnt.run(); 150 } 151 152 protected void restartServer() { 153 RunAnt runAnt = new RunAnt(); 154 // stop it if already running 155 if (tomcat_running) { 156 runAnt.setAntCmd(STOP_CMD); 157 runAnt.run(); 158 } 159 // reconfigure if necessary 160 if (configure_required) { 161 runAnt.setAntCmd(CONFIGURE_CMD); 162 runAnt.run(); 163 GlobalProperties.reload(); // properties file may have changed, so reload it 164 configure_required = false; 165 } 166 // start it up 167 runAnt.setAntCmd(START_CMD); 168 runAnt.run(); 169 tomcat_running = true; 170 } 171 172 protected void launchBrowser() { 173 setState(Frame.ICONIFIED); // make the server frame iconified 174 String url = GlobalProperties.getGSDL3WebAddress()+ Server.build_properties.getProperty(StaticStrings.DEFAULT_SERVLET_PROPERTY); 175 BrowserLauncher launcher = new BrowserLauncher(url); 176 launcher.start(); 177 } 178 179 private class MyWindowAdapter 180 extends WindowAdapter { 181 public void windowClosing(WindowEvent e) { 182 /** When the frame is closed, the library server is terminated */ 183 stopServer(); 184 tomcat_running = false; 185 } 186 187 public void windowOpened(WindowEvent e) { 188 // if auto start is true, we start the server and launch a browser 189 String auto_start = Server.build_properties.getProperty(StaticStrings.AUTOSTART_PROPERTY); 190 if (auto_start != null && auto_start.equals("true")) { 191 restartServer(); 192 launchBrowser(); 193 // have to reset the panel to restart 194 mid_panel.remove(process_label); 195 mid_panel.add(info_label, BorderLayout.CENTER ); 196 enter_button.setVisible(true); 197 } 198 } 199 } 200 135 public void updateControl(){ 136 switch (server.getServerState()){ 137 case Server.SERVER_STARTED: 138 { 139 info_label.setText(stringToHTML(Server.dictionary.get("ServerControl.Help_EnterLibrary"))); 140 enter_button.setEnabled(true); 141 fMenu.setEnabled(true); 142 break; 143 } 144 case Server.SERVER_START_FAILED: 145 { 146 enter_button.setText(stringToHTML(Server.dictionary.get("ServerControl.StartServer"))); 147 enter_button.setEnabled(true); 148 fMenu.setEnabled(true); 149 break; 150 } 151 case Server.BROWSER_LAUNCHED: 152 { 153 info_label.setText(stringToHTML(Server.dictionary.get("ServerControl.Help_RestartLibrary"))); 154 enter_button.setText(stringToHTML(Server.dictionary.get("ServerControl.RestartLibrary"))); 155 thisframe.setState(Frame.ICONIFIED); 156 enter_button.setEnabled(true); 157 fMenu.setEnabled(true); 158 break; 159 } 160 case Server.BROWSER_LAUNCH_FAILED: 161 { 162 enter_button.setText(stringToHTML(Server.dictionary.get("ServerControl.EnterLibrary"))); 163 enter_button.setEnabled(true); 164 fMenu.setEnabled(true); 165 break; 166 } 167 default:{ 168 enter_button.setEnabled(false); 169 fMenu.setEnabled(false); 170 } 171 } 172 } 173 174 175 public void displayMessage(String message){ 176 info_label.setText(stringToHTML("<br>"+message)); 177 } 178 179 private class MyAdapter extends WindowAdapter{ 180 public void windowClosing(WindowEvent env){ 181 Thread runInThread = new Thread(new Runnable(){ 182 public void run(){ 183 server.stop(); 184 185 } 186 },"stop server"); 187 try{ 188 runInThread.start(); 189 } 190 catch(Exception e){ 191 logger.error(e); 192 } 193 thisframe.dispose(); 194 } 195 } 196 197 private String stringToHTML(String s){ 198 return "<html><body>"+s+"</body></html>"; 199 } 200 201 201 private class EnterButtonListener 202 202 implements ActionListener { 203 203 204 204 public void actionPerformed(ActionEvent ev) { 205 boolean tomcat_was_running = tomcat_running; 206 restartServer(); 207 launchBrowser(); 208 if (!tomcat_was_running) { 209 // reset the panel to restart 210 info_label.setText(Server.dictionary.get("ServerControl.Help_Restart")); 211 enter_button.setText(Server.dictionary.get("ServerControl.Restart")); 212 } 205 switch (server.getServerState()){ 206 case Server.SERVER_STARTED: case Server.BROWSER_LAUNCH_FAILED: 207 { 208 Thread runInThread = new Thread(new Runnable(){ 209 public void run(){ 210 server.launchBrowser(); 211 } 212 },"launch browser"); 213 214 runInThread.start(); 215 break; 216 } 217 case Server.SERVER_START_FAILED: 218 { 219 Thread runInThread = new Thread(new Runnable(){ 220 public void run(){ 221 server.start(); 222 } 223 },"start server"); 224 runInThread.start(); 225 break; 226 } 227 case Server.BROWSER_LAUNCHED: 228 { 229 Thread runInThread = new Thread(new Runnable(){ 230 public void run(){ 231 server.restart(); 232 233 } 234 },"restart server"); 235 runInThread.start(); 236 } 237 } 238 213 239 } 214 240 }
Note:
See TracChangeset
for help on using the changeset viewer.