| /******************************************************************************* |
| * Copyright (c) 2011, 2014 Ericsson |
| * |
| * All rights reserved. This program and the accompanying materials are |
| * made available under the terms of the Eclipse Public License v1.0 which |
| * accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Mathieu Denis <mathieu.denis@polymtl.ca> - Initial API |
| *******************************************************************************/ |
| |
| package org.eclipse.tracecompass.internal.tmf.ui.viewers.statistics.model; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| /** |
| * Factory class to create and store TMF statistic trees. |
| * |
| * Based on a given tree node ID a TMF statistic tree is stored internally. A |
| * root node is created for each tree. Using the tree node ID the statistics |
| * tree can be retrieved. |
| * |
| * @author Mathieu Denis |
| */ |
| public class TmfStatisticsTreeManager { |
| |
| /** |
| * Contains the experiment name as the key and the traces data |
| */ |
| private static final Map<String, TmfStatisticsTree> fTreeInstances = new HashMap<>(); |
| |
| private TmfStatisticsTreeManager() { |
| // Do nothing, private constructor |
| } |
| |
| /** |
| * Provide a statisticsTree instance per trace |
| * |
| * @param traceUniqueId |
| * Unique ID for the trace |
| * @return The root node of the corresponding trace statistics tree |
| */ |
| public static TmfStatisticsTreeNode getStatTreeRoot(String traceUniqueId) { |
| |
| TmfStatisticsTree tree = getStatTree(traceUniqueId); |
| if (tree == null) { |
| return null; |
| } |
| return tree.getRootNode(); |
| } |
| |
| /** |
| * Get the tree that's being used for statistics |
| * |
| * @param traceUniqueId |
| * Unique ID for the trace |
| * @return the corresponding trace statistics tree |
| */ |
| public static TmfStatisticsTree getStatTree(String traceUniqueId) { |
| if (traceUniqueId == null) { |
| return null; |
| } |
| |
| TmfStatisticsTree tree = fTreeInstances.get(traceUniqueId); |
| return tree; |
| } |
| |
| /** |
| * Add the new trace statistics data in the tree. Can be used later on if |
| * the same traces is selected back. |
| * |
| * @param traceUniqueId |
| * The name of the trace which will be used as a key to store the |
| * data. Must be different for each traces, otherwise the traces |
| * might be overwritten which would trigger a reload of the same |
| * trace. |
| * @param statsData |
| * The information about the trace |
| * @return The newly created root node of the trace statistics tree, or null if something went wrong |
| */ |
| public static TmfStatisticsTreeNode addStatsTreeRoot(String traceUniqueId, TmfStatisticsTree statsData) { |
| if (traceUniqueId == null || statsData == null) { |
| return null; |
| } |
| fTreeInstances.put(traceUniqueId, statsData); |
| return statsData.getRootNode(); |
| } |
| |
| /** |
| * Return if the given trace is currently known by the statistics manager. |
| * |
| * @param traceUniqueId |
| * The unique ID of the trace |
| * @return true if the trace id is known |
| */ |
| public static boolean containsTreeRoot(String traceUniqueId) { |
| return fTreeInstances.containsKey(traceUniqueId); |
| } |
| |
| /** |
| * Remove previously registered statistics tree. |
| * |
| * @param traceUniqueId |
| * The unique ID of the trace |
| */ |
| public static void removeStatTreeRoot(String traceUniqueId) { |
| if (traceUniqueId != null && fTreeInstances.containsKey(traceUniqueId)) { |
| fTreeInstances.remove(traceUniqueId); |
| } |
| } |
| |
| /** |
| * Remove all tree and root instances |
| */ |
| public static void removeAll() { |
| fTreeInstances.clear(); |
| } |
| } |