Rename xxx.lttng to xxx.lttng.core
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf / src / org / eclipse / linuxtools / tmf / component / TmfProviderManager.java
CommitLineData
8c8bf09f
ASL
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
13package org.eclipse.linuxtools.tmf.component;
14
15import java.util.ArrayList;
16import java.util.HashMap;
17import java.util.List;
18import java.util.Map;
19
20import 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 */
27public class TmfProviderManager {
28
ff4ed569
FC
29 // ------------------------------------------------------------------------
30 // No constructor
31 // ------------------------------------------------------------------------
32
33 private TmfProviderManager() {}
34
8c8bf09f
ASL
35 // ------------------------------------------------------------------------
36 // Keeps track of the providers for each event type
37 // ------------------------------------------------------------------------
38
fc6ccf6f
FC
39 private static Map<Class<? extends TmfData>, List<TmfDataProvider<? extends TmfData>>> fProviders =
40 new HashMap<Class<? extends TmfData>, List<TmfDataProvider<? extends TmfData>>>();
8c8bf09f
ASL
41
42 /**
43 * Registers [provider] as a provider of [eventType]
44 *
45 * @param eventType
46 * @param provider
47 */
fc6ccf6f 48 public static <T extends TmfData> void register(Class<T> eventType, TmfDataProvider<? extends TmfData> provider) {
8c8bf09f 49 if (fProviders.get(eventType) == null)
fc6ccf6f 50 fProviders.put(eventType, new ArrayList<TmfDataProvider<? extends TmfData>>());
8c8bf09f
ASL
51 fProviders.get(eventType).add(provider);
52 }
53
54 /**
55 * Re-registers [provider] as a provider of [eventType]
56 *
fc6ccf6f 57 * @param dataClass
8c8bf09f
ASL
58 * @param provider
59 */
fc6ccf6f
FC
60 public static <T extends TmfData> void deregister(Class<T> dataClass, TmfDataProvider<? extends TmfData> provider) {
61 List<TmfDataProvider<? extends TmfData>> list = fProviders.get(dataClass);
8c8bf09f
ASL
62 if (list != null) {
63 list.remove(provider);
64 if (list.size() == 0)
fc6ccf6f 65 fProviders.remove(dataClass);
8c8bf09f
ASL
66 }
67 }
68
69 /**
70 * Returns the list of components that provide [eventType]
71 *
fc6ccf6f 72 * @param dataClass
8c8bf09f
ASL
73 * @return
74 */
75 @SuppressWarnings("unchecked")
fc6ccf6f
FC
76 public static TmfDataProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> dataClass) {
77 List<TmfDataProvider<? extends TmfData>> list = fProviders.get(dataClass);
8c8bf09f 78 if (list == null)
fc6ccf6f
FC
79 list = new ArrayList<TmfDataProvider<? extends TmfData>>();
80 TmfDataProvider<? extends TmfData>[] result = new TmfDataProvider[list.size()];
8c8bf09f
ASL
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")
fc6ccf6f
FC
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>>();
8c8bf09f 98 if (list != null) {
fc6ccf6f
FC
99 for (TmfDataProvider<? extends TmfData> provider : list) {
100 if (provider.getClass() == providerClass) {
8c8bf09f
ASL
101 result.add(provider);
102 }
103 }
104 }
fc6ccf6f 105 TmfDataProvider<? extends TmfData>[] array = new TmfDataProvider[result.size()];
8c8bf09f
ASL
106 return result.toArray(array);
107 }
108
109}
This page took 0.037324 seconds and 5 git commands to generate.