package de.sebastianbenz.task.app; import it.sauronsoftware.junique.AlreadyLockedException; import it.sauronsoftware.junique.JUnique; import it.sauronsoftware.junique.MessageHandler; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import de.sebastianbenz.task.app.actions.EditorOpener; public class TaskEditorApplication implements IApplication { private static final String APP_ID = "eclipse-task-editor"; /* * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app. * IApplicationContext) * * @since 3.3 */ public Object start(IApplicationContext context) throws Exception { String[] args = arguments(context); final TaskEditorWorkbenchAdvisor workbenchAdvisor = new TaskEditorWorkbenchAdvisor( args); boolean alreadyRunning; try { JUnique.acquireLock(APP_ID, new MessageHandler() { public String handle(final String message) { Display.getDefault().asyncExec(new Runnable() { public void run() { IWorkbenchWindow window = PlatformUI.getWorkbench() .getActiveWorkbenchWindow(); EditorOpener.open(window, message); window.getShell().forceActive(); } }); return null; } }); alreadyRunning = false; } catch (AlreadyLockedException e) { alreadyRunning = true; } if (!alreadyRunning) { Display display = PlatformUI.createDisplay(); try { int returnCode = PlatformUI.createAndRunWorkbench(display, workbenchAdvisor); if (returnCode == PlatformUI.RETURN_RESTART) return IApplication.EXIT_RESTART; return IApplication.EXIT_OK; } finally { display.dispose(); } } else { for (int i = 0; i < args.length; i++) { JUnique.sendMessage(APP_ID, args[i]); } } return IApplication.EXIT_OK; } private String[] arguments(IApplicationContext context) { Object value = context.getArguments().get("application.args"); if (value instanceof String[]) { return (String[]) value; } return new String[0]; } /* * @see org.eclipse.equinox.app.IApplication#stop() * * @since 3.3 */ public void stop() { } }