[Bug 303523] LTTng/TMF udpates:
[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 // Keeps track of the providers for each event type
31 // ------------------------------------------------------------------------
32
33 private static Map<Class<? extends TmfData>, List<TmfProvider<? extends TmfData>>> fProviders =
34 new HashMap<Class<? extends TmfData>, List<TmfProvider<? extends TmfData>>>();
35
36 /**
37 * Registers [provider] as a provider of [eventType]
38 *
39 * @param eventType
40 * @param provider
41 */
42 public static <T extends TmfData> void register(Class<T> eventType, TmfProvider<? extends TmfData> provider) {
43 if (fProviders.get(eventType) == null)
44 fProviders.put(eventType, new ArrayList<TmfProvider<? extends TmfData>>());
45 assert(fProviders.get(eventType) != null);
46 fProviders.get(eventType).add(provider);
47 }
48
49 /**
50 * Re-registers [provider] as a provider of [eventType]
51 *
52 * @param eventType
53 * @param provider
54 */
55 public static <T extends TmfData> void deregister(Class<T> eventType, TmfProvider<? extends TmfData> provider) {
56 List<TmfProvider<? extends TmfData>> list = fProviders.get(eventType);
57 if (list != null) {
58 list.remove(provider);
59 if (list.size() == 0)
60 fProviders.remove(eventType);
61 }
62 }
63
64 /**
65 * Returns the list of components that provide [eventType]
66 *
67 * @param eventType
68 * @return
69 */
70 @SuppressWarnings("unchecked")
71 public static TmfProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> eventType) {
72 List<TmfProvider<? extends TmfData>> list = fProviders.get(eventType);
73 if (list == null)
74 list = new ArrayList<TmfProvider<? extends TmfData>>();
75 TmfProvider<? extends TmfData>[] result = new TmfProvider[list.size()];
76 return list.toArray(result);
77 }
78
79 /**
80 * Returns the list of components of type [providerType] that provide [eventType]
81 *
82 * @param type
83 * @param clazz
84 * @return
85 */
86 @SuppressWarnings("unchecked")
87 public static TmfProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> eventType, Class<? extends TmfProvider<? extends TmfData>> providerType) {
88 TmfProvider<? extends TmfData>[] list = getProviders(eventType);
89 List<TmfProvider<? extends TmfData>> result = new ArrayList<TmfProvider<? extends TmfData>>();
90 if (list != null) {
91 for (TmfProvider<? extends TmfData> provider : list) {
92 if (provider.getClass() == providerType) {
93 result.add(provider);
94 }
95 }
96 }
97 TmfProvider<? extends TmfData>[] array = new TmfProvider[result.size()];
98 return result.toArray(array);
99 }
100
101 }
This page took 0.031263 seconds and 5 git commands to generate.