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

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

Focus on Enter Library button so it responds to Enterpress instead of one having to use the mouse.

File size: 7.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.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", new String [] {GlobalProperties.getProperty(BaseServer.Property.GSDL_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.