b4a479e2d5bb0201f0a6a9fd4492e72f830c2d0c
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.core / src / org / eclipse / tracecompass / internal / tmf / core / component / TmfProviderManager.java
1 /*******************************************************************************
2 * Copyright (c) 2009, 2014 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.tracecompass.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.tracecompass.tmf.core.component.TmfEventProvider;
21 import org.eclipse.tracecompass.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 // ------------------------------------------------------------------------
39 // Keeps track of the providers for each event type
40 // ------------------------------------------------------------------------
41
42 private static Map<Class<? extends ITmfEvent>, List<TmfEventProvider>> fProviders =
43 new HashMap<>();
44
45 /**
46 * Registers [provider] as a provider of [eventType]
47 *
48 * @param eventType
49 * The event type
50 * @param provider
51 * The data provider
52 */
53 public static <T extends ITmfEvent> void register(Class<T> eventType, TmfEventProvider provider) {
54 if (fProviders.get(eventType) == null) {
55 fProviders.put(eventType, new ArrayList<TmfEventProvider>());
56 }
57 fProviders.get(eventType).add(provider);
58 }
59
60 /**
61 * Re-registers [provider] as a provider of [eventType]
62 *
63 * @param eventType
64 * The event type
65 * @param provider
66 * The data provider
67 */
68 public static <T extends ITmfEvent> void deregister(Class<T> eventType, TmfEventProvider provider) {
69 List<TmfEventProvider> list = fProviders.get(eventType);
70 if (list != null) {
71 list.remove(provider);
72 if (list.size() == 0) {
73 fProviders.remove(eventType);
74 }
75 }
76 }
77
78 /**
79 * Returns the list of components that provide [eventType]
80 *
81 * @param eventType
82 * The event type
83 * @return the list of components that provide [eventType]
84 */
85 public static TmfEventProvider[] getProviders(Class<? extends ITmfEvent> eventType) {
86 List<TmfEventProvider> list = fProviders.get(eventType);
87 if (list == null) {
88 list = new ArrayList<>();
89 }
90 TmfEventProvider[] result = new TmfEventProvider[list.size()];
91 return list.toArray(result);
92 }
93
94 /**
95 * Returns the list of components of type [providerType] that provide
96 * [eventType]
97 *
98 * @param eventType
99 * The event type
100 * @param providerType
101 * The data provider
102 * @return the list of components of type [providerType] that provide
103 * [eventType]
104 */
105 public static TmfEventProvider[] getProviders(Class<? extends ITmfEvent> eventType, Class<? extends TmfEventProvider> providerType) {
106 if (providerType == null) {
107 return getProviders(eventType);
108 }
109 TmfEventProvider[] list = getProviders(eventType);
110 List<TmfEventProvider> result = new ArrayList<>();
111 if (list != null) {
112 for (TmfEventProvider provider : list) {
113 if (provider.getClass() == providerType) {
114 result.add(provider);
115 }
116 }
117 }
118 TmfEventProvider[] array = new TmfEventProvider[result.size()];
119 return result.toArray(array);
120 }
121
122 }
This page took 0.034568 seconds and 4 git commands to generate.