blob: 0a283195f64046164fff5041170a6617d7f169f1 [file] [log] [blame]
package org.eclipse.epf.library.edit.util;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.epf.library.edit.realization.IRealizationManager;
import org.eclipse.epf.uma.CapabilityPattern;
import org.eclipse.epf.uma.DeliveryProcess;
import org.eclipse.epf.uma.Descriptor;
import org.eclipse.epf.uma.MethodConfiguration;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.MethodLibrary;
import org.eclipse.epf.uma.MethodPlugin;
import org.eclipse.epf.uma.Process;
import org.eclipse.epf.uma.ProcessComponent;
import org.eclipse.epf.uma.UmaPackage;
public class LibraryEditUtil {
private static boolean debug = false;
private static LibraryEditUtil instance = new LibraryEditUtil();
private IRealizationManager defaultRealizationManager;
private ILibraryEditUtilProvider provider;
public static LibraryEditUtil getInstance() {
return instance;
}
private LibraryEditUtil() {
}
public ILibraryEditUtilProvider getProvider() {
if (provider == null) {
provider = ExtensionManager.getLibraryEditUtilProvider();
}
return provider;
}
public IRealizationManager getDefaultRealizationManager() {
return ProcessUtil.isSynFree() ? defaultRealizationManager : null;
}
public void setDefaultRealizationManager(
IRealizationManager defaultRealizationManager) {
this.defaultRealizationManager = defaultRealizationManager;
}
public Set<Descriptor> collectDescriptors(Process process) {
Set<Descriptor> descriptors = new HashSet<Descriptor>();
EObject container = process.eContainer();
if (! (container instanceof ProcessComponent)) {
return descriptors;
}
for (Iterator iter = container.eAllContents(); iter.hasNext();) {
EObject element = (EObject) iter.next();
if (element instanceof Descriptor) {
descriptors.add((Descriptor) element);
}
}
return descriptors;
}
public Set<Process> collectProcesses(MethodElement libOrPlugin) {
Set<Process> processes = new HashSet<Process>();
if (! (libOrPlugin instanceof MethodLibrary ||
libOrPlugin instanceof MethodPlugin)) {
return processes;
}
for (Iterator iter = libOrPlugin.eAllContents(); iter.hasNext();) {
EObject element = (EObject) iter.next();
if (element instanceof Process) {
collectProcess((Process) element, processes);
}
}
return processes;
}
private void collectProcess(Process process, Set<Process> processes) {
if (process instanceof CapabilityPattern ||
process instanceof DeliveryProcess) {
if (process.eContainer() instanceof ProcessComponent) {
processes.add(process);
}
}
}
public Set<Process> collectProcessesFromConfig(MethodConfiguration config) {
Set<Process> result = new HashSet<Process>();
List<MethodPlugin> plugins = config.getMethodPluginSelection();
for (int i = 0; i < plugins.size(); i++) {
Set<Process> set = collectProcesses(plugins.get(i));
result.addAll(set);
}
return result;
}
public boolean isSynFree() {
ILibraryEditUtilProvider p = getProvider();
return p == null ? true : p.isSynFree();
}
public EReference getExcludeFeature(EReference ref) {
UmaPackage up = UmaPackage.eINSTANCE;
if (ref == up.getTaskDescriptor_PerformedPrimarilyBy()) {
return up.getTaskDescriptor_PerformedPrimarilyByExcluded();
}
if (ref == up.getTaskDescriptor_AdditionallyPerformedBy()) {
return up.getTaskDescriptor_AdditionallyPerformedByExclude();
}
//...
return null;
}
}