//------------------------------------------------------------------------------ // 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.configuration; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.edit.command.CommandParameter; import org.eclipse.emf.edit.provider.DelegatingWrapperItemProvider; import org.eclipse.emf.edit.provider.IWrapperItemProvider; import org.eclipse.epf.library.edit.util.WrapperManager; import org.eclipse.epf.uma.Artifact; import org.eclipse.epf.uma.ContentPackage; import org.eclipse.epf.uma.MethodConfiguration; /** * The item provider adapter for the "Work Product Kinds" folder in the * Configuration view. * * @author Phong Nguyen Le * @author Kelvin Low * @since 1.0 */ public class WorkProductTypesItemProvider extends CategoriesItemProvider { /** * Creates a new instance. */ public WorkProductTypesItemProvider(AdapterFactory adapterFactory, MethodConfiguration methodConfig, String name, Object image, String[] categoryPkgPath) { super(adapterFactory, methodConfig, name, image, categoryPkgPath); } /* * (non-Javadoc) * * @see org.eclipse.epf.library.edit.configuration.CategoriesItemProvider#createUncategorizedItemProvider() */ protected UncategorizedItemProvider createUncategorizedItemProvider() { return new UncategorizedItemProvider(adapterFactory, methodConfig, this.uncategorizedFilter, this.uncategorizedLabel, this.uncategorizedImage) { final class ElementList extends MethodConfigurationElementList { /** * @param methodConfig * @param filterList */ public ElementList(MethodConfiguration methodConfig, List filterList) { super(methodConfig, filterList); } /* * (non-Javadoc) * * @see org.eclipse.epf.library.edit.configuration.MethodConfigurationElementList#newIterator(org.eclipse.epf.uma.ContentPackage) */ protected Iterator newIterator(ContentPackage pkg) { return new ElementIterator(pkg) { /** * Comment for <code>serialVersionUID</code> */ private static final long serialVersionUID = 2307136307657359282L; /* * (non-Javadoc) * * @see org.eclipse.epf.library.edit.configuration.MethodConfigurationElementList.ElementIterator#getChildrenList(java.lang.Object) */ protected List getChildrenList(Object object) { List children = super.getChildrenList(object); if (object instanceof Artifact) { children.addAll(((Artifact) object) .getContainedArtifacts()); } return children; } }; } /* * (non-Javadoc) * * @see org.eclipse.epf.library.edit.configuration.MethodConfigurationElementList#checkAcceptance() */ protected boolean checkAcceptance() { return false; } public boolean superAccept(Object object) { return super.accept(object); } }; // keeps wrappers of artifacts that is not associated with any work // product type // private WrapperManager wrapperManager = new WrapperManager( adapterFactory) { /* * (non-Javadoc) * * @see org.eclipse.epf.library.edit.util.WrapperManager#createWrapper(java.lang.Object, * java.lang.Object, * org.eclipse.emf.common.notify.AdapterFactory) */ protected IWrapperItemProvider createWrapper(Object value, Object owner, AdapterFactory adapterFactory) { return new DelegatingWrapperItemProvider(value, owner, null, CommandParameter.NO_INDEX, adapterFactory) { /* * (non-Javadoc) * * @see org.eclipse.emf.edit.provider.DelegatingWrapperItemProvider#getChildren(java.lang.Object) */ public Collection getChildren(Object object) { // Sub-artifact can have a different set of work // product types than the containing artifact. // Do not show the composition hierarchies in the // Work Product Type tree browsers in Lib. Nav. // and Config. Explorer. Show them in flat lists // according to their categorizations instead. // // This is not true for Domains, which should show // the artifact nesting! return Collections.EMPTY_LIST; } /* * (non-Javadoc) * * @see org.eclipse.emf.edit.provider.DelegatingWrapperItemProvider#hasChildren(java.lang.Object) */ public boolean hasChildren(Object object) { return false; } }; } }; /* * (non-Javadoc) * * @see org.eclipse.epf.library.edit.configuration.UncategorizedItemProvider#createMethodConfigurationElementList(java.util.List) */ protected MethodConfigurationElementList createMethodConfigurationElementList( List filterList) { return new ElementList(methodConfig, filterList); } /* * (non-Javadoc) * * @see org.eclipse.epf.library.edit.configuration.UncategorizedItemProvider#getChildren(java.lang.Object) */ public Collection getChildren(Object object) { ElementList elementList = (ElementList) createMethodConfigurationElementList(createFilterList()); Collection children = elementList.getList(); ArrayList artifacts = new ArrayList(); for (Iterator iter = children.iterator(); iter.hasNext();) { Object element = (Object) iter.next(); if (elementList.superAccept(element)) { if (element instanceof Artifact) { artifacts.add(element); iter.remove(); } } else { iter.remove(); } } wrapperManager.update(artifacts); children.addAll(wrapperManager.getWrappers()); return children; } /* * (non-Javadoc) * * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#dispose() */ public void dispose() { wrapperManager.dispose(); super.dispose(); } }; } }