Merge branch 'master' into lttng-kepler
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.core / src / org / eclipse / linuxtools / internal / tmf / core / 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.internal.tmf.core.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.core.component.TmfDataProvider;
21 import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
22
23 /**
24 * Singleton that keeps track of the event providers.
25 *
26 * @version 1.0
27 * @author Francois Chouinard
28 */
29 public class TmfProviderManager {
30
31 // ------------------------------------------------------------------------
32 // No constructor
33 // ------------------------------------------------------------------------
34
35 private TmfProviderManager() {}
36
37 // ------------------------------------------------------------------------
38 // Keeps track of the providers for each event type
39 // ------------------------------------------------------------------------
40
41 private static Map<Class<? extends ITmfEvent>, List<TmfDataProvider>> fProviders =
42 new HashMap<Class<? extends ITmfEvent>, List<TmfDataProvider>>();
43
44 /**
45 * Registers [provider] as a provider of [eventType]
46 *
47 * @param eventType The event type
48 * @param provider The data provider
49 */
50 public static <T extends ITmfEvent> void register(Class<T> eventType, TmfDataProvider provider) {
51 if (fProviders.get(eventType) == null) {
52 fProviders.put(eventType, new ArrayList<TmfDataProvider>());
53 }
54 fProviders.get(eventType).add(provider);
55 }
56
57 /**
58 * Re-registers [provider] as a provider of [eventType]
59 *
60 * @param eventType The event type
61 * @param provider The data provider
62 */
63 public static <T extends ITmfEvent> void deregister(Class<T> eventType, TmfDataProvider provider) {
64 List<TmfDataProvider> list = fProviders.get(eventType);
65 if (list != null) {
66 list.remove(provider);
67 if (list.size() == 0) {
68 fProviders.remove(eventType);
69 }
70 }
71 }
72
73 /**
74 * Returns the list of components that provide [eventType]
75 *
76 * @param eventType The event type
77 * @return the list of components that provide [eventType]
78 */
79 public static TmfDataProvider[] getProviders(Class<? extends ITmfEvent> eventType) {
80 List<TmfDataProvider> list = fProviders.get(eventType);
81 if (list == null) {
82 list = new ArrayList<TmfDataProvider>();
83 }
84 TmfDataProvider[] result = new TmfDataProvider[list.size()];
85 return list.toArray(result);
86 }
87
88 /**
89 * Returns the list of components of type [providerType] that provide [eventType]
90 *
91 * @param eventType The event type
92 * @param providerType The data provider
93 * @return the list of components of type [providerType] that provide [eventType]
94 */
95 public static TmfDataProvider[] getProviders(Class<? extends ITmfEvent> eventType, Class<? extends TmfDataProvider> providerType) {
96 if (providerType == null) {
97 return getProviders(eventType);
98 }
99 TmfDataProvider[] list = getProviders(eventType);
100 List<TmfDataProvider> result = new ArrayList<TmfDataProvider>();
101 if (list != null) {
102 for (TmfDataProvider provider : list) {
103 if (provider.getClass() == providerType) {
104 result.add(provider);
105 }
106 }
107 }
108 TmfDataProvider[] array = new TmfDataProvider[result.size()];
109 return result.toArray(array);
110 }
111
112 }
This page took 0.14529 seconds and 6 git commands to generate.