/******************************************************************************* * 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.util.ArrayList; import java.util.HashMap; import java.util.List; 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; /** * Execution statistics filter. */ public class ExecutionStatisticsFilter extends ViewerFilter implements IXMLPreferencesStorable { private String fName; private String fId; private ExecutionStatisticsFilterString fFilterString; private ExecutionStatisticsFieldFilter fFieldFilter; private ExecutionStatisticsFilterCondition[] fFilterConditions; private boolean fIsRemovable; public ExecutionStatisticsFilter() { fIsRemovable = true; } public String getName() { return fName; } public String getId() { return fId; } public boolean isRemovable() { return fIsRemovable; } public void setRemovable(boolean removable) { fIsRemovable = removable; } public ExecutionStatisticsFilterString getFilterString() { return fFilterString; } public ExecutionStatisticsFieldFilter getFieldFilter() { return fFieldFilter; } public ExecutionStatisticsFilterCondition[] getFilterConditions() { return fFilterConditions; } public void setName(String name) { fName = name; } public void setId(String id) { fId = id; } public void setFilterString(ExecutionStatisticsFilterString filterString) { fFilterString = filterString; } public void setFieldFilter(ExecutionStatisticsFieldFilter fieldFilter) { fFieldFilter = fieldFilter; } public void setFilterConditions(ExecutionStatisticsFilterCondition[] filterConditions) { fFilterConditions = filterConditions; } public Map<String, Object> storeToMap() { Map<String, Object> map = new HashMap<String, Object>(4); map.put("name", fName); //$NON-NLS-1$ if (fFilterString != null) { map.put("filterString", fFilterString.storeToMap()); //$NON-NLS-1$ } if (fFieldFilter != null) { map.put("fieldFilter", fFieldFilter.storeToMap()); //$NON-NLS-1$ } if (fFilterConditions != null) { for (int i = 0; i < fFilterConditions.length; ++i) { map.put("condition" + i, fFilterConditions[i].storeToMap()); //$NON-NLS-1$ } } Map<String, Object> filter = new HashMap<String, Object>(1); filter.put("filter", map); //$NON-NLS-1$ return filter; } @SuppressWarnings("unchecked") public void restoreFromMap(Map<String, Object> map) { Map<?, ?> filter = (Map<?, ?>) map.get("filter"); //$NON-NLS-1$ if (filter != null) { fName = (String) filter.get("name"); //$NON-NLS-1$ Object obj = filter.get("filterString"); //$NON-NLS-1$ if (obj != null) { fFilterString = new ExecutionStatisticsFilterString(); fFilterString.restoreFromMap((Map<String, Object>) obj); } obj = filter.get("fieldFilter"); //$NON-NLS-1$ if (obj != null) { fFieldFilter = new ExecutionStatisticsFieldFilter(); fFieldFilter.restoreFromMap((Map<String, Object>) obj); } List<ExecutionStatisticsFilterCondition> conditions = new ArrayList<ExecutionStatisticsFilterCondition>(); for (int i = 0; (obj = filter.get("condition" + i)) != null; ++i) { //$NON-NLS-1$ ExecutionStatisticsFilterCondition cond = new ExecutionStatisticsFilterCondition(); cond.restoreFromMap((Map<String, Object>) obj); conditions.add(cond); } if (conditions.size() > 0) { fFilterConditions = (ExecutionStatisticsFilterCondition[]) conditions .toArray(new ExecutionStatisticsFilterCondition[conditions.size()]); } } } public boolean select(Viewer viewer, Object parentElement, Object element) { boolean select = true; if (fFilterString != null) { select &= fFilterString.select(viewer, parentElement, element); } if (select && fFilterConditions != null) { for (int i = 0; select && i < fFilterConditions.length; ++i) { select &= fFilterConditions[i].select(viewer, parentElement, element); } } return select; } public Object[] filter(Viewer viewer, Object parent, Object[] elements) { Object[] filteredElements = super.filter(viewer, parent, elements); if (fFieldFilter != null) { filteredElements = fFieldFilter.filter(viewer, parent, filteredElements); } return filteredElements; } }