Rename xxx.lttng to xxx.lttng.core
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf / src / org / eclipse / linuxtools / tmf / component / TmfProviderManager.java
1 /*******************************************************************************
2 * Copyright (c) 2009, 2010 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.linuxtools.tmf.component;
14
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.List;
18 import java.util.Map;
19
20 import org.eclipse.linuxtools.tmf.event.TmfData;
21
22 /**
23 * <b><u>TmfProviderManager.java</u></b>
24 * <p>
25 * Singleton that keeps track of the event providers.
26 */
27 public class TmfProviderManager {
28
29 // ------------------------------------------------------------------------
30 // No constructor
31 // ------------------------------------------------------------------------
32
33 private TmfProviderManager() {}
34
35 // ------------------------------------------------------------------------
36 // Keeps track of the providers for each event type
37 // ------------------------------------------------------------------------
38
39 private static Map<Class<? extends TmfData>, List<TmfDataProvider<? extends TmfData>>> fProviders =
40 new HashMap<Class<? extends TmfData>, List<TmfDataProvider<? extends TmfData>>>();
41
42 /**
43 * Registers [provider] as a provider of [eventType]
44 *
45 * @param eventType
46 * @param provider
47 */
48 public static <T extends TmfData> void register(Class<T> eventType, TmfDataProvider<? extends TmfData> provider) {
49 if (fProviders.get(eventType) == null)
50 fProviders.put(eventType, new ArrayList<TmfDataProvider<? extends TmfData>>());
51 fProviders.get(eventType).add(provider);
52 }
53
54 /**
55 * Re-registers [provider] as a provider of [eventType]
56 *
57 * @param dataClass
58 * @param provider
59 */
60 public static <T extends TmfData> void deregister(Class<T> dataClass, TmfDataProvider<? extends TmfData> provider) {
61 List<TmfDataProvider<? extends TmfData>> list = fProviders.get(dataClass);
62 if (list != null) {
63 list.remove(provider);
64 if (list.size() == 0)
65 fProviders.remove(dataClass);
66 }
67 }
68
69 /**
70 * Returns the list of components that provide [eventType]
71 *
72 * @param dataClass
73 * @return
74 */
75 @SuppressWarnings("unchecked")
76 public static TmfDataProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> dataClass) {
77 List<TmfDataProvider<? extends TmfData>> list = fProviders.get(dataClass);
78 if (list == null)
79 list = new ArrayList<TmfDataProvider<? extends TmfData>>();
80 TmfDataProvider<? extends TmfData>[] result = new TmfDataProvider[list.size()];
81 return list.toArray(result);
82 }
83
84 /**
85 * Returns the list of components of type [providerType] that provide [eventType]
86 *
87 * @param type
88 * @param clazz
89 * @return
90 */
91 @SuppressWarnings("unchecked")
92 public static TmfDataProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> dataClass, Class<? extends TmfDataProvider<? extends TmfData>> providerClass) {
93 if (providerClass == null) {
94 return getProviders(dataClass);
95 }
96 TmfDataProvider<? extends TmfData>[] list = getProviders(dataClass);
97 List<TmfDataProvider<? extends TmfData>> result = new ArrayList<TmfDataProvider<? extends TmfData>>();
98 if (list != null) {
99 for (TmfDataProvider<? extends TmfData> provider : list) {
100 if (provider.getClass() == providerClass) {
101 result.add(provider);
102 }
103 }
104 }
105 TmfDataProvider<? extends TmfData>[] array = new TmfDataProvider[result.size()];
106 return result.toArray(array);
107 }
108
109 }
This page took 0.033249 seconds and 5 git commands to generate.