source: greenstone3/trunk/src/java/org/greenstone/server/BaseServerControl.java@ 20908

Last change on this file since 20908 was 20908, checked in by ak19, 14 years ago

Updated to display the URL when the browser fails to launch (and also when it launches successfully). Most of the previous commit to BrowserLauncher.java have been reverted now, and some additional changes have been made to it.

File size: 8.1 KB
Line 
1package org.greenstone.server;
2
3import java.awt.*;
4import java.awt.event.*;
5import java.io.File;
6import java.util.ArrayList;
7import javax.swing.*;
8import javax.swing.border.*;
9
10import org.apache.log4j.*;
11/**
12 * Base class to help start or restart the library server
13 *
14 */
15public abstract class BaseServerControl extends JFrame {
16
17 static Logger logger = Logger.getLogger(BaseServerControl.class.getName());
18
19 /** The dimension of the frame */
20 static final private Dimension FRAME_SIZE = new Dimension(350, 250);
21
22 Color bg_color = Color.white;
23
24 /** some components we need to refer to later */
25 protected JLabel info_label;
26 protected JButton enter_button;
27 protected JMenu fMenu;
28 protected BaseServer server;
29 protected JFrame thisframe;
30
31 public BaseServerControl(BaseServer server,String frame_title)
32 {
33 super(frame_title);
34
35 this.server = server;
36 thisframe = this;
37
38 setSize(FRAME_SIZE);
39 setDefaultCloseOperation(EXIT_ON_CLOSE);
40 Dimension screen_size = Toolkit.getDefaultToolkit().getScreenSize();
41 setLocation((screen_size.width - FRAME_SIZE.width) / 2,
42 (screen_size.height - FRAME_SIZE.height) / 2);
43 setBackground(Color.white);
44 addWindowListener(new MyAdapter());
45
46 JPanel title_panel = new JPanel();
47 title_panel.setLayout(new BorderLayout());
48
49 JLabel title_label = new JLabel();
50
51
52 String title = BaseServer.dictionary.get(BaseServer.Property.SERVER_CONTROL+".Title");
53 title_label.setText(stringToHTML(title));
54 title_label.setOpaque(false);
55 title_label.setHorizontalAlignment(SwingConstants.CENTER);
56 title_label.setFont(new Font("SansSerif",Font.PLAIN,18));
57
58
59 JLabel version_label = new JLabel();
60 String version = BaseServer.dictionary.get(BaseServer.Property.SERVER_CONTROL+".Version").toLowerCase();
61
62 version_label.setText(stringToHTML(version));
63 version_label.setOpaque(false);
64 version_label.setHorizontalAlignment(SwingConstants.CENTER);
65 version_label.setFont(new Font("SansSerif",Font.PLAIN,14));
66
67 title_panel.add(title_label,BorderLayout.CENTER);
68 title_panel.add(version_label,BorderLayout.SOUTH);
69 title_panel.setBackground(bg_color);
70 title_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
71
72 info_label = new JLabel();
73 info_label.setOpaque(false);
74 info_label.setHorizontalAlignment(SwingConstants.LEFT);
75 info_label.setVerticalAlignment(SwingConstants.CENTER);
76 info_label.setFont(new Font("SansSerif",Font.PLAIN,14));
77 info_label.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
78
79 JPanel button_panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
80 enter_button = new JButton();
81 enter_button.setEnabled(false);
82 enter_button.addActionListener(new EnterButtonListener());
83 enter_button.setText(BaseServer.dictionary.get("ServerControl.EnterLibrary"));
84 button_panel.add(enter_button);
85 button_panel.setBackground(bg_color);
86 button_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
87 getRootPane().setDefaultButton(enter_button); // button gets the focus for enterpress
88
89 getContentPane().setLayout(new BorderLayout());
90 getContentPane().add(title_panel,BorderLayout.NORTH);
91 getContentPane().add(info_label,BorderLayout.CENTER);
92 getContentPane().add(button_panel,BorderLayout.SOUTH);
93 getContentPane().setBackground(bg_color);
94 setJMenuBar(createMenu());
95 setVisible(true);
96 }
97
98 protected abstract JMenuBar createMenu();
99
100 protected JMenuBar createMenu(JMenuItem iConf) {
101 JMenuBar menuBar = new JMenuBar();
102 fMenu = new JMenu(BaseServer.dictionary.get("ServerControl.Menu.File"));
103 JMenuItem iExit = new JMenuItem(BaseServer.dictionary.get("ServerControl.Menu.Exit"));
104 iExit.setBackground(Color.white);
105 iExit.addActionListener(new ActionListener() {
106 public void actionPerformed(ActionEvent ae) {
107 /*Thread runInThread = new Thread(new Runnable(){
108 public void run(){
109 server.stop();
110
111 }
112 },"stop server");
113 try{
114 runInThread.start();
115
116 }
117 catch(Exception e){
118 logger.error(e);
119 }*/
120 thisframe.dispose();
121 server.stop();
122 System.exit(0);
123 }
124 });
125
126 fMenu.add(iConf);
127 fMenu.add(iExit);
128 fMenu.setEnabled(false);
129 menuBar.add(fMenu);
130 menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));
131 return menuBar;
132 }
133
134 public void updateControl(){
135 switch (server.getServerState()){
136 case BaseServer.START_SERVER:
137 {
138 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.Help_EnterLibrary")));
139 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.EnterLibrary")));
140 enter_button.setEnabled(true);
141 fMenu.setEnabled(true);
142 break;
143 }
144 case BaseServer.SERVER_STARTED:
145 {
146 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.Help_RestartLibrary")));
147 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.RestartLibrary")));
148 enter_button.setEnabled(true);
149 fMenu.setEnabled(true);
150 break;
151 }
152 case BaseServer.SERVER_START_FAILED:
153 {
154 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.StartServer")));
155 enter_button.setEnabled(true);
156 fMenu.setEnabled(true);
157 break;
158 }
159 case BaseServer.BROWSER_LAUNCHED:
160 {
161 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.BrowserLaunched",new String[]{server.getBrowserURL()})
162 + BaseServer.dictionary.get("ServerControl.Help_RestartLibrary")));
163 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.RestartLibrary")));
164 thisframe.setState(Frame.ICONIFIED);
165 enter_button.setEnabled(true);
166 fMenu.setEnabled(true);
167 break;
168 }
169 case BaseServer.BROWSER_LAUNCH_FAILED:
170 {
171 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.BrowserLaunchFailed",new String[]{server.getBrowserURL()})));
172 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.EnterLibrary")));
173 enter_button.setEnabled(true);
174 fMenu.setEnabled(true);
175 break;
176 }
177 default:
178 {
179 enter_button.setText(BaseServer.dictionary.get("ServerControl.EnterLibrary"));
180 enter_button.setEnabled(false);
181 fMenu.setEnabled(false);
182 }
183 }
184 }
185
186
187 public void displayMessage(String message){
188 info_label.setText(stringToHTML("<br>"+message));
189 }
190
191 private class MyAdapter extends WindowAdapter{
192 public void windowClosing(WindowEvent env){
193 /* Thread runInThread = new Thread(new Runnable(){
194 public void run(){
195 server.stop();
196
197 }
198 },"stop server");
199 try{
200 runInThread.start();
201 }
202 catch(Exception e){
203 logger.error(e);
204 }
205 thisframe.dispose();
206 */
207 thisframe.dispose();
208 server.stop();
209 System.exit(0);
210 }
211 }
212
213 private String stringToHTML(String s){
214 return "<html><body>"+s+"</body></html>";
215 }
216
217 private class EnterButtonListener
218 implements ActionListener {
219
220 public void actionPerformed(ActionEvent ev) {
221 switch (server.getServerState()){
222 case BaseServer.START_SERVER:
223 {
224 Thread runInThread = new Thread(new Runnable(){
225 public void run(){
226 server.start();
227 server.launchBrowser();
228 }
229 },"start server and launch browser");
230
231 runInThread.start();
232 break;
233 }
234 case BaseServer.SERVER_STARTED: case BaseServer.BROWSER_LAUNCH_FAILED:
235 {
236 Thread runInThread = new Thread(new Runnable(){
237 public void run(){
238 server.launchBrowser();
239 }
240 },"launch browser");
241
242 runInThread.start();
243 break;
244 }
245 case BaseServer.SERVER_START_FAILED:
246 {
247 Thread runInThread = new Thread(new Runnable(){
248 public void run(){
249 server.start();
250 }
251 },"start server");
252 runInThread.start();
253 break;
254 }
255 case BaseServer.BROWSER_LAUNCHED:
256 {
257 Thread runInThread = new Thread(new Runnable(){
258 public void run(){
259 server.restart();
260
261 }
262 },"restart server");
263 runInThread.start();
264 }
265 }
266
267 }
268 }
269}
Note: See TracBrowser for help on using the repository browser.