/**
 * Copyright (c) 2011, 2014 - 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.common.ecview;

import org.eclipse.e4.core.contexts.ContextFunction;
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.vaaclipse.common.ecview.api.IECViewContainer;
import org.osgi.service.component.annotations.Component;

@Component(service = org.eclipse.e4.core.contexts.IContextFunction.class, property = { "service.context.key=org.eclipse.osbp.vaaclipse.common.ecview.api.IECViewContainer" })
public class ECViewContainerContextFunction extends ContextFunction {
 
	@Override
	public Object compute(IEclipseContext context, String contextKey) {
		// add the new object to the application context
		MApplication application = context.get(MApplication.class);
		IEclipseContext appCtx = application.getContext();

		ECViewContainer container = ContextInjectionFactory.make(
				ECViewContainer.class, appCtx);

		appCtx.set(IECViewContainer.class, container);

		return container;
	}
}
