blob: 0cfd5a1d262707ba36b684a8a81b58505154b20b [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.Collection;
import java.util.Iterator;
import org.eclipse.epf.library.edit.LibraryEditPlugin;
import org.eclipse.epf.library.edit.itemsfilter.CategorizedProcessesItemProvider;
import org.eclipse.epf.library.edit.itemsfilter.ContentCategoriesGroupItemProvider;
import org.eclipse.epf.library.edit.itemsfilter.FilterConstants;
import org.eclipse.epf.library.edit.itemsfilter.IAllFilter;
import org.eclipse.epf.library.edit.itemsfilter.ProcessesItemProvider;
import org.eclipse.epf.library.edit.navigator.PluginUIPackagesItemProvider;
import org.eclipse.epf.library.edit.util.TngUtil;
import org.eclipse.epf.uma.BreakdownElement;
import org.eclipse.epf.uma.ContentPackage;
import org.eclipse.epf.uma.CustomCategory;
import org.eclipse.epf.uma.Discipline;
import org.eclipse.epf.uma.DisciplineGrouping;
import org.eclipse.epf.uma.Domain;
import org.eclipse.epf.uma.Guidance;
import org.eclipse.epf.uma.MethodConfiguration;
import org.eclipse.epf.uma.MethodPlugin;
import org.eclipse.epf.uma.Process;
import org.eclipse.epf.uma.ProcessComponent;
import org.eclipse.epf.uma.ProcessPackage;
import org.eclipse.epf.uma.Role;
import org.eclipse.epf.uma.RoleSet;
import org.eclipse.epf.uma.RoleSetGrouping;
import org.eclipse.epf.uma.Task;
import org.eclipse.epf.uma.Tool;
import org.eclipse.epf.uma.WorkProduct;
import org.eclipse.epf.uma.WorkProductType;
/**
* Filter for AddLink in RichTextEditor.
*
*/
public class AddLinkFilter extends AbstractBaseFilter implements IAllFilter {
public boolean accept(Object obj) {
// if can't be accdepted by super, return.
if(obj == null )return false;
if (!super.accept(obj)) {
return false;
}
String filterTypeString = helper.getFilterTypeStr();
Object contentElement = helper.getContentElement();
if (helper.getAlreadySelectedList() != null) {
if (obj instanceof ProcessComponent) {
if (helper.getAlreadySelectedList().contains(
((ProcessComponent) obj).getProcess()))
return false;
} else {
if (helper.getAlreadySelectedList().contains(obj))
return false;
}
}
if (contentElement != null
&& !(obj instanceof ProcessComponent || obj instanceof Process)) {
if (obj.equals(helper.getContentElement()))
return false;
}
if (filterTypeString == null
|| filterTypeString.equals(FilterConstants.ALL_ELEMENTS)
|| filterTypeString.equals(FilterConstants.METHO_PLUGINS)) {
if (obj instanceof CustomCategory) {
if (TngUtil.isRootCustomCategory((CustomCategory) obj)) {
if (((CustomCategory) obj).getCategorizedElements()
.isEmpty())
return false;
}
}
if (!helper.matchPattern(obj))
return false;
if (obj instanceof ContentPackage)
return true;
if (obj instanceof ContentCategoriesGroupItemProvider) {
Collection list = ((ContentCategoriesGroupItemProvider) obj)
.getChildren(obj);
if (list.isEmpty())
return false;
else
return true;
}
if (obj instanceof ProcessesItemProvider) {
Collection list = ((ProcessesItemProvider) obj)
.getChildren(obj);
for (Iterator ior = list.iterator(); ior.hasNext();) {
Object object = ior.next();
if (((CategorizedProcessesItemProvider) object)
.getChildren(object).isEmpty())
ior.remove();
}
if (list.isEmpty())
return false;
else
return true;
}
if (obj instanceof PluginUIPackagesItemProvider) {
return true;
}
if (childAccept(obj))
return true;
} else if (filterTypeString.equals(FilterConstants.DISCIPLINES)) {
if (!helper.matchPatternBasedOnType(obj))
return false;
if (obj instanceof ContentCategoriesGroupItemProvider) {
return acceptCategoriesGroup(obj, LibraryEditPlugin.INSTANCE
.getString("_UI_Disciplines_group")); //$NON-NLS-1$
}
if (obj instanceof DisciplineGrouping) {
return !((DisciplineGrouping) obj).getDisciplines().isEmpty();
}
if (obj instanceof Discipline) {
return true;// AssociationHelper.getDisciplineGroups((Discipline)obj).isEmpty();
}
} else if (filterTypeString.equals(FilterConstants.ROLESETS)) {
if (!helper.matchPatternBasedOnType(obj))
return false;
if (obj instanceof ContentCategoriesGroupItemProvider) {
return acceptCategoriesGroup(obj, LibraryEditPlugin.INSTANCE
.getString("_UI_Role_Sets_group"));
}
if (obj instanceof RoleSetGrouping) {
return !((RoleSetGrouping) obj).getRoleSets().isEmpty();
}
if (obj instanceof RoleSet) {
return true;// AssociationHelper.getRoleSetGroups((RoleSet)obj).isEmpty();
}
} else if (filterTypeString.equals(FilterConstants.WORKPRODUCTTYPES)) {
if (!helper.matchPatternBasedOnType(obj))
return false;
if (obj instanceof ContentCategoriesGroupItemProvider) {
return acceptCategoriesGroup(obj, LibraryEditPlugin.INSTANCE
.getString("_UI_WorkProductTypes_group"));
}
if (obj instanceof WorkProductType)
return true;
} else if (filterTypeString.equals(FilterConstants.DOMAINS)) {
if (!helper.matchPatternBasedOnType(obj))
return false;
if (obj instanceof ContentCategoriesGroupItemProvider) {
return acceptCategoriesGroup(obj, LibraryEditPlugin.INSTANCE
.getString("_UI_Domains_group")); //$NON-NLS-1$
}
if (obj instanceof Domain)
return true;
} else if (filterTypeString.equals(FilterConstants.TOOLS)) {
if (!helper.matchPatternBasedOnType(obj))
return false;
if (obj instanceof ContentCategoriesGroupItemProvider) {
return acceptCategoriesGroup(obj, LibraryEditPlugin.INSTANCE
.getString("_UI_Tools_group")); //$NON-NLS-1$
}
if (obj instanceof Tool)
return true;
} else if (filterTypeString.equals(FilterConstants.ROLES)) { //$NON-NLS-1$
if (!helper.matchPatternBasedOnType(obj))
return false;
if (obj instanceof ContentPackage)
return true;
if (obj instanceof Role)
return true;
} else if (filterTypeString.equals(FilterConstants.TASKS)) { //$NON-NLS-1$
if (!helper.matchPatternBasedOnType(obj))
return false;
if (obj instanceof ContentPackage)
return true;
if (obj instanceof Task)
return true;
} else if (filterTypeString.equals(FilterConstants.WORKPRODUCTS)) { //$NON-NLS-1$
if (!helper.matchPatternBasedOnType(obj))
return false;
if (obj instanceof ContentPackage)
return true;
if (obj instanceof WorkProduct)
return true;
} else if (filterTypeString.equals(FilterConstants.GUIDANCE)) { //$NON-NLS-1$
if (!helper.matchPatternBasedOnType(obj))
return false;
if (obj instanceof ContentPackage)
return true;
if (obj instanceof Guidance)
return true;
} else if (filterTypeString.equals(FilterConstants.CONTENT_PACKAGES)) {
if (!helper.matchPattern(obj))
return false;
if (obj instanceof ContentPackage)
return true;
if (obj instanceof CustomCategory)
return false;
if (obj instanceof Role || obj instanceof Task
|| obj instanceof WorkProduct || obj instanceof Guidance)
return true;
// if(obj instanceof Guidance) return true;
} else if (filterTypeString.equals(FilterConstants.CUSTOM_CATEGORIES)) {
if (!helper.matchPattern(obj))
return false;
if (obj instanceof CustomCategory)
return true;
} else if (filterTypeString.equals(FilterConstants.PROCESSES)) {
if (!helper.matchPatternBasedOnType(obj))
return false;
if (obj instanceof CustomCategory)
return false;
if (obj instanceof ProcessesItemProvider) {
Collection list = ((ProcessesItemProvider) obj)
.getChildren(obj);
for (Iterator ior = list.iterator(); ior.hasNext();) {
Object object = ior.next();
if (((CategorizedProcessesItemProvider) object)
.getChildren(object).isEmpty())
ior.remove();
}
if (list.isEmpty())
return false;
else
return true;
}
if (obj instanceof ProcessPackage)
return true;
if (obj instanceof BreakdownElement)
return true;
}
if (obj instanceof MethodPlugin) {
return true;
}
return false;
}
protected boolean childAccept(Object obj) {
if (obj instanceof MethodConfiguration)
return false;
return true;
}
public boolean acceptCategoriesGroup(Object obj, String type) {
if (obj instanceof ContentCategoriesGroupItemProvider) {
Collection list = ((ContentCategoriesGroupItemProvider) obj)
.getChildren(obj);
if (list.isEmpty())
return false;
if (((ContentCategoriesGroupItemProvider) obj).getText(obj).equals(
type))
return true;
}
return false;
}
public Object getObject() {
return null;
}
}