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

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

Removed dependency on GlobalProperties.java since that is GS3-specific.

File size: 7.0 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.greenstone.gsdl3.util.GlobalProperties;
11
12import org.apache.log4j.*;
13/**
14 * Base class to help start or restart the library server
15 *
16 */
17public abstract class BaseServerControl extends JFrame {
18
19 static Logger logger = Logger.getLogger(BaseServerControl.class.getName());
20
21 /** The dimension of the frame */
22 static final private Dimension FRAME_SIZE = new Dimension(350, 250);
23
24 Color bg_color = Color.white;
25
26 /** some components we need to refer to later */
27 protected JLabel info_label;
28 protected JButton enter_button;
29 protected JMenu fMenu;
30 protected BaseServer server;
31 protected JFrame thisframe;
32
33 public BaseServerControl(BaseServer server,String frame_title)
34 {
35 super(frame_title);
36
37 this.server = server;
38 thisframe = this;
39
40 setSize(FRAME_SIZE);
41 setDefaultCloseOperation(EXIT_ON_CLOSE);
42 Dimension screen_size = Toolkit.getDefaultToolkit().getScreenSize();
43 setLocation((screen_size.width - FRAME_SIZE.width) / 2,
44 (screen_size.height - FRAME_SIZE.height) / 2);
45 setBackground(Color.white);
46 addWindowListener(new MyAdapter());
47
48 JPanel title_panel = new JPanel();
49 title_panel.setLayout(new BorderLayout());
50
51 JLabel title_label = new JLabel();
52
53
54 String title = BaseServer.dictionary.get("ServerControl.Title");
55 title_label.setText(stringToHTML(title));
56 title_label.setOpaque(false);
57 title_label.setHorizontalAlignment(SwingConstants.CENTER);
58 title_label.setFont(new Font("SansSerif",Font.PLAIN,18));
59
60
61 JLabel version_label = new JLabel();
62 String version = BaseServer.dictionary.get("ServerControl.Version").toLowerCase();
63
64 version_label.setText(stringToHTML(version));
65 version_label.setOpaque(false);
66 version_label.setHorizontalAlignment(SwingConstants.CENTER);
67 version_label.setFont(new Font("SansSerif",Font.PLAIN,14));
68
69 title_panel.add(title_label,BorderLayout.CENTER);
70 title_panel.add(version_label,BorderLayout.SOUTH);
71 title_panel.setBackground(bg_color);
72 title_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
73
74 info_label = new JLabel();
75 info_label.setOpaque(false);
76 info_label.setHorizontalAlignment(SwingConstants.LEFT);
77 info_label.setVerticalAlignment(SwingConstants.CENTER);
78 info_label.setFont(new Font("SansSerif",Font.PLAIN,14));
79 info_label.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
80
81 JPanel button_panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
82 enter_button = new JButton();
83 enter_button.setEnabled(false);
84 enter_button.addActionListener(new EnterButtonListener());
85 enter_button.setText(BaseServer.dictionary.get("ServerControl.EnterLibrary"));
86 button_panel.add(enter_button);
87 button_panel.setBackground(bg_color);
88 button_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
89 getRootPane().setDefaultButton(enter_button); // button gets the focus for enterpress
90
91 getContentPane().setLayout(new BorderLayout());
92 getContentPane().add(title_panel,BorderLayout.NORTH);
93 getContentPane().add(info_label,BorderLayout.CENTER);
94 getContentPane().add(button_panel,BorderLayout.SOUTH);
95 getContentPane().setBackground(bg_color);
96 setJMenuBar(createMenu());
97 setVisible(true);
98 }
99
100 protected abstract JMenuBar createMenu();
101
102 protected JMenuBar createMenu(JMenuItem iConf) {
103 JMenuBar menuBar = new JMenuBar();
104 fMenu = new JMenu(BaseServer.dictionary.get("ServerControl.Menu.File"));
105 JMenuItem iExit = new JMenuItem(BaseServer.dictionary.get("ServerControl.Menu.Exit"));
106 iExit.setBackground(Color.white);
107 iExit.addActionListener(new ActionListener() {
108 public void actionPerformed(ActionEvent ae) {
109 Thread runInThread = new Thread(new Runnable(){
110 public void run(){
111 server.stop();
112
113 }
114 },"stop server");
115 try{
116 runInThread.start();
117
118 }
119 catch(Exception e){
120 logger.error(e);
121 }
122 thisframe.dispose();
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.SERVER_STARTED:
137 {
138 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.Help_EnterLibrary")));
139 enter_button.setEnabled(true);
140 fMenu.setEnabled(true);
141 break;
142 }
143 case BaseServer.SERVER_START_FAILED:
144 {
145 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.StartServer")));
146 enter_button.setEnabled(true);
147 fMenu.setEnabled(true);
148 break;
149 }
150 case BaseServer.BROWSER_LAUNCHED:
151 {
152 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.Help_RestartLibrary")));
153 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.RestartLibrary")));
154 thisframe.setState(Frame.ICONIFIED);
155 enter_button.setEnabled(true);
156 fMenu.setEnabled(true);
157 break;
158 }
159 case BaseServer.BROWSER_LAUNCH_FAILED:
160 {
161 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.EnterLibrary")));
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.SERVER_STARTED: case BaseServer.BROWSER_LAUNCH_FAILED:
206 {
207 Thread runInThread = new Thread(new Runnable(){
208 public void run(){
209 server.launchBrowser();
210 }
211 },"launch browser");
212
213 runInThread.start();
214 break;
215 }
216 case BaseServer.SERVER_START_FAILED:
217 {
218 Thread runInThread = new Thread(new Runnable(){
219 public void run(){
220 server.start();
221 }
222 },"start server");
223 runInThread.start();
224 break;
225 }
226 case BaseServer.BROWSER_LAUNCHED:
227 {
228 Thread runInThread = new Thread(new Runnable(){
229 public void run(){
230 server.restart();
231
232 }
233 },"restart server");
234 runInThread.start();
235 }
236 }
237
238 }
239 }
240}
Note: See TracBrowser for help on using the repository browser.