/******************************************************************************* * Copyright (c) 2016 É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 *******************************************************************************/ package org.eclipse.tracecompass.analysis.os.linux.core.trace; import java.util.Set; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisEventRequirement; import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAbstractAnalysisRequirement; import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAbstractAnalysisRequirement.PriorityLevel; import com.google.common.collect.ImmutableList.Builder; /** * This class is a pre-requirement class who will instanciate at runtime the * actual requirements depending on a trace's event layout * * @author Geneviève Bastien * @since 2.0 */ public class KernelEventLayoutRequirement { /** * Functional interface that maps a layout to an event name */ @FunctionalInterface public interface ILayoutToEventName { /** * This method will return the event name mapped by this requirement * from the layout. The returned event name may be <code>null</code> in * some layouts. * * @param layout * The event layout of the trace * @return The event name */ @Nullable String getEventName(IKernelAnalysisEventLayout layout); } private final Set<ILayoutToEventName> fEventNames; private final PriorityLevel fLevel; /** * Constructor * * @param layoutReqs * The layout mappings this requirement represents * @param level * Whether the requirement represented by these mapping is * mandatory or optional */ public KernelEventLayoutRequirement(Set<ILayoutToEventName> layoutReqs, PriorityLevel level) { fEventNames = layoutReqs; fLevel = level; } /** * Build a real requirement from the layout mapping to be matched with a * real trace's layout * * @param layout * The event layout from which to build the requirements. * @return The real requirement */ public TmfAbstractAnalysisRequirement instanciateRequirements(IKernelAnalysisEventLayout layout) { Builder<String> events = new Builder<>(); for (ILayoutToEventName eventNameLayout : fEventNames) { String eventName = eventNameLayout.getEventName(layout); if (eventName != null) { events.add(eventName); } } return new TmfAnalysisEventRequirement(events.build(), fLevel); } }