/*******************************************************************************
 * Copyright (c) 2012 Joseph Carroll
 * 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:
 *     Joseph Carroll <jdsalingerjr@gmail.com> - initial API and implementation
 *******************************************************************************/
package braintrader.blockdiagram.ui.parts;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;

import braintrader.blockdiagram.ui.internal.BlockDiagramActivator;
import braintrader.blockdiagram.ui.internal.parts.BlockDiagramEditor;
import braintrader.blockdiagram.ui.internal.parts.BlockLibraryView;
import braintrader.core.di.InjectorConstants;
import braintrader.platform.workbench.common.InjectableExecutableExtensionFactory;
import braintrader.platform.workbench.util.URIAssistant;

/**
 * @author Joseph Carroll
 *
 */
public class BlockDiagramPartFactory extends InjectableExecutableExtensionFactory {

	public static final String BLOCK_DIAGRAM_EDITOR = "braintrader.blockdiagram.ui.blockdiagrameditor"; //$NON-NLS-1$
	
	public static final String BLOCK_LIBRARY_VIEWER = "braintrader.blockdiagram.ui.view.blocklibrary"; //$NON-NLS-1$
	
	@Override
	public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
		Map<String,Object> map = new HashMap<>(4);
		String resourceKey = null;
		if (data instanceof String) {
			resourceKey = (String) data;
		}
		
		// add the context's first to allow switch to override
		map.put(InjectorConstants.TRADER_CONTEXT, null);
		map.put(InjectorConstants.WORKBENCH_CONTEXT, null);
		
		switch (resourceKey) {
		case BLOCK_DIAGRAM_EDITOR: {
			String resourceURI = URIAssistant.getResourceURI_String(BlockDiagramActivator.getDefault().getBundle(), 
					BlockDiagramEditor.class);
			map.put(InjectorConstants.CONTRIBUTION_URI, resourceURI);
			// map.put(... specific context??
			break;
		} case BLOCK_LIBRARY_VIEWER: {
			String resourceURI = URIAssistant.getResourceURI_String(BlockDiagramActivator.getDefault().getBundle(), 
					BlockLibraryView.class);
			map.put(InjectorConstants.CONTRIBUTION_URI, resourceURI);
			// map.put(... specific context??
			break;
		} default: {
			String resourceURI = URIAssistant.getResourceURI_String(BlockDiagramActivator.getDefault().getBundle()
					.getSymbolicName(), resourceKey);
			map.put(InjectorConstants.CONTRIBUTION_URI, resourceURI);
		}
		}
				
		parseInitializationData(config, map);
	}

}
