1
/*******************************************************************************
2
* Copyright (c) 2009 STMicroelectronics.
3
* All rights reserved. This program and the accompanying materials
4
* are made available under the terms of the Eclipse Public License v1.0
5
* which accompanies this distribution, and is available at
6
* http://www.eclipse.org/legal/epl-v10.html
9
* Xavier Raynaud <xavier.raynaud@st.com> - initial API and implementation
10
*******************************************************************************/
11
package org.eclipse.linuxtools.binutils.utils;
13
import java.util.HashMap;
16
import org.eclipse.core.runtime.CoreException;
17
import org.eclipse.core.runtime.IConfigurationElement;
18
import org.eclipse.core.runtime.IExtension;
19
import org.eclipse.core.runtime.IExtensionPoint;
20
import org.eclipse.core.runtime.IExtensionRegistry;
21
import org.eclipse.core.runtime.Platform;
22
import org.eclipse.linuxtools.binutils.Activator;
26
* This class is on charge of managing "org.eclipse.linuxtools.binutils.crossCompilerBinutils" extension point.
27
* @author Xavier Raynaud <xavier.raynaud@st.com>
30
public class STBinutilsFactoryManager {
32
public static final STBinutilsFactoryManager sharedInstance = new STBinutilsFactoryManager();
35
* Map of CPU/ISTBinutilsFactory
37
private final Map<String, ISTBinutilsFactory> map = new HashMap<String, ISTBinutilsFactory>();
42
private DefaultBinutilsFactory defaultFactory;
45
* Private constructor: this class is implemented as a Singleton
47
private STBinutilsFactoryManager() {
51
* Try to find an extension point matching the given cpu;
52
* Then test availability of the tools.
53
* If no match, return default binutils factory
55
private ISTBinutilsFactory getBinutilsFactoryImpl(String cpu) {
57
IExtensionRegistry reg = Platform.getExtensionRegistry();
58
IExtensionPoint ep = reg.getExtensionPoint("org.eclipse.linuxtools.binutils.crossCompilerBinutils");
59
IExtension[] exts = ep.getExtensions();
60
for (IExtension extension : exts) {
61
IConfigurationElement[] elems = extension.getConfigurationElements();
62
for (IConfigurationElement configurationElement : elems) {
63
String s = configurationElement.getAttribute("CPU");
65
ISTBinutilsFactory factory = (ISTBinutilsFactory) configurationElement.createExecutableExtension("binutilsFactory");
66
if (factory.testAvailability()) return factory;
70
} catch (CoreException e) {
71
Activator.getDefault().getLog().log(e.getStatus());
73
if (defaultFactory == null) defaultFactory = new DefaultBinutilsFactory();
74
return defaultFactory;
78
* Get a ISTBinutilsFactory matching the given cpu id
79
* Returns the default one if no match.
81
public ISTBinutilsFactory getBinutilsFactory(String cpu) {
82
ISTBinutilsFactory factory = map.get(cpu);
83
if (factory == null) {
84
factory = getBinutilsFactoryImpl(cpu);
85
map.put(cpu, factory);