package org.eclipse.epf.library.configuration;

import org.eclipse.epf.library.edit.VariabilityInfo;
import org.eclipse.epf.uma.MethodConfiguration;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.VariabilityElement;
import org.eclipse.jface.viewers.Viewer;

/**
 * A configurator used by activity deep copy command to resovle and deep copy contributors and
 * replacers of activity in a metohd configuration.
 *
 */
public class ActivityDeepCopyConfigurator extends ConfigurationFilter{

	
	/**
	 * constructor
	 * @param methodConfig a <code>MethodConfiguration</code>
	 * @param viewer a <code>Viewer</code>
	 */
	public ActivityDeepCopyConfigurator(MethodConfiguration methodConfig,
			Viewer viewer) {
		super(methodConfig, viewer);
	}
	
	
	/**
	 * Constructs with null methodConfig which could be set later.
	 */
	public ActivityDeepCopyConfigurator() {
		this(null, null);
	}
	

	@Override
	public VariabilityInfo getVariabilityInfo(VariabilityElement ve) {

		// calculate the element first
		ElementRealizer realizer = new DefaultElementRealizer(methodConfig, false, true){
			@Override
			public boolean canShow(MethodElement element) {
				return true;
			}			
		};
		return getVariabilityInfo(ve, realizer);
	}
	
	/**
	 * Overrides the super method for not resolving the base to include additional contributors. 
	 */
	@Override
	protected void resolveElementVariabilityList(VariabilityElement element,
			VariabilityInfo info, boolean includeBase, ElementRealizer realizer) {

		if (methodConfig == null) {
			return;
		}		
		//resolve to include contributors
		resolveElementContributors(element,info,realizer);
	}
}
