davmail/src/java/davmail/tray/DavGatewayTray.java

166 lines
4.9 KiB
Java

package davmail.tray;
import davmail.Settings;
import davmail.exchange.NetworkDownException;
import org.apache.log4j.Logger;
import org.apache.log4j.Priority;
import javax.imageio.ImageIO;
import java.awt.*;
import java.io.IOException;
import java.net.URL;
/**
* Tray icon handler
*/
public class DavGatewayTray {
protected static final Logger LOGGER = Logger.getLogger("davmail");
protected DavGatewayTray() {
}
static DavGatewayTrayInterface davGatewayTray;
public static Image getFrameIcon() {
Image icon = null;
if (davGatewayTray != null) {
icon = davGatewayTray.getFrameIcon();
}
return icon;
}
public static void switchIcon() {
if (davGatewayTray != null) {
davGatewayTray.switchIcon();
}
}
public static void resetIcon() {
if (davGatewayTray != null && isActive()) {
davGatewayTray.resetIcon();
}
}
public static void inactiveIcon() {
if (davGatewayTray != null) {
davGatewayTray.inactiveIcon();
}
}
public static boolean isActive() {
return davGatewayTray == null || davGatewayTray.isActive();
}
protected static void displayMessage(String message, Priority priority) {
LOGGER.log(priority, message);
if (davGatewayTray != null) {
davGatewayTray.displayMessage(message, priority);
}
}
protected static void displayMessage(String message, Exception e, Priority priority) {
LOGGER.log(priority, message, e);
if (davGatewayTray != null
&& (!(e instanceof NetworkDownException) || isActive())) {
StringBuilder buffer = new StringBuilder();
if (message != null) {
buffer.append(message).append(" ");
}
if (e.getMessage() != null) {
buffer.append(e.getMessage());
} else {
buffer.append(e.toString());
}
davGatewayTray.displayMessage(buffer.toString(), priority);
}
if (davGatewayTray != null && e instanceof NetworkDownException) {
davGatewayTray.inactiveIcon();
}
}
public static void debug(String message) {
displayMessage(message, Priority.DEBUG);
}
public static void info(String message) {
displayMessage(message, Priority.INFO);
}
public static void warn(String message) {
displayMessage(message, Priority.WARN);
}
public static void error(String message) {
displayMessage(message, Priority.ERROR);
}
public static void error(Exception e) {
displayMessage(null, e, Priority.ERROR);
}
public static void debug(String message, Exception e) {
displayMessage(message, e, Priority.DEBUG);
}
public static void info(String message, Exception e) {
displayMessage(message, e, Priority.INFO);
}
public static void warn(String message, Exception e) {
displayMessage(message, e, Priority.WARN);
}
public static void error(String message, Exception e) {
displayMessage(message, e, Priority.ERROR);
}
public static void init() {
if (!Settings.getBooleanProperty("davmail.server")) {
ClassLoader classloader = DavGatewayTray.class.getClassLoader();
// first try to load SWT
try {
// trigger ClassNotFoundException
classloader.loadClass("org.eclipse.swt.SWT");
// SWT available, create tray
davGatewayTray = new SwtGatewayTray();
davGatewayTray.init();
} catch (ClassNotFoundException e) {
DavGatewayTray.info("SWT not available, fallback to JDK 1.6 system tray support");
}
// try java6 tray support
if (davGatewayTray == null) {
try {
if (SystemTray.isSupported()) {
davGatewayTray = new AwtGatewayTray();
davGatewayTray.init();
}
} catch (NoClassDefFoundError e) {
DavGatewayTray.info("JDK 1.6 needed for system tray support");
}
}
if (davGatewayTray == null) {
DavGatewayTray.warn("No system tray support found (tried SWT and native java)");
}
}
}
/**
* Load image with current class loader.
*
* @param fileName image resource file name
* @return image
*/
public static Image loadImage(String fileName) {
Image result = null;
try {
ClassLoader classloader = DavGatewayTray.class.getClassLoader();
URL imageUrl = classloader.getResource(fileName);
result = ImageIO.read(imageUrl);
} catch (IOException e) {
DavGatewayTray.warn("Unable to load image", e);
}
return result;
}
}