Add null-checks for Map.get()
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.core / src / org / eclipse / tracecompass / internal / tmf / core / component / TmfProviderManager.java
CommitLineData
8c8bf09f 1/*******************************************************************************
ed902a2b 2 * Copyright (c) 2009, 2014 Ericsson
6256d8ad 3 *
8c8bf09f
ASL
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
6256d8ad 8 *
8c8bf09f
ASL
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
12
2bdf0193 13package org.eclipse.tracecompass.internal.tmf.core.component;
8c8bf09f
ASL
14
15import java.util.ArrayList;
16import java.util.HashMap;
17import java.util.List;
18import java.util.Map;
19
2bdf0193
AM
20import org.eclipse.tracecompass.tmf.core.component.TmfEventProvider;
21import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
8c8bf09f
ASL
22
23/**
8c8bf09f 24 * Singleton that keeps track of the event providers.
6256d8ad 25 *
8fd82db5
FC
26 * @version 1.0
27 * @author Francois Chouinard
8c8bf09f
ASL
28 */
29public class TmfProviderManager {
30
fd3f1eff
AM
31 // ------------------------------------------------------------------------
32 // No constructor
33 // ------------------------------------------------------------------------
ff4ed569 34
fd3f1eff
AM
35 private TmfProviderManager() {
36 }
6256d8ad 37
fd3f1eff
AM
38 // ------------------------------------------------------------------------
39 // Keeps track of the providers for each event type
40 // ------------------------------------------------------------------------
6256d8ad 41
fd3f1eff 42 private static Map<Class<? extends ITmfEvent>, List<TmfEventProvider>> fProviders =
a4524c1b 43 new HashMap<>();
8c8bf09f 44
fd3f1eff
AM
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 */
202956f1
AM
53 public static synchronized <T extends ITmfEvent> void register(Class<T> eventType, TmfEventProvider provider) {
54 List<TmfEventProvider> typeProviders = fProviders.get(eventType);
55 if (typeProviders == null) {
56 typeProviders = new ArrayList<>();
57 fProviders.put(eventType, typeProviders);
6256d8ad 58 }
202956f1 59 typeProviders.add(provider);
fd3f1eff 60 }
8c8bf09f 61
fd3f1eff
AM
62 /**
63 * Re-registers [provider] as a provider of [eventType]
64 *
65 * @param eventType
66 * The event type
67 * @param provider
68 * The data provider
69 */
202956f1 70 public static synchronized <T extends ITmfEvent> void deregister(Class<T> eventType, TmfEventProvider provider) {
fd3f1eff
AM
71 List<TmfEventProvider> list = fProviders.get(eventType);
72 if (list != null) {
73 list.remove(provider);
74 if (list.size() == 0) {
6256d8ad
AM
75 fProviders.remove(eventType);
76 }
fd3f1eff
AM
77 }
78 }
8c8bf09f 79
fd3f1eff
AM
80 /**
81 * Returns the list of components that provide [eventType]
82 *
83 * @param eventType
84 * The event type
85 * @return the list of components that provide [eventType]
86 */
87 public static TmfEventProvider[] getProviders(Class<? extends ITmfEvent> eventType) {
88 List<TmfEventProvider> list = fProviders.get(eventType);
89 if (list == null) {
a4524c1b 90 list = new ArrayList<>();
6256d8ad 91 }
fd3f1eff
AM
92 TmfEventProvider[] result = new TmfEventProvider[list.size()];
93 return list.toArray(result);
94 }
8c8bf09f 95
fd3f1eff
AM
96 /**
97 * Returns the list of components of type [providerType] that provide
98 * [eventType]
99 *
100 * @param eventType
101 * The event type
102 * @param providerType
103 * The data provider
104 * @return the list of components of type [providerType] that provide
105 * [eventType]
106 */
107 public static TmfEventProvider[] getProviders(Class<? extends ITmfEvent> eventType, Class<? extends TmfEventProvider> providerType) {
108 if (providerType == null) {
109 return getProviders(eventType);
110 }
111 TmfEventProvider[] list = getProviders(eventType);
a4524c1b 112 List<TmfEventProvider> result = new ArrayList<>();
fd3f1eff
AM
113 if (list != null) {
114 for (TmfEventProvider provider : list) {
115 if (provider.getClass() == providerType) {
116 result.add(provider);
117 }
118 }
119 }
120 TmfEventProvider[] array = new TmfEventProvider[result.size()];
121 return result.toArray(array);
122 }
8c8bf09f
ASL
123
124}
This page took 0.106845 seconds and 5 git commands to generate.