package com.revolsys.swing.listener;
import java.io.File;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.List;
import org.apache.commons.beanutils.MethodUtils;
import com.revolsys.swing.map.layer.LayerGroup;
import com.revolsys.swing.map.layer.Project;
import com.revolsys.swing.preferences.PreferencesDialog;
import com.revolsys.util.Property;
public class MacApplicationListenerHandler implements InvocationHandler {
public static void init(final Object application) {
try {
final InvocationHandler handler = new MacApplicationListenerHandler();
final Class<?> openFileHandlerClass = Class.forName("com.apple.eawt.OpenFilesHandler");
final Class<?> openUriHandler = Class.forName("com.apple.eawt.OpenURIHandler");
final Class<?> preferencesHandler = Class.forName("com.apple.eawt.PreferencesHandler");
final ClassLoader classLoader = MacApplicationListenerHandler.class.getClassLoader();
final Object listener = Proxy.newProxyInstance(classLoader, new Class[] {
openFileHandlerClass, openUriHandler, preferencesHandler
}, handler);
MethodUtils.invokeMethod(application, "setOpenFileHandler", listener);
MethodUtils.invokeMethod(application, "setOpenURIHandler", listener);
MethodUtils.invokeMethod(application, "setPreferencesHandler", listener);
System.setProperty("com.sun.media.jai.disableMediaLib", "true");
} catch (final Exception e) {
e.printStackTrace(System.out);
}
}
@Override
public Object invoke(final Object proxy, final Method method, final Object[] args)
throws Throwable {
if (method.getName().equals("openFiles")) {
final Object event = args[0];
openFiles(event);
} else if (method.getName().equals("handlePreferences")) {
PreferencesDialog.get().showPanel();
}
return null;
}
private void openFiles(final Object event) {
final List<File> files = Property.getSimple(event, "files");
final LayerGroup layerGroup = Project.get();
if (layerGroup != null) {
layerGroup.openFiles(files);
}
}
}