April 28, 2010
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf / src / org / eclipse / linuxtools / tmf / component / TmfProviderManager.java
CommitLineData
8c8bf09f
ASL
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
13package org.eclipse.linuxtools.tmf.component;
14
15import java.util.ArrayList;
16import java.util.HashMap;
17import java.util.List;
18import java.util.Map;
19
20import 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 */
27public class TmfProviderManager {
28
8c8bf09f
ASL
29 // ------------------------------------------------------------------------
30 // Keeps track of the providers for each event type
31 // ------------------------------------------------------------------------
32
fc6ccf6f
FC
33 private static Map<Class<? extends TmfData>, List<TmfDataProvider<? extends TmfData>>> fProviders =
34 new HashMap<Class<? extends TmfData>, List<TmfDataProvider<? extends TmfData>>>();
8c8bf09f
ASL
35
36 /**
37 * Registers [provider] as a provider of [eventType]
38 *
39 * @param eventType
40 * @param provider
41 */
fc6ccf6f 42 public static <T extends TmfData> void register(Class<T> eventType, TmfDataProvider<? extends TmfData> provider) {
8c8bf09f 43 if (fProviders.get(eventType) == null)
fc6ccf6f 44 fProviders.put(eventType, new ArrayList<TmfDataProvider<? extends TmfData>>());
e31e01e8 45 assert(fProviders.get(eventType) != null);
8c8bf09f
ASL
46 fProviders.get(eventType).add(provider);
47 }
48
49 /**
50 * Re-registers [provider] as a provider of [eventType]
51 *
fc6ccf6f 52 * @param dataClass
8c8bf09f
ASL
53 * @param provider
54 */
fc6ccf6f
FC
55 public static <T extends TmfData> void deregister(Class<T> dataClass, TmfDataProvider<? extends TmfData> provider) {
56 List<TmfDataProvider<? extends TmfData>> list = fProviders.get(dataClass);
8c8bf09f
ASL
57 if (list != null) {
58 list.remove(provider);
59 if (list.size() == 0)
fc6ccf6f 60 fProviders.remove(dataClass);
8c8bf09f
ASL
61 }
62 }
63
64 /**
65 * Returns the list of components that provide [eventType]
66 *
fc6ccf6f 67 * @param dataClass
8c8bf09f
ASL
68 * @return
69 */
70 @SuppressWarnings("unchecked")
fc6ccf6f
FC
71 public static TmfDataProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> dataClass) {
72 List<TmfDataProvider<? extends TmfData>> list = fProviders.get(dataClass);
8c8bf09f 73 if (list == null)
fc6ccf6f
FC
74 list = new ArrayList<TmfDataProvider<? extends TmfData>>();
75 TmfDataProvider<? extends TmfData>[] result = new TmfDataProvider[list.size()];
8c8bf09f
ASL
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")
fc6ccf6f
FC
87 public static TmfDataProvider<? extends TmfData>[] getProviders(Class<? extends TmfData> dataClass, Class<? extends TmfDataProvider<? extends TmfData>> providerClass) {
88 if (providerClass == null) {
89 return getProviders(dataClass);
90 }
91 TmfDataProvider<? extends TmfData>[] list = getProviders(dataClass);
92 List<TmfDataProvider<? extends TmfData>> result = new ArrayList<TmfDataProvider<? extends TmfData>>();
8c8bf09f 93 if (list != null) {
fc6ccf6f
FC
94 for (TmfDataProvider<? extends TmfData> provider : list) {
95 if (provider.getClass() == providerClass) {
8c8bf09f
ASL
96 result.add(provider);
97 }
98 }
99 }
fc6ccf6f 100 TmfDataProvider<? extends TmfData>[] array = new TmfDataProvider[result.size()];
8c8bf09f
ASL
101 return result.toArray(array);
102 }
103
104}
This page took 0.031083 seconds and 5 git commands to generate.