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

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

Greenstone Server Interface button now says Restart Library when the server has already started, instead of Enter Library. This matches with what the GSI of the LocalLibraryServer does on Windows.

File size: 7.9 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.Help_RestartLibrary")));
162 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.RestartLibrary")));
163 thisframe.setState(Frame.ICONIFIED);
164 enter_button.setEnabled(true);
165 fMenu.setEnabled(true);
166 break;
167 }
168 case BaseServer.BROWSER_LAUNCH_FAILED:
169 {
170 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.EnterLibrary")
171 + "(URL: " + server.getBrowserURL() + ")"));
172 enter_button.setEnabled(true);
173 fMenu.setEnabled(true);
174 break;
175 }
176 default:
177 {
178 enter_button.setText(BaseServer.dictionary.get("ServerControl.EnterLibrary"));
179 enter_button.setEnabled(false);
180 fMenu.setEnabled(false);
181 }
182 }
183 }
184
185
186 public void displayMessage(String message){
187 info_label.setText(stringToHTML("<br>"+message));
188 }
189
190 private class MyAdapter extends WindowAdapter{
191 public void windowClosing(WindowEvent env){
192 /* Thread runInThread = new Thread(new Runnable(){
193 public void run(){
194 server.stop();
195
196 }
197 },"stop server");
198 try{
199 runInThread.start();
200 }
201 catch(Exception e){
202 logger.error(e);
203 }
204 thisframe.dispose();
205 */
206 thisframe.dispose();
207 server.stop();
208 System.exit(0);
209 }
210 }
211
212 private String stringToHTML(String s){
213 return "<html><body>"+s+"</body></html>";
214 }
215
216 private class EnterButtonListener
217 implements ActionListener {
218
219 public void actionPerformed(ActionEvent ev) {
220 switch (server.getServerState()){
221 case BaseServer.START_SERVER:
222 {
223 Thread runInThread = new Thread(new Runnable(){
224 public void run(){
225 server.start();
226 server.launchBrowser();
227 }
228 },"start server and launch browser");
229
230 runInThread.start();
231 break;
232 }
233 case BaseServer.SERVER_STARTED: case BaseServer.BROWSER_LAUNCH_FAILED:
234 {
235 Thread runInThread = new Thread(new Runnable(){
236 public void run(){
237 server.launchBrowser();
238 }
239 },"launch browser");
240
241 runInThread.start();
242 break;
243 }
244 case BaseServer.SERVER_START_FAILED:
245 {
246 Thread runInThread = new Thread(new Runnable(){
247 public void run(){
248 server.start();
249 }
250 },"start server");
251 runInThread.start();
252 break;
253 }
254 case BaseServer.BROWSER_LAUNCHED:
255 {
256 Thread runInThread = new Thread(new Runnable(){
257 public void run(){
258 server.restart();
259
260 }
261 },"restart server");
262 runInThread.start();
263 }
264 }
265
266 }
267 }
268}
Note: See TracBrowser for help on using the repository browser.