blob: e73d299fac036730e8f21e9059fcf6d7028e3288 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 É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 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.analysis.graph.core.building;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.analysis.graph.core.base.TmfGraph;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
/**
* This is the interface used to define the execution graph building logic.
*
* Usually the graph builder is the piece of the pipeline which converts trace
* events to an execution graph.
*
* @author Francis Giraldeau
* @author Geneviève Bastien
*/
public interface ITmfGraphProvider {
/**
* Get the trace with which this graph builder plugin is associated.
*
* @return The associated trace
*/
ITmfTrace getTrace();
/**
* Return the start time of this "graph builder", which is normally the
* start time of the originating trace (or it can be the time of the first
* node in the graph).
*
* @return The start time
*/
long getStartTime();
/**
* Assign the target graph where this builder will add new nodes and
* vertices
*
* This needs to be called before .run()!
*
* @param graph
* Target graph for the state changes generated by this input
* plugin
*/
void assignTargetGraph(TmfGraph graph);
/**
* Return the currently assigned target graph.
*
* @return Reference to the currently assigned graph, or {@code null} if no
* graph is assigned yet
*/
@Nullable
TmfGraph getAssignedGraph();
/**
* Send an event to this input plugin for processing. The implementation
* should check the contents, and call the state-modifying methods of its
* IStateSystemBuilder object accordingly.
*
* @param event
* The event (which should be safe to cast to the
* expectedEventType) that has to be processed.
*/
void processEvent(ITmfEvent event);
/**
* Indicate to the graph building process that we are done (for now), and
* that it should close the current graph.
*/
void dispose();
/**
* Performs the necessary actions when the build is cancelled
*/
void handleCancel();
/**
* Callback when graph is complete
*/
void done();
}