/*******************************************************************************
* Copyright (c) 2014 École Polytechnique de Montréal
*
* 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:
* Geneviève Bastien - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.trace.experiment;
import java.util.Collection;
import java.util.HashSet;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
/**
* This utility class contains some utility methods to retrieve specific traces
* or analysis in an experiment.
*
* @author Geneviève Bastien
*/
@NonNullByDefault
public final class TmfExperimentUtils {
private TmfExperimentUtils() {
}
// ------------------------------------------------------------------------
// Utility methods for analysis modules
// ------------------------------------------------------------------------
private static Iterable<ITmfTrace> getTracesFromHost(TmfExperiment experiment, String hostId) {
Collection<ITmfTrace> hostTraces = new HashSet<>();
for (ITmfTrace trace : experiment.getTraces()) {
if (trace.getHostId().equals(hostId)) {
hostTraces.add(trace);
}
}
return hostTraces;
}
/**
* Get a specific analysis module from a specific host of an experiment. It
* will return the first module with the given ID from the first trace of
* the host that has such a module.
*
* @param experiment
* The experiment the host belongs to
* @param hostId
* The ID of the host for which we want the specified analysis
* @param analysisId
* The ID of the requested analysis
* @return The requested analysis module or {@code null} if no module found
*/
public static @Nullable IAnalysisModule getAnalysisModuleForHost(TmfExperiment experiment, String hostId, String analysisId) {
for (ITmfTrace trace : getTracesFromHost(experiment, hostId)) {
IAnalysisModule module = trace.getAnalysisModule(analysisId);
if (module != null) {
return module;
}
}
return null;
}
/**
* Get an analysis module of a specific class from a specific host of an
* experiment. It will return the first module of the given class from the
* first trace of the host that has such a module.
*
* @param experiment
* The experiment the host belongs to
* @param hostId
* The ID of the host for which we want the specified analysis
* @param moduleClass
* The class of the analysis module to return
* @return The first analysis module of the given class or {@code null} if
* no module found
*/
public static @Nullable <T extends IAnalysisModule> T getAnalysisModuleOfClassForHost(TmfExperiment experiment, String hostId, Class<T> moduleClass) {
for (ITmfTrace trace : getTracesFromHost(experiment, hostId)) {
for (T module : TmfTraceUtils.getAnalysisModulesOfClass(trace, moduleClass)) {
return module;
}
}
return null;
}
}