blob: 2b410faafd1d3d00fc88edfd2cc17863de0b9891 [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.library.edit.itemsfilter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
import org.eclipse.emf.edit.provider.IWrapperItemProvider;
import org.eclipse.epf.library.edit.FeatureValueWrapperItemProvider;
import org.eclipse.epf.library.edit.IConfigurable;
import org.eclipse.epf.library.edit.IFilter;
import org.eclipse.epf.library.edit.util.ProcessScopeUtil;
import org.eclipse.epf.uma.ContentElement;
import org.eclipse.epf.uma.MethodPlugin;
import org.eclipse.epf.uma.UmaPackage;
/**
* The item provider adapter for a method library in the method element
* selection dialogs.
*
* @author Shashidhar Kannoori
* @since 1.0
*/
public class MethodLibraryItemProvider extends
org.eclipse.epf.uma.provider.MethodLibraryItemProvider implements IConfigurable {
AdapterFactory adapterFactory;
ContentElement contentElement;
private IFilter filter;
// private boolean isAdapterConfigurable;
// private ArrayList children;
// private MethodPlugin plugin;
// private ModelStructure modelStruct;
/**
* Creates a new instance.
*/
public MethodLibraryItemProvider(AdapterFactory adapterFactory) {
super(adapterFactory);
this.adapterFactory = adapterFactory;
}
/**
* @param adapterFactory
*/
public MethodLibraryItemProvider(AdapterFactory adapterFactory,
Object contentElement) {
super(adapterFactory);
this.adapterFactory = adapterFactory;
this.contentElement = (ContentElement) contentElement;
}
public MethodLibraryItemProvider(AdapterFactory adapterFactory,
IFilter filter) {
super(adapterFactory);
this.adapterFactory = adapterFactory;
this.filter = filter;
if (adapterFactory instanceof IConfigurable) {
// isAdapterConfigurable = true;
((IConfigurable) adapterFactory).setFilter(filter);
}
}
/**
* This specifies how to implement {@link #getChildren} and is used to
* deduce an appropriate feature for an
* {@link org.eclipse.emf.edit.command.AddCommand},
* {@link org.eclipse.emf.edit.command.RemoveCommand} or
* {@link org.eclipse.emf.edit.command.MoveCommand} in
* {@link #createCommand}. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public Collection getChildrenFeatures(Object object) {
if (childrenFeatures == null) {
// super.getChildrenFeatures(object);
childrenFeatures = new ArrayList();
childrenFeatures.add(UmaPackage.eINSTANCE
.getMethodLibrary_MethodPlugins());
childrenFeatures.add(UmaPackage.eINSTANCE
.getMethodLibrary_PredefinedConfigurations());
}
return childrenFeatures;
}
public Collection getChildren(Object object) {
Collection children = super.getChildren(object);
children.addAll(ProcessScopeUtil.getInstance().getScopeInEditdSet());
for (Iterator iter1 = children.iterator(); iter1.hasNext();) {
Object child = iter1.next();
if (filter.accept(child) && child instanceof MethodPlugin) {
MethodPluginItemProvider p = new MethodPluginItemProvider(
adapterFactory);
p.setFilter(filter);
Collection childs = p.getChildren(child);
for (Iterator childIter = childs.iterator(); childIter
.hasNext();) {
Object childObj = childIter.next();
if (childObj instanceof ITreeItemContentProvider) {
if (!checkChildrens(childObj))
childIter.remove();
} else {
if (!filter.accept(childObj)) {
childIter.remove();
}
}
}
if (childs.isEmpty())
iter1.remove();
} else {
if (!filter.accept(child))
iter1.remove();
}
}
return children;
}
private boolean checkChildrens(Object object) {
if (object instanceof FeatureValueWrapperItemProvider) {
object = ((IWrapperItemProvider) object).getValue();
if (!filter.accept(object)) {
return false;
}
} else {
Collection childObjChilds = ((ITreeItemContentProvider) object)
.getChildren(object);
for (Iterator childObjIter = childObjChilds.iterator(); childObjIter
.hasNext();) {
Object childObjChild = childObjIter.next();
if (childObjChild instanceof ITreeItemContentProvider) {
return checkChildrens(childObjChild);
}
if (!filter.accept(childObjChild)) {
childObjIter.remove();
}
}
if (childObjChilds.isEmpty())
// childIter.remove();
return false;
}
return true;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.epf.library.edit.IConfigurable#setFilter(com.ibm.library.edit.IFilter)
*/
public void setFilter(IFilter filter) {
this.filter = filter;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.epf.library.edit.IConfigurable#setLabel(java.lang.String)
*/
public void setLabel(String label) {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.epf.library.edit.IConfigurable#setParent(java.lang.Object)
*/
public void setParent(Object parent) {
}
}