/******************************************************************************* * Copyright (c) 2007, 2014 compeople AG 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: * compeople AG - initial API and implementation *******************************************************************************/ package org.eclipse.riena.navigation.ui.swt.views; import java.io.IOException; import org.eclipse.equinox.log.Logger; import org.eclipse.jface.bindings.Binding; import org.eclipse.jface.bindings.Scheme; import org.eclipse.riena.core.Log4r; import org.eclipse.riena.core.exception.IExceptionHandlerManager; import org.eclipse.riena.core.service.Service; import org.eclipse.riena.core.wire.Wire; import org.eclipse.riena.internal.navigation.ui.swt.Activator; import org.eclipse.riena.internal.navigation.ui.swt.IAdvisorHelper; import org.eclipse.riena.navigation.ui.controllers.ApplicationController; import org.eclipse.riena.navigation.ui.swt.presentation.stack.common.TitlelessStackPresentationFactory; import org.eclipse.riena.ui.swt.facades.BindingServiceFacade; import org.eclipse.riena.ui.swt.uiprocess.SwtUISynchronizer; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.application.IWorkbenchWindowConfigurer; import org.eclipse.ui.application.WorkbenchAdvisor; import org.eclipse.ui.application.WorkbenchWindowAdvisor; import org.eclipse.ui.keys.IBindingService; import org.eclipse.ui.presentations.AbstractPresentationFactory; import org.eclipse.ui.statushandlers.AbstractStatusHandler; import org.eclipse.ui.statushandlers.StatusAdapter; import org.osgi.service.log.LogService; public class ApplicationAdvisor extends WorkbenchAdvisor { private final ApplicationController controller; private final IAdvisorHelper advisorHelper; private final AbstractPresentationFactory presentationFactory; /** * @noreference This constructor is not intended to be referenced by * clients. */ public ApplicationAdvisor(final ApplicationController controller, final IAdvisorHelper factory) { this.controller = controller; this.advisorHelper = factory; presentationFactory = new TitlelessStackPresentationFactory(); } @Override public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(final IWorkbenchWindowConfigurer configurer) { configurer.setPresentationFactory(presentationFactory); final WorkbenchWindowAdvisor workbenchWindowAdvisor = new ApplicationViewAdvisor3xRAP(configurer, controller, advisorHelper); Wire.instance(workbenchWindowAdvisor).andStart(Activator.getDefault().getContext()); return workbenchWindowAdvisor; } @Override public String getInitialWindowPerspectiveId() { return null; } @Override public synchronized AbstractStatusHandler getWorkbenchErrorHandler() { return new AbstractStatusHandler() { @Override public void handle(final StatusAdapter statusAdapter, final int style) { Service.get(IExceptionHandlerManager.class).handleException(statusAdapter.getStatus().getException(), statusAdapter.getStatus().getMessage()); } }; } @Override public void postStartup() { installDefaultBinding(); controller.getNavigationNode().activate(); } @Override public boolean preShutdown() { boolean result = super.preShutdown(); if (result) { controller.getNavigationNode().dispose(); } result &= controller.getNavigationNode().isDisposed(); if (result) { SwtUISynchronizer.setWorkbenchShutdown(true); } return result; } // helping methods ////////////////// private void installDefaultBinding() { final BindingServiceFacade facade = BindingServiceFacade.getDefault(); final IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getService( IBindingService.class); final String schemeId = advisorHelper.getKeyScheme(); final Scheme rienaScheme = facade.getScheme(bindingService, schemeId); try { // saving will activate (!) the scheme: final Binding[] bindings = facade.getBindings(bindingService); facade.savePreferences(bindingService, rienaScheme, bindings); } catch (final IOException ioe) { final Logger logger = Log4r.getLogger(Activator.getDefault(), this.getClass()); logger.log(LogService.LOG_ERROR, "Could not activate scheme: " + schemeId, ioe); //$NON-NLS-1$ } } }