/******************************************************************************* * Copyright (c) 2006 IBM Corporation. * 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: * IBM Corporation - Jeff Briggs, Henry Hughes, Ryan Morse *******************************************************************************/ package org.eclipse.linuxtools.systemtap.graphing.core.filters; import java.text.MessageFormat; import java.util.List; import org.eclipse.linuxtools.internal.systemtap.graphing.core.Localization; import org.eclipse.linuxtools.systemtap.structures.Copier; public class MatchFilter implements IDataSetFilter { public MatchFilter(int column, Object value, int style) { this.column = column; this.value = value; this.style = style; } /** * Apply the MatchFilter to the passed dataset. * * @param data The dataset to filter. * * @return The filtered dataset. */ @Override public List<Object>[] filter(List<Object>[] data) { if(column < 0 || column >= data.length) { return null; } List<Object>[] newData = Copier.copy(data); boolean equals; for(int j, i=newData[column].size()-1; i>=0; i--) { equals = newData[column].get(i).toString().equals(value.toString()); //TODO: Find better equivilance method if((equals && REMOVE_MATCHING == (style & 1)) || (!equals && KEEP_MATCHING == (style & 1))) { for(j=0; j<newData.length; j++) { newData[j].remove(i); } } } return newData; } @Override public String getID() { return ID; } /** * @since 2.0 */ @Override public String getInfo() { return MessageFormat.format(Localization.getString(style == KEEP_MATCHING ? "MatchFilter.Matches" : "MatchFilter.Removes"), value.toString()); //$NON-NLS-1$ //$NON-NLS-2$ } /** * @since 2.0 */ @Override public int getColumn() { return column; } private int column; private Object value; private int style; public static final int KEEP_MATCHING = 0; public static final int REMOVE_MATCHING = 1; public static final String ID = "org.eclipse.linuxtools.systemtap.graphing.core.filters.MatchFilter"; //$NON-NLS-1$ }