package org.eclipse.epf.library.edit.util;

import java.util.List;

import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.epf.library.edit.realization.IRealizationManager;
import org.eclipse.epf.library.edit.validation.IValidationManager;
import org.eclipse.epf.uma.Descriptor;
import org.eclipse.epf.uma.MethodConfiguration;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.MethodLibrary;

public interface ILibraryEditUtilProvider {

	boolean isSynFree();

	MethodElement getMethodElement(String guid);

	boolean isDynamicAndExclude(Object obj, Descriptor desc, EReference ref,
			MethodConfiguration config);

	boolean isDynamic(Object obj, Descriptor desc, EReference ref);
	
	boolean isGuidanceDynamic(Object obj, Descriptor desc,
			MethodConfiguration config);

	MethodLibrary getCurrentMethodLibrary();
	
	String getPresentationName(MethodElement element,
			MethodConfiguration config);
	
	IRealizationManager getRealizationManager(MethodConfiguration config);

	MethodElement getCalculatedElement(MethodElement element, MethodConfiguration config);

	boolean inConfig(MethodElement element, MethodConfiguration config);

	IValidationManager getValidationManager();
	
	List<MethodElement> calc0nFeatureValue(MethodElement element,
			EStructuralFeature feature, MethodConfiguration config);
		
}
