/******************************************************************************* * Copyright (c) 2007, 2008 Symbian Software Limited 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: * Bala Torati (Symbian) - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.templateengine.process; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.templateengine.TemplateEngineUtil; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; /** * Factory class for creating the Process Runners. */ public class ProcessRunnerFactory { private static final String EXTENSION_POINT_PROCESSES = CCorePlugin.PLUGIN_ID + ".templateProcessTypes"; //$NON-NLS-1$ private static final String ELEM_NAME = "name"; //$NON-NLS-1$ private static final String ELEM_PROCESS_RUNNER = "processRunner"; //$NON-NLS-1$ private static ProcessRunnerFactory instance; static { instance = new ProcessRunnerFactory(); } private Map<String, ProcessRunner> processRunnerMap; private ProcessRunnerFactory() { initializeProcessRunners(); } /** * Initialises the process runners. * */ private synchronized void initializeProcessRunners() { processRunnerMap = new HashMap<String, ProcessRunner>(); IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(EXTENSION_POINT_PROCESSES); IExtension[] extensions = point.getExtensions(); for(int i=0; i<extensions.length; i++) { IExtension extension = extensions[i]; String prefix = extension.getNamespaceIdentifier() + "."; //$NON-NLS-1$ IConfigurationElement[] configurationElements = extension.getConfigurationElements(); for(int j=0; j<configurationElements.length; j++) { IConfigurationElement element = configurationElements[j]; String processType = element.getAttribute(ELEM_NAME); if (processType != null) { try { ProcessRunner runner = (ProcessRunner) element.createExecutableExtension(ELEM_PROCESS_RUNNER); List<ProcessParameter> params = null; IConfigurationElement[] elementChildren = element.getChildren(); for (int k=0; k<elementChildren.length; k++) { if (params == null) { params = new ArrayList<ProcessParameter>(); } params.add(new ProcessParameter(elementChildren[k])); } if (params != null) { runner.setProcessParameters(params.toArray(new ProcessParameter[params.size()])); } processRunnerMap.put(prefix + processType, runner); } catch (CoreException e) { TemplateEngineUtil.log(e); } } } } } /** * @return the singleton {@link ProcessRunnerFactory} */ public static ProcessRunnerFactory getDefault() { return instance; } /** * @param processType * @return the ProcessRunner based on the ProcessType. */ public ProcessRunner getProcessRunner(String processType) { return processRunnerMap.get(processType); } }