blob: d2e92b642259709fc1457a6a10ce54fa4ab16e48 [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.configuration;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.epf.library.LibraryPlugin;
import org.eclipse.epf.library.edit.util.ExtensionManager;
import org.eclipse.epf.uma.MethodConfiguration;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.epf.uma.Whitepaper;
/**
* Default implementation of the realizer.
* Realizes the element based on the configuration and realize options.
*
* @author Jinhua Xi
* @author Phong Nguyen Le
* @author Weiping Lu
* @since 1.0
*/
public class DefaultElementRealizer extends ElementRealizer {
public static final String DefaultElementRealizer_Type = "DefaultElementRealizer"; //$NON-NLS-1$
public static final String PublishingElementRealizer_Type = "PublishingElementRealizer"; //$NON-NLS-1$
public static final String ProcessPublishingElementRealizer_Type = "ProcessPublishingElementRealizer"; //$NON-NLS-1$
protected static final ElementRealizer createElementRealizerExtension(MethodConfiguration config, String type) {
Object ext = ExtensionManager.createExtension(LibraryPlugin.getDefault().getId(), "elementRealizerFactory"); //$NON-NLS-1$
return ext instanceof IElementRealizerFactory ?
((IElementRealizerFactory) ext).createRealizer(config, type) : null;
}
public static final ElementRealizer newElementRealizer(
MethodConfiguration config, boolean resolveContributor,
boolean resolveReplacer) {
ElementRealizer realizer = createElementRealizerExtension(config, DefaultElementRealizer_Type);
if (realizer == null) {
realizer = new DefaultElementRealizer(config);
}
realizer.setResolveContributor(resolveContributor);
realizer.setResolveReplacer(resolveReplacer);
return realizer;
}
public static final ElementRealizer newElementRealizer(MethodConfiguration config) {
return newElementRealizer(config, true, true);
}
/**
* construct an instance with the give configuration
* @param config MethodConfiguration
*/
protected DefaultElementRealizer(MethodConfiguration config) {
super(config);
}
/**
* construct an instance with the given configuration and additional realization options.
*
* @param config MethodConfiguration
* @param resolveContributor boolean if true, contrubutors from feature value list will be resolved. default to false.
* @param resolveReplacer boolean if ture, element with a replacer will be resolved to the replacer. default to true.
*/
protected DefaultElementRealizer(MethodConfiguration config,
boolean resolveContributor, boolean resolveReplacer) {
super(config, resolveContributor, resolveReplacer);
}
/**
* @see ElementRealizer.realize
*/
public MethodElement realize(MethodElement element) {
return super.realize(element);
}
/**
* realize the list of feature values and returns a new list of values
* The new might be a re-sorting of the original list
* or some of the values can be filtered out, depending on the detail implementation
* Note: the list value passed in might be updated as well.
* @param element MethodElement
* @param feature EStructuralFeature
* @param values List
* @return List
*/
public List realize(MethodElement element,
EStructuralFeature feature, List values)
{
if ( values == null || values.size() == 0 ) {
return values;
}
// Wrong "modifies" information published in team allocation view for small configuration
// added filter to clean up un-wanted items
if ( super.filter != null ) {
int i = 0;
while (i < values.size()) {
MethodElement o = (MethodElement) values.get(i);
if ( !filter.accept(o) ) {
values.remove(i);
} else {
i++;
}
}
}
// if the feature value is containment element such as artifact
// the child element can't show if any of the parent(s) are in the list
// 00384619 - Published site: Display of WPs under responsible role
// this is not a general rule. only apply to the published navigation tree.
// so move this logic to the tree generation code in publishing
// geenrally, show all elements, see bug
// 00386765 - Role responsibilities need to show (contributed) sub-artifacts
// if (feature.isMany() && values.size() > 0
// && ConfigurationHelper.isContainmentElement(values.get(0))) {
// int i = 0;
// while (i < values.size()) {
// MethodElement o = (MethodElement) values.get(i);
//
// // if the container of the element is in the list, remove this
// // element from the list
// if (ConfigurationHelper.isContainerInList(o, values, config)) {
// values.remove(i);
// } else {
// i++;
// }
// }
// }
// need to sort the concept and papers by type
if ((feature == UmaPackage.eINSTANCE
.getContentElement_ConceptsAndPapers())
&& (values.size() > 0)) {
List papers = new ArrayList();
int i = 0;
while (i < values.size()) {
Object o = values.get(i);
if (o instanceof Whitepaper) {
papers.add(o);
values.remove(i);
} else {
i++;
}
}
if (papers.size() > 0) {
values.addAll(papers);
}
}
return values;
}
}