~ubuntu-branches/ubuntu/trusty/eclipse-linuxtools/trusty

« back to all changes in this revision

Viewing changes to profiling/org.eclipse.linuxtools.binutils/src/org/eclipse/linuxtools/binutils/utils/STBinutilsFactoryManager.java

  • Committer: Package Import Robot
  • Author(s): Jakub Adam
  • Date: 2012-06-29 12:07:30 UTC
  • Revision ID: package-import@ubuntu.com-20120629120730-bfri1xys1i71dpn6
Tags: upstream-1.0.0
ImportĀ upstreamĀ versionĀ 1.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
7
 *
 
8
 * Contributors:
 
9
 *   Xavier Raynaud <xavier.raynaud@st.com> - initial API and implementation
 
10
 *******************************************************************************/
 
11
package org.eclipse.linuxtools.binutils.utils;
 
12
 
 
13
import java.util.HashMap;
 
14
import java.util.Map;
 
15
 
 
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;
 
23
 
 
24
 
 
25
/**
 
26
 * This class is on charge of managing "org.eclipse.linuxtools.binutils.crossCompilerBinutils" extension point.
 
27
 * @author Xavier Raynaud <xavier.raynaud@st.com>
 
28
 *
 
29
 */
 
30
public class STBinutilsFactoryManager {
 
31
 
 
32
        public static final STBinutilsFactoryManager sharedInstance = new STBinutilsFactoryManager();
 
33
        
 
34
        /**
 
35
         * Map of CPU/ISTBinutilsFactory
 
36
         */
 
37
        private final Map<String, ISTBinutilsFactory> map = new HashMap<String, ISTBinutilsFactory>();
 
38
        
 
39
        /**
 
40
         * Default factory
 
41
         */
 
42
        private DefaultBinutilsFactory defaultFactory;
 
43
        
 
44
        /**
 
45
         * Private constructor: this class is implemented as a Singleton
 
46
         */
 
47
        private STBinutilsFactoryManager() {
 
48
        }
 
49
 
 
50
        /**
 
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
 
54
         */
 
55
        private ISTBinutilsFactory getBinutilsFactoryImpl(String cpu) {
 
56
                try {
 
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");
 
64
                                        if (cpu.equals(s)) {
 
65
                                                ISTBinutilsFactory factory = (ISTBinutilsFactory) configurationElement.createExecutableExtension("binutilsFactory");
 
66
                                                if (factory.testAvailability()) return factory;
 
67
                                        }
 
68
                                }
 
69
                        }
 
70
                } catch (CoreException e) {
 
71
                        Activator.getDefault().getLog().log(e.getStatus());
 
72
                }
 
73
                if (defaultFactory == null) defaultFactory = new DefaultBinutilsFactory();
 
74
                return defaultFactory;
 
75
        }
 
76
        
 
77
        /**
 
78
         * Get a ISTBinutilsFactory matching the given cpu id
 
79
         * Returns the default one if no match.
 
80
         */
 
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);
 
86
                }
 
87
                return factory;
 
88
        }
 
89
        
 
90
}