/******************************************************************************* * Copyright (c) 2017 Rogue Wave Software Inc. and others. * 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: * Rogue Wave Software Inc. - initial implementation *******************************************************************************/ package org.eclipse.php.profile.ui.filters; import java.io.File; import java.util.HashMap; import java.util.Map; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.php.internal.core.util.preferences.IXMLPreferencesStorable; import org.eclipse.php.internal.ui.util.SearchPattern; import org.eclipse.php.profile.core.data.ProfilerClassData; import org.eclipse.php.profile.core.data.ProfilerFileData; import org.eclipse.php.profile.core.data.ProfilerFunctionData; import org.eclipse.php.profile.ui.views.TreeElement; /** * Execution statistics filter string. */ public class ExecutionStatisticsFilterString extends ViewerFilter implements IXMLPreferencesStorable { public static final String FILTER_BY_FILE_NAME = "File name"; //$NON-NLS-1$ public static final String FILTER_BY_CLASS_NAME = "Class name"; //$NON-NLS-1$ public static final String FILTER_BY_FUNCTION_NAME = "Function name"; //$NON-NLS-1$ private String fString; private String fFilterBy; private boolean fIsCaseSensitive; public ExecutionStatisticsFilterString() { } public ExecutionStatisticsFilterString(String string, String filterBy, boolean isCaseSensitive) { fString = string; fFilterBy = filterBy; fIsCaseSensitive = isCaseSensitive; } public String getString() { return fString; } public void setString(String string) { fString = string; } public String getFilterBy() { return fFilterBy; } public void setFilterBy(String filterBy) { fFilterBy = filterBy; } public boolean isCaseSensitive() { return fIsCaseSensitive; } public void setCaseSensitive(boolean isCaseSensitive) { fIsCaseSensitive = isCaseSensitive; } public Map<String, Object> storeToMap() { Map<String, Object> map = new HashMap<String, Object>(3); map.put("string", fString); //$NON-NLS-1$ map.put("case-sensitive", new Boolean(fIsCaseSensitive)); //$NON-NLS-1$ map.put("filter-by", fFilterBy); //$NON-NLS-1$ return map; } public void restoreFromMap(Map<String, Object> map) { fString = (String) map.get("string"); //$NON-NLS-1$ fIsCaseSensitive = Boolean.getBoolean((String) map.get("case-sensitive")); //$NON-NLS-1$ fFilterBy = (String) map.get("filter-by"); //$NON-NLS-1$ } public boolean select(Viewer viewer, Object parentElement, Object element) { Object data = ((TreeElement) element).getData(); if (FILTER_BY_FILE_NAME.equals(fFilterBy) && data instanceof ProfilerFileData) { return SearchPattern.match(fString, new File(((ProfilerFileData) data).getName()).getName(), fIsCaseSensitive, false); } else if (FILTER_BY_CLASS_NAME.equals(fFilterBy) && data instanceof ProfilerClassData) { return SearchPattern.match(fString, ((ProfilerClassData) data).getName(), fIsCaseSensitive, false); } else if (FILTER_BY_FUNCTION_NAME.equals(fFilterBy) && data instanceof ProfilerFunctionData) { return SearchPattern.match(fString, ((ProfilerFunctionData) data).getFunctionName(), fIsCaseSensitive, false); } return true; } }