/******************************************************************************* * Copyright (c) 2010, 2016 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: * Patrick Tasse - Initial API and implementation * Alexandre Montplaisir - Update for TmfEventTableColumn *******************************************************************************/ package org.eclipse.tracecompass.internal.tmf.core.parsers.custom; import java.util.ArrayList; import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect; import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects; import org.eclipse.tracecompass.tmf.core.event.aspect.TmfContentFieldAspect; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition.OutputColumn; import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomTraceDefinition.Tag; import com.google.common.collect.ImmutableList; /** * Event aspects for Custom {Text|XML} traces. * * Since this definition will be different for every single custom trace, we * cannot define specific {@link ITmfEventAspect} in advance. * * Instead, one has to call {@link #generateAspects(CustomTraceDefinition)} * with the CustomTraceDefinition of the the particular trace to display. * * @author Alexandre Montplaisir */ public class CustomEventAspects { /** * Build a set of event aspects for a given trace definition * * @param definition * The {@link CustomTraceDefinition} of the trace for which you * want the aspects * @return The set of event aspects for the given trace */ public static @NonNull Iterable<ITmfEventAspect<?>> generateAspects(CustomTraceDefinition definition) { List<String> fieldNames = new ArrayList<>(); ImmutableList.Builder<ITmfEventAspect<?>> builder = new ImmutableList.Builder<>(); for (OutputColumn output : definition.outputs) { if (output.tag.equals(Tag.TIMESTAMP) && (definition.timeStampOutputFormat == null || definition.timeStampOutputFormat.isEmpty())) { builder.add(TmfBaseAspects.getTimestampAspect()); fieldNames.add(output.name); } else if (output.tag.equals(Tag.EVENT_TYPE)) { builder.add(TmfBaseAspects.getEventTypeAspect()); fieldNames.add(output.name); } else if (output.tag.equals(Tag.EXTRA_FIELD_NAME) || output.tag.equals(Tag.EXTRA_FIELD_VALUE)) { // These tags should have been substituted with Tag.EXTRA_FIELDS continue; } else if (output.tag.equals(Tag.EXTRA_FIELDS)) { builder.add(new CustomExtraFieldsAspect()); } else { builder.add(new TmfContentFieldAspect(output.name, output.name)); fieldNames.add(output.name); } } return builder.build(); } }