blob: a9394ddbb7aa8fbf0485c4b11361d64c0f32cf8b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 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:
* Patrick Tasse - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.filter.model;
import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
import org.eclipse.tracecompass.tmf.core.event.aspect.TmfEventFieldAspect;
/**
* Base class for filter nodes which use event aspects
*
* @author Patrick Tasse
*/
public abstract class TmfFilterAspectNode extends TmfFilterTreeNode implements ITmfFilterWithNot {
/** event aspect attribute name */
public static final String EVENT_ASPECT_ATTR = "eventaspect"; //$NON-NLS-1$
/** trace type id attribute name */
public static final String TRACE_TYPE_ID_ATTR = "tracetypeid"; //$NON-NLS-1$
/** field attribute name */
public static final String FIELD_ATTR = "field"; //$NON-NLS-1$
/** special case trace type id for base aspects */
public static final String BASE_ASPECT_ID = "BASE.ASPECT.ID"; //$NON-NLS-1$
/** event aspect */
protected ITmfEventAspect<?> fEventAspect;
private String fTraceTypeId;
private boolean fNot;
/**
* @param parent the parent node
*/
public TmfFilterAspectNode(ITmfFilterTreeNode parent) {
super(parent);
}
/**
* @return The event aspect of this filter
*/
public ITmfEventAspect<?> getEventAspect() {
return fEventAspect;
}
/**
* @param aspect
* The event aspect to assign to this filter
*/
public void setEventAspect(ITmfEventAspect<?> aspect) {
fEventAspect = aspect;
}
/**
* @return The trace type id from which the event aspect belongs, or a
* special case id
* @see #BASE_ASPECT_ID
*/
public String getTraceTypeId() {
return fTraceTypeId;
}
/**
* @param traceTypeId
* The trace type id from which the event aspect belongs, or a
* special case id
* @see #BASE_ASPECT_ID
*/
public void setTraceTypeId(String traceTypeId) {
fTraceTypeId = traceTypeId;
}
/**
* @param explicit
* true if the string representation should explicitly include
* the trace type id that can differentiate it from other aspects
* with the same name
*
* @return The string representation of the event aspect
*/
public String getAspectLabel(boolean explicit) {
if (fEventAspect == null) {
return ""; //$NON-NLS-1$
}
StringBuilder sb = new StringBuilder(fEventAspect.getName());
if (explicit) {
sb.append('[');
sb.append(fTraceTypeId);
sb.append(']');
}
if (fEventAspect instanceof TmfEventFieldAspect) {
String field = ((TmfEventFieldAspect) fEventAspect).getFieldPath();
if (field != null && !field.isEmpty()) {
if (field.charAt(0) != '/') {
sb.append('/');
}
sb.append(field);
}
}
return sb.toString();
}
@Override
public ITmfFilterTreeNode clone() {
TmfFilterAspectNode clone = (TmfFilterAspectNode) super.clone();
clone.setEventAspect(fEventAspect);
clone.setTraceTypeId(fTraceTypeId);
return clone;
}
@Override
public boolean isNot() {
return fNot;
}
@Override
public void setNot(boolean not) {
fNot = not;
}
}