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

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

Updated Server files for Linux GS2 Local Library Server to work the same way as the Windows GS2 LLS. Basically the major difference is that build.properties is no longer used but glisite.cfg or llssite.cfg depending on whether or not gs2-server.sh is launched from gli. There are a few additional changes required for this to keep it consistent with the way the Windows GS2 LLS works: storing the preview URL in glisite.cfg/llssite.cfg while the server is running and removing it when the server has stopped, Server2.java's main method taking the configfile as an additional parameter (and corresponding adjustments in the gsicontrol.sh script of GS2).

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