//------------------------------------------------------------------------------ // Copyright (c) 2005, 2006 IBM Corporation 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: // IBM Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.authoring.ui.filters; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.edit.provider.ITreeItemContentProvider; import org.eclipse.emf.edit.provider.ItemProviderAdapter; import org.eclipse.epf.library.configuration.ProcessConfigurator; import org.eclipse.epf.library.edit.IFilter; import org.eclipse.epf.library.edit.itemsfilter.IProcessFilter; import org.eclipse.epf.uma.Activity; import org.eclipse.epf.uma.BreakdownElement; import org.eclipse.epf.uma.MethodConfiguration; import org.eclipse.epf.uma.Process; import org.eclipse.epf.uma.ProcessComponent; /** * {@link Process} filter for filtering {@link Process} elements. * @author Shashidhar Kannoori * @since 1.0 */ public class DescriptorProcessFilter extends AbstractBaseFilter implements IProcessFilter { /* * (non-Javadoc) * * @see com.ibm.library.edit.itemsfilter.IFilter#getObject() */ public Object getObject() { return helper.getContentElement(); } /* * (non-Javadoc) * * @see com.ibm.library.edit.IFilter#accept(java.lang.Object) */ public boolean accept(Object obj) { // if can't be accdepted by super, return. if (!super.accept(obj)) { return false; } if (!helper.isObjectInSelectedItems(obj)) return false; if (!matchPattern(obj)) return false; if (obj instanceof ProcessComponent) return true; if (obj instanceof Process) return true; if (childAccept(obj)) return true; return false; } protected boolean childAccept(Object obj) { return false; } public boolean matchPattern(Object obj) { // if no valid filter type or pattern, always return true String filterTypeStr = helper.getFilterTypeStr(); // String pattern = helper.getPattern(); String tabStr = helper.getTabStr(); Pattern regexPattern = helper.getRegexPattern(); if (helper.getFilterTypeStr() == null || helper.getPattern() == null || helper.getPattern().equalsIgnoreCase("")) //$NON-NLS-1$ return true; if (filterTypeStr.equalsIgnoreCase(tabStr)) { if (obj instanceof BreakdownElement) { if (obj instanceof Activity) return true; Matcher m = regexPattern.matcher(((BreakdownElement) obj) .getName()); boolean found = m.matches(); if (found) return true; else { return false; } } else { // else for all other types of elements return true; } } else // the All case return true; } protected void getActivitiesInScope(AdapterFactory adapterFactory, BreakdownElement element, List activityList) { ItemProviderAdapter adapter = (ItemProviderAdapter) adapterFactory .adapt(element, ITreeItemContentProvider.class); Object parent = adapter.getParent(element); if (parent instanceof Activity) { activityList.add(parent); getActivitiesInScope(adapterFactory, (BreakdownElement) parent, activityList); } } public DescriptorProcessFilter(MethodConfiguration config) { setAdditionalFilters(new IFilter[] { new ProcessConfigurator(config) }); } }