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

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

Updated several files so that the Server2 code in server.jar interacts with GLI code so that the local GS2 server for Linux works the same way as the GS2 Local Library Server on windows

File size: 7.4 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 }
122 });
123
124 fMenu.add(iConf);
125 fMenu.add(iExit);
126 fMenu.setEnabled(false);
127 menuBar.add(fMenu);
128 menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));
129 return menuBar;
130 }
131
132 public void updateControl(){
133 switch (server.getServerState()){
134 case BaseServer.START_SERVER:
135 case BaseServer.SERVER_STARTED:
136 {
137 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.Help_EnterLibrary")));
138 enter_button.setEnabled(true);
139 fMenu.setEnabled(true);
140 break;
141 }
142 case BaseServer.SERVER_START_FAILED:
143 {
144 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.StartServer")));
145 enter_button.setEnabled(true);
146 fMenu.setEnabled(true);
147 break;
148 }
149 case BaseServer.BROWSER_LAUNCHED:
150 {
151 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.Help_RestartLibrary")));
152 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.RestartLibrary")));
153 thisframe.setState(Frame.ICONIFIED);
154 enter_button.setEnabled(true);
155 fMenu.setEnabled(true);
156 break;
157 }
158 case BaseServer.BROWSER_LAUNCH_FAILED:
159 {
160 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.EnterLibrary")
161 + "(URL: " + server.getBrowserURL() + ")"));
162 enter_button.setEnabled(true);
163 fMenu.setEnabled(true);
164 break;
165 }
166 default:{
167 enter_button.setText(BaseServer.dictionary.get("ServerControl.EnterLibrary"));
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 private class EnterButtonListener
202 implements ActionListener {
203
204 public void actionPerformed(ActionEvent ev) {
205 switch (server.getServerState()){
206 case BaseServer.START_SERVER:
207 {
208 Thread runInThread = new Thread(new Runnable(){
209 public void run(){
210 server.start();
211 server.launchBrowser();
212 }
213 },"start server and launch browser");
214
215 runInThread.start();
216 break;
217 }
218 case BaseServer.SERVER_STARTED: case BaseServer.BROWSER_LAUNCH_FAILED:
219 {
220 Thread runInThread = new Thread(new Runnable(){
221 public void run(){
222 server.launchBrowser();
223 }
224 },"launch browser");
225
226 runInThread.start();
227 break;
228 }
229 case BaseServer.SERVER_START_FAILED:
230 {
231 Thread runInThread = new Thread(new Runnable(){
232 public void run(){
233 server.start();
234 }
235 },"start server");
236 runInThread.start();
237 break;
238 }
239 case BaseServer.BROWSER_LAUNCHED:
240 {
241 Thread runInThread = new Thread(new Runnable(){
242 public void run(){
243 server.restart();
244
245 }
246 },"restart server");
247 runInThread.start();
248 }
249 }
250
251 }
252 }
253}
Note: See TracBrowser for help on using the repository browser.