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

Last change on this file since 24479 was 24479, checked in by ak19, 13 years ago

When do not modify port is selected, it displays an error message and does nothing until you hit the restart button.

File size: 8.6 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
41 // set the icon for the Greenstone Server Interface
42 try {
43 ImageIcon image = new ImageIcon(getClass().getResource("/images/servericon.png"));
44 if (image != null) {
45 this.setIconImage(image.getImage());
46 }
47 }
48 catch (Exception exception) {
49 System.err.println("Error: Could not load servericon.png");
50 logger.error("Error: Could not load servericon.png");
51 }
52
53 Dimension screen_size = Toolkit.getDefaultToolkit().getScreenSize();
54 setLocation((screen_size.width - FRAME_SIZE.width) / 2,
55 (screen_size.height - FRAME_SIZE.height) / 2);
56 setBackground(Color.white);
57 addWindowListener(new MyAdapter());
58
59 JPanel title_panel = new JPanel();
60 title_panel.setLayout(new BorderLayout());
61
62 JLabel title_label = new JLabel();
63
64
65 String title = BaseServer.dictionary.get(BaseServer.Property.SERVER_CONTROL+".Title");
66 title_label.setText(stringToHTML(title));
67 title_label.setOpaque(false);
68 title_label.setHorizontalAlignment(SwingConstants.CENTER);
69 title_label.setFont(new Font("SansSerif",Font.PLAIN,18));
70
71
72 JLabel version_label = new JLabel();
73 String version = BaseServer.dictionary.get(BaseServer.Property.SERVER_CONTROL+".Version").toLowerCase();
74
75 version_label.setText(stringToHTML(version));
76 version_label.setOpaque(false);
77 version_label.setHorizontalAlignment(SwingConstants.CENTER);
78 version_label.setFont(new Font("SansSerif",Font.PLAIN,14));
79
80 title_panel.add(title_label,BorderLayout.CENTER);
81 title_panel.add(version_label,BorderLayout.SOUTH);
82 title_panel.setBackground(bg_color);
83 title_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
84
85 info_label = new JLabel();
86 info_label.setOpaque(false);
87 info_label.setHorizontalAlignment(SwingConstants.LEFT);
88 info_label.setVerticalAlignment(SwingConstants.CENTER);
89 info_label.setFont(new Font("SansSerif",Font.PLAIN,14));
90 info_label.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
91
92 JPanel button_panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
93 enter_button = new JButton();
94 enter_button.setEnabled(false);
95 enter_button.addActionListener(new EnterButtonListener());
96 enter_button.setText(BaseServer.dictionary.get("ServerControl.EnterLibrary"));
97 button_panel.add(enter_button);
98 button_panel.setBackground(bg_color);
99 button_panel.setBorder(BorderFactory.createEmptyBorder(5,10,5,10));
100 getRootPane().setDefaultButton(enter_button); // button gets the focus for enterpress
101
102 getContentPane().setLayout(new BorderLayout());
103 getContentPane().add(title_panel,BorderLayout.NORTH);
104 getContentPane().add(info_label,BorderLayout.CENTER);
105 getContentPane().add(button_panel,BorderLayout.SOUTH);
106 getContentPane().setBackground(bg_color);
107 setJMenuBar(createMenu());
108 setVisible(true);
109 }
110
111 protected abstract JMenuBar createMenu();
112
113 protected JMenuBar createMenu(JMenuItem iConf) {
114 JMenuBar menuBar = new JMenuBar();
115 fMenu = new JMenu(BaseServer.dictionary.get("ServerControl.Menu.File"));
116 JMenuItem iExit = new JMenuItem(BaseServer.dictionary.get("ServerControl.Menu.Exit"));
117 iExit.setBackground(Color.white);
118 iExit.addActionListener(new ActionListener() {
119 public void actionPerformed(ActionEvent ae) {
120 /*Thread runInThread = new Thread(new Runnable(){
121 public void run(){
122 server.stop();
123
124 }
125 },"stop server");
126 try{
127 runInThread.start();
128
129 }
130 catch(Exception e){
131 logger.error(e);
132 }*/
133 thisframe.dispose();
134 server.stop();
135 System.exit(0);
136 }
137 });
138
139 fMenu.add(iConf);
140 fMenu.add(iExit);
141 fMenu.setEnabled(false);
142 menuBar.add(fMenu);
143 menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));
144 return menuBar;
145 }
146
147 public void updateControl(){
148 switch (server.getServerState()){
149 case BaseServer.START_SERVER:
150 {
151 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.Help_EnterLibrary")));
152 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.EnterLibrary")));
153 enter_button.setEnabled(true);
154 fMenu.setEnabled(true);
155 break;
156 }
157 case BaseServer.SERVER_STARTED:
158 {
159 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.Help_RestartLibrary")));
160 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.RestartLibrary")));
161 enter_button.setEnabled(true);
162 fMenu.setEnabled(true);
163 break;
164 }
165 case BaseServer.SERVER_START_FAILED:
166 {
167 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.StartServer")));
168 enter_button.setEnabled(true);
169 fMenu.setEnabled(true);
170 break;
171 }
172 case BaseServer.BROWSER_LAUNCHED:
173 {
174 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.BrowserLaunched",new String[]{server.getBrowserURL()})
175 + BaseServer.dictionary.get("ServerControl.Help_RestartLibrary")));
176 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.RestartLibrary")));
177 thisframe.setState(Frame.ICONIFIED);
178 enter_button.setEnabled(true);
179 fMenu.setEnabled(true);
180 break;
181 }
182 case BaseServer.BROWSER_LAUNCH_FAILED:
183 {
184 info_label.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.BrowserLaunchFailed",new String[]{server.getBrowserURL()})));
185 enter_button.setText(stringToHTML(BaseServer.dictionary.get("ServerControl.EnterLibrary")));
186 enter_button.setEnabled(true);
187 fMenu.setEnabled(true);
188 break;
189 }
190 default:
191 {
192 enter_button.setText(BaseServer.dictionary.get("ServerControl.EnterLibrary"));
193 enter_button.setEnabled(false);
194 fMenu.setEnabled(false);
195 }
196 }
197 }
198
199
200 public void displayMessage(String message){
201 info_label.setText(stringToHTML("<br>"+message));
202 }
203
204 private class MyAdapter extends WindowAdapter{
205 public void windowClosing(WindowEvent env){
206 /* Thread runInThread = new Thread(new Runnable(){
207 public void run(){
208 server.stop();
209
210 }
211 },"stop server");
212 try{
213 runInThread.start();
214 }
215 catch(Exception e){
216 logger.error(e);
217 }
218 thisframe.dispose();
219 */
220 thisframe.dispose();
221 server.stop();
222 System.exit(0);
223 }
224 }
225
226 private String stringToHTML(String s){
227 return "<html><body>"+s+"</body></html>";
228 }
229
230 private class EnterButtonListener
231 implements ActionListener {
232
233 public void actionPerformed(ActionEvent ev) {
234 switch (server.getServerState()){
235 case BaseServer.START_SERVER:
236 {
237 Thread runInThread = new Thread(new Runnable(){
238 public void run(){
239 server.start();
240 server.launchBrowser();
241 }
242 },"start server and launch browser");
243
244 runInThread.start();
245 break;
246 }
247 case BaseServer.SERVER_STARTED:
248 {
249 Thread runInThread = new Thread(new Runnable(){
250 public void run(){
251 server.launchBrowser();
252 }
253 },"launch browser");
254
255 runInThread.start();
256 break;
257 }
258 case BaseServer.SERVER_START_FAILED:
259 {
260 Thread runInThread = new Thread(new Runnable(){
261 public void run(){
262 server.start();
263 }
264 },"start server");
265 runInThread.start();
266 break;
267 }
268 case BaseServer.BROWSER_LAUNCHED: case BaseServer.BROWSER_LAUNCH_FAILED:
269 {
270 Thread runInThread = new Thread(new Runnable(){
271 public void run(){
272 server.restart();
273
274 }
275 },"restart server");
276 runInThread.start();
277 }
278 }
279
280 }
281 }
282
283 public void errorMessage(String message) {
284 JOptionPane.showMessageDialog(null,message,"Error", JOptionPane.ERROR_MESSAGE);
285 }
286}
Note: See TracBrowser for help on using the repository browser.