blob: f5a6b326de19e2aa95d7d15c17e3a2423bc167c8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2016 Ericsson
*
* 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
*
* Contributors:
* Alexandre Montplaisir - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.event.aspect;
import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.osgi.util.NLS;
import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException;
import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
/**
* Aspect representing a query in a given state system, at the timestamp of the
* event.
*
* This is a good example of how aspects can be "indirect" with regards to their
* events.
*
* @author Alexandre Montplaisir
*/
public class TmfStateSystemAspect implements ITmfEventAspect<String> {
private final @Nullable String fName;
private final ITmfStateSystem fSS;
private final int fAttribute;
/**
* Constructor
*
* @param name
* The name of this aspect. You can use 'null' to use the
* default name, which is the (base) name of the attribute.
* @param ss
* The state system in which we want to query
* @param attributeQuark
* The quark of the attribute in the state system to look for
*/
public TmfStateSystemAspect(@Nullable String name, ITmfStateSystem ss, int attributeQuark) {
fName = name;
fSS = ss;
fAttribute = attributeQuark;
}
@Override
public String getName() {
String name = fName;
if (name != null) {
return name;
}
name = fSS.getFullAttributePath(fAttribute);
return name;
}
@Override
public @NonNull String getHelpText() {
return Messages.getMessage(NLS.bind(Messages.AspectHelpText_Statesystem,
fSS.getSSID(), fSS.getFullAttributePath(fAttribute)));
}
@Override
public @Nullable String resolve(ITmfEvent event) {
try {
ITmfStateValue value = fSS.querySingleState(event.getTimestamp().getValue(), fAttribute).getStateValue();
return checkNotNull(value.toString());
} catch (StateSystemDisposedException e) {
return null;
}
}
}