1 /*******************************************************************************
2 * Copyright (c) 2009, 2013 Ericsson
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
10 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.internal
.tmf
.core
.component
;
15 import java
.util
.ArrayList
;
16 import java
.util
.HashMap
;
17 import java
.util
.List
;
20 import org
.eclipse
.linuxtools
.tmf
.core
.component
.TmfEventProvider
;
21 import org
.eclipse
.linuxtools
.tmf
.core
.event
.ITmfEvent
;
24 * Singleton that keeps track of the event providers.
27 * @author Francois Chouinard
29 public class TmfProviderManager
{
31 // ------------------------------------------------------------------------
33 // ------------------------------------------------------------------------
35 private TmfProviderManager() {
38 // ------------------------------------------------------------------------
39 // Keeps track of the providers for each event type
40 // ------------------------------------------------------------------------
42 private static Map
<Class
<?
extends ITmfEvent
>, List
<TmfEventProvider
>> fProviders
=
46 * Registers [provider] as a provider of [eventType]
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
>());
57 fProviders
.get(eventType
).add(provider
);
61 * Re-registers [provider] as a provider of [eventType]
68 public static <T
extends ITmfEvent
> void deregister(Class
<T
> eventType
, TmfEventProvider provider
) {
69 List
<TmfEventProvider
> list
= fProviders
.get(eventType
);
71 list
.remove(provider
);
72 if (list
.size() == 0) {
73 fProviders
.remove(eventType
);
79 * Returns the list of components that provide [eventType]
83 * @return the list of components that provide [eventType]
85 public static TmfEventProvider
[] getProviders(Class
<?
extends ITmfEvent
> eventType
) {
86 List
<TmfEventProvider
> list
= fProviders
.get(eventType
);
88 list
= new ArrayList
<>();
90 TmfEventProvider
[] result
= new TmfEventProvider
[list
.size()];
91 return list
.toArray(result
);
95 * Returns the list of components of type [providerType] that provide
100 * @param providerType
102 * @return the list of components of type [providerType] that provide
105 public static TmfEventProvider
[] getProviders(Class
<?
extends ITmfEvent
> eventType
, Class
<?
extends TmfEventProvider
> providerType
) {
106 if (providerType
== null) {
107 return getProviders(eventType
);
109 TmfEventProvider
[] list
= getProviders(eventType
);
110 List
<TmfEventProvider
> result
= new ArrayList
<>();
112 for (TmfEventProvider provider
: list
) {
113 if (provider
.getClass() == providerType
) {
114 result
.add(provider
);
118 TmfEventProvider
[] array
= new TmfEventProvider
[result
.size()];
119 return result
.toArray(array
);