/******************************************************************************* * Copyright (c) 2011 IBM Corporation and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.orion.internal.server.ui; import org.eclipse.orion.internal.server.ui.console.OSGiConsoleFactory; import java.util.Collection; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; import org.osgi.framework.*; import org.osgi.service.application.*; /** * This class controls all aspects of the application's execution */ public class Application implements IApplication { private static final String ORION_APP = "org.eclipse.orion.application"; /* (non-Javadoc) * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext) */ public Object start(IApplicationContext context) { Display display = PlatformUI.createDisplay(); display.asyncExec(new Runnable() { public void run() { launchOrionApplication(); new OSGiConsoleFactory().openConsole(); } }); try { int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor()); if (returnCode == PlatformUI.RETURN_RESTART) { return IApplication.EXIT_RESTART; } return IApplication.EXIT_OK; } finally { display.dispose(); } } /* (non-Javadoc) * @see org.eclipse.equinox.app.IApplication#stop() */ public void stop() { if (!PlatformUI.isWorkbenchRunning()) return; final IWorkbench workbench = PlatformUI.getWorkbench(); final Display display = workbench.getDisplay(); display.syncExec(new Runnable() { public void run() { if (!display.isDisposed()) workbench.close(); } }); } protected ApplicationHandle launchOrionApplication() { String filter = "(service.pid=" + ORION_APP + ")"; //$NON-NLS-1$//$NON-NLS-2$ ApplicationDescriptor descriptor = getService(ApplicationDescriptor.class, filter); try { return descriptor.launch(null); } catch (ApplicationException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } private <S> S getService(Class<S> clazz, String filter) { BundleContext context = Activator.getContext(); if (context == null) return null; Collection<ServiceReference<S>> references; try { references = context.getServiceReferences(clazz, filter); } catch (InvalidSyntaxException e) { // TODO Auto-generated catch block return null; } if (references == null || references.size() == 0) return null; ServiceReference<S> ref = references.iterator().next(); S result = context.getService(ref); context.ungetService(ref); return result; } }