blob: e6a206a3523a143f88d34369c106ade95e1c7a63 [file] [log] [blame]
//------------------------------------------------------------------------------
// 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) });
}
}