/******************************************************************************* * 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 v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bernd Hufmann - Initial API and implementation *******************************************************************************/ package org.eclipse.tracecompass.internal.tmf.core.filter; import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.tmf.core.event.ITmfEvent; import org.eclipse.tracecompass.tmf.core.event.collapse.ITmfCollapsibleEvent; import org.eclipse.tracecompass.tmf.core.filter.model.ITmfFilterTreeNode; /** * Stateful filter that compares consecutive events for collapsing feature. * * Usage of this class in conjunction with other {@link ITmfFilterTreeNode} * filters is not supported. Will throw {@link UnsupportedOperationException} * in that case. * * @author Bernd Hufmann */ public class TmfCollapseFilter implements ITmfFilterTreeNode { private static final String COLLAPSE_NODE_NAME = "Collapse"; //$NON-NLS-1$ private ITmfCollapsibleEvent fPrevEvent = null; @Override public boolean matches(ITmfEvent event) { if (fPrevEvent != null) { if (event instanceof ITmfCollapsibleEvent) { boolean isCollapsible = fPrevEvent.isCollapsibleWith(event); fPrevEvent = (ITmfCollapsibleEvent) event; if (isCollapsible) { return false; } } else { fPrevEvent = null; } } else { if (event instanceof ITmfCollapsibleEvent) { fPrevEvent = (ITmfCollapsibleEvent) event; } } return true; } @Override public ITmfFilterTreeNode getParent() { return null; } @Override public String getNodeName() { return COLLAPSE_NODE_NAME; } @Override public boolean hasChildren() { return false; } @Override public int getChildrenCount() { return 0; } @Override public @NonNull ITmfFilterTreeNode[] getChildren() { return new @NonNull ITmfFilterTreeNode[0]; } @Override public ITmfFilterTreeNode getChild(int index) { throw new UnsupportedOperationException(); } @Override public ITmfFilterTreeNode remove() { throw new UnsupportedOperationException(); } @Override public ITmfFilterTreeNode removeChild(ITmfFilterTreeNode node) { throw new UnsupportedOperationException(); } @Override public int addChild(ITmfFilterTreeNode node) { throw new UnsupportedOperationException(); } @Override public ITmfFilterTreeNode replaceChild(int index, ITmfFilterTreeNode node) { throw new UnsupportedOperationException(); } @Override public void setParent(ITmfFilterTreeNode parent) { } @Override public List<String> getValidChildren() { throw new UnsupportedOperationException(); } @Override public String toString() { return COLLAPSE_NODE_NAME; } @Override public String toString(boolean explicit) { return COLLAPSE_NODE_NAME + " [" + fPrevEvent + ']'; //$NON-NLS-1$ } @Override public ITmfFilterTreeNode clone() { return new TmfCollapseFilter(); } }