/**
 * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 * 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:
 *         Florian Pirchner - Initial implementation
 */
package org.eclipse.osbp.vaaclipse.addons.keybinding;

import javax.annotation.PostConstruct;

import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.osbp.runtime.web.vaadin.common.shortcuts.ShortcutManager;

/**
 * The Class KeyBindingServiceAddon.
 */
public final class KeyBindingServiceAddon {
	
	/**
	 * Inits the.
	 *
	 * @param context
	 *            the context
	 */
	@PostConstruct
	public void init(IEclipseContext context) {

		MApplication application = context.get(MApplication.class);
		IEclipseContext appCtx = application.getContext();

		// create the binding service eager
		ShortcutManager manager = new ShortcutManager();
		appCtx.set(ShortcutManager.class.getName(), manager);

		IKeyBindingService service = ContextInjectionFactory.make(
				KeyBindingServiceImpl.class, appCtx);
		appCtx.set(IKeyBindingService.class.getName(), service);
	}
}
