/******************************************************************************* * Copyright (c) 2013, 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.tests.stubs.analysis; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.tmf.core.analysis.TmfAbstractAnalysisModule; import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace; /** * Simple analysis type for test */ public class TestAnalysis extends TmfAbstractAnalysisModule { /** * Test parameter. If set, simulate cancellation */ public static final @NonNull String PARAM_TEST = "test"; private int fOutput = 0; /** * Constructor */ public TestAnalysis() { super(); } @Override public boolean canExecute(ITmfTrace trace) { return true; } @Override protected boolean executeAnalysis(final IProgressMonitor monitor) { Object parameter = getParameter(PARAM_TEST); if (!(parameter instanceof Integer)) { throw new RuntimeException("The parameter should be set"); } int integer = ((Integer) parameter).intValue(); /* If PARAM_TEST is set to 0, simulate cancellation */ fOutput = integer; if (integer == 0) { return false; } else if (integer == 999) { /* just stay in an infinite loop until cancellation */ while (!monitor.isCanceled()) { try { Thread.sleep(0); } catch (InterruptedException e) { break; } } return !monitor.isCanceled(); } return true; } @Override protected void canceling() { fOutput = -1; } @Override public synchronized Object getParameter(String name) { Object value = super.getParameter(name); if ((value != null) && name.equals(PARAM_TEST) && (value instanceof String)) { return Integer.decode((String) value); } return value; } @Override protected void parameterChanged(String name) { schedule(); } /** * Get the analysis output value * * @return The analysis output */ public int getAnalysisOutput() { return fOutput; } }