blob: 5cc0240723fbbae5a36f6936039da63a32e5bf8e [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.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();
}
};
}
}