Changeset 13561 for trunk


Ignore:
Timestamp:
2007-01-11T13:16:38+13:00 (17 years ago)
Author:
shaoqun
Message:

removed the starting and launcnging process to the Server class

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl3/src/java/org/greenstone/server/ServerControl.java

    r13229 r13561  
    1010import org.greenstone.gsdl3.util.GlobalProperties;
    1111
     12import org.apache.log4j.*;
    1213/**
    1314 * This class is to start or restart the library server
     
    1617public class ServerControl extends JFrame {
    1718
     19    static Logger logger = Logger.getLogger(org.greenstone.server.ServerControl.class.getName());
     20 
    1821    /** The dimension of the frame */
    1922    static final private Dimension FRAME_SIZE = new Dimension(350, 250);
    2023
    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   
    3526    /** 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;
    3928    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) {
    4234    super(Server.dictionary.get("ServerControl.Frame_Title"));
     35 
     36    this.server = server;
     37        thisframe = this;
     38
    4339    setSize(FRAME_SIZE);
    44     setIconImage(Toolkit.getDefaultToolkit().getImage(Server.images_path + ICON_IMG));
    4540    setDefaultCloseOperation(EXIT_ON_CLOSE);
    4641    Dimension screen_size = Toolkit.getDefaultToolkit().getScreenSize();
     
    4843            (screen_size.height - FRAME_SIZE.height) / 2);
    4944    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));           
    6877       
    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);
    9881    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());
    11693    setVisible(true);
    11794    }
     
    11996    protected JMenuBar createMenu() {
    12097    JMenuBar menuBar = new JMenuBar();
    121     JMenu fMenu = new JMenu(Server.dictionary.get("ServerControl.Menu.File"));
     98        fMenu = new JMenu(Server.dictionary.get("ServerControl.Menu.File"));
    12299    JMenuItem iConf = new JMenuItem(Server.dictionary.get("ServerControl.Menu.Settings"));
    123100    iConf.setBackground(Color.white);
    124101    iConf.addActionListener(new ActionListener() {
    125102        public void actionPerformed(ActionEvent ae) {
    126             ServerSettings serverSetting = new ServerSettings();
    127             configure_required = serverSetting.isConfigureRequired();
     103            ServerSettings serverSetting = new ServerSettings(server);
    128104        }
    129105        });
    130 
     106   
    131107    JMenuItem iExit = new JMenuItem(Server.dictionary.get("ServerControl.Menu.Exit"));
    132108    iExit.setBackground(Color.white);
    133109    iExit.addActionListener(new ActionListener() {
    134110        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();
    137125        }
    138126        });
    139127    fMenu.add(iConf);
    140128    fMenu.add(iExit);
     129    fMenu.setEnabled(false);
    141130    menuBar.add(fMenu);
    142131    menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));
     
    144133    }
    145134
    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   
    201201    private class EnterButtonListener
    202202    implements ActionListener {
    203 
     203   
    204204    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     
    213239    }
    214240    }
Note: See TracChangeset for help on using the changeset viewer.