|
|
|
package com.fr.start.server;
|
|
|
|
|
|
|
|
import com.fr.base.BaseUtils;
|
|
|
|
import com.fr.design.ui.util.UIUtil;
|
|
|
|
import com.fr.event.Event;
|
|
|
|
import com.fr.event.EventDispatcher;
|
|
|
|
import com.fr.event.ListenerAdaptor;
|
|
|
|
import com.fr.log.FineLoggerFactory;
|
|
|
|
|
|
|
|
import java.awt.AWTException;
|
|
|
|
import java.awt.Image;
|
|
|
|
import java.awt.MenuItem;
|
|
|
|
import java.awt.PopupMenu;
|
|
|
|
import java.awt.SystemTray;
|
|
|
|
import java.awt.TrayIcon;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
import java.awt.event.ActionListener;
|
|
|
|
import java.awt.event.MouseAdapter;
|
|
|
|
import java.awt.event.MouseEvent;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create server tray.
|
|
|
|
*/
|
|
|
|
public class ServerTray {
|
|
|
|
|
|
|
|
private static ServerTray INSTANCE;
|
|
|
|
|
|
|
|
private MenuItem startMenu;
|
|
|
|
|
|
|
|
private MenuItem stopMenu;
|
|
|
|
|
|
|
|
private Image trayStartedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStarted@2x.png");
|
|
|
|
|
|
|
|
private Image trayStoppedImage = BaseUtils.readImage("/com/fr/base/images/oem/trayStopped@2x.png");
|
|
|
|
|
|
|
|
private ServerManageFrame serverManageFrame;
|
|
|
|
|
|
|
|
private TrayIcon trayIcon;
|
|
|
|
|
|
|
|
|
|
|
|
private ServerTray() {
|
|
|
|
|
|
|
|
listen();
|
|
|
|
//p:首先构建右键菜单
|
|
|
|
PopupMenu popup = new PopupMenu();
|
|
|
|
MenuItem manangeMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Open_Service_Manager"));
|
|
|
|
manangeMenu.addActionListener(new ActionListener() {
|
|
|
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
|
|
|
serverManageFrame = ServerManageFrame.getServerManageFrame();
|
|
|
|
if (!serverManageFrame.isVisible()) {
|
|
|
|
serverManageFrame.setVisible(true);
|
|
|
|
}
|
|
|
|
serverManageFrame.toFront();//p:到第一个.
|
|
|
|
}
|
|
|
|
});
|
|
|
|
startMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Embedded_Server_Start"));
|
|
|
|
stopMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Embedded_Server_Stop"));
|
|
|
|
MenuItem exitMenu = new MenuItem(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_M_Exit"));
|
|
|
|
//创建打开监听器
|
|
|
|
ActionListener startListener = new ActionListener() {
|
|
|
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
FineEmbedServer.start();
|
|
|
|
} catch (Exception exp) {
|
|
|
|
FineLoggerFactory.getLogger().error(exp.getMessage(), exp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
ActionListener stopListener = new ActionListener() {
|
|
|
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
FineEmbedServer.stop();
|
|
|
|
} catch (Throwable exp) {
|
|
|
|
FineLoggerFactory.getLogger().error(exp.getMessage(), exp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
startMenu.addActionListener(startListener);
|
|
|
|
stopMenu.addActionListener(stopListener);
|
|
|
|
//创建退出菜单监听器
|
|
|
|
ActionListener exitListener = new ActionListener() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
exitMenu.addActionListener(exitListener);
|
|
|
|
popup.add(manangeMenu);
|
|
|
|
popup.addSeparator();
|
|
|
|
popup.add(startMenu);
|
|
|
|
popup.add(stopMenu);
|
|
|
|
popup.addSeparator();
|
|
|
|
popup.add(exitMenu);
|
|
|
|
|
|
|
|
//p:开始创建托盘.
|
|
|
|
trayIcon = new TrayIcon(trayStartedImage, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Server_Embedded_Server"), popup);
|
|
|
|
trayIcon.setImageAutoSize(true);
|
|
|
|
trayIcon.addMouseListener(new MouseAdapter() {
|
|
|
|
|
|
|
|
public void mouseClicked(MouseEvent e) {
|
|
|
|
|
|
|
|
if (e.getClickCount() < 2) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ServerManageFrame serverManageFrame = ServerManageFrame.getServerManageFrame();
|
|
|
|
if (!serverManageFrame.isVisible()) {
|
|
|
|
serverManageFrame.setVisible(true);
|
|
|
|
}
|
|
|
|
serverManageFrame.toFront();//p:到第一个.
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
TrayIcon[] icons = SystemTray.getSystemTray().getTrayIcons();
|
|
|
|
for (TrayIcon icon : icons) {
|
|
|
|
SystemTray.getSystemTray().remove(icon);
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
SystemTray.getSystemTray().add(trayIcon);
|
|
|
|
} catch (AWTException e) {
|
|
|
|
System.err.println("Can not create the System Tray:" + e);
|
|
|
|
}
|
|
|
|
|
|
|
|
checkPopupMenuItemEnabled();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void listen() {
|
|
|
|
|
|
|
|
ListenerAdaptor listenerAdaptor = new ListenerAdaptor() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void on(Event event) {
|
|
|
|
|
|
|
|
checkPopupMenuItemEnabled();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
EventDispatcher.listen(EmbedServerEvent.AfterStart, listenerAdaptor);
|
|
|
|
EventDispatcher.listen(EmbedServerEvent.AfterStop, listenerAdaptor);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void exit() {
|
|
|
|
|
|
|
|
FineEmbedServer.stop();
|
|
|
|
SystemTray.getSystemTray().remove(trayIcon);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void checkPopupMenuItemEnabled() {
|
|
|
|
|
|
|
|
try {
|
|
|
|
if (FineEmbedServer.isRunning()) {
|
|
|
|
startMenu.setEnabled(false);
|
|
|
|
stopMenu.setEnabled(true);
|
|
|
|
|
|
|
|
trayIcon.setImage(trayStartedImage);
|
|
|
|
} else {
|
|
|
|
startMenu.setEnabled(true);
|
|
|
|
stopMenu.setEnabled(false);
|
|
|
|
|
|
|
|
trayIcon.setImage(trayStoppedImage);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (serverManageFrame != null) {
|
|
|
|
serverManageFrame.checkButtonEnabled();
|
|
|
|
serverManageFrame.repaint();
|
|
|
|
}
|
|
|
|
} catch (Exception exp) {
|
|
|
|
FineLoggerFactory.getLogger().error(exp.getMessage(), exp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void init() {
|
|
|
|
UIUtil.invokeLaterIfNeeded(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
if (INSTANCE == null) {
|
|
|
|
INSTANCE = new ServerTray();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|