wlu: copied to here for a critical bug fix and broader access in future. Need to do some code refactoring for this change in a later time.
diff --git a/org.eclipse.epf.library/src/org/eclipse/epf/library/util/MigrationUtil.java b/org.eclipse.epf.library/src/org/eclipse/epf/library/util/MigrationUtil.java
new file mode 100644
index 0000000..e572ba5
--- /dev/null
+++ b/org.eclipse.epf.library/src/org/eclipse/epf/library/util/MigrationUtil.java
@@ -0,0 +1,243 @@
+//------------------------------------------------------------------------------
+// Copyright (c) 2005, 2007 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.util;
+
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.epf.library.LibraryService;
+import org.eclipse.epf.library.configuration.ProcessConfigurator;
+import org.eclipse.epf.library.edit.util.ModelStructure;
+import org.eclipse.epf.uma.Activity;
+import org.eclipse.epf.uma.CapabilityPattern;
+import org.eclipse.epf.uma.DeliveryProcess;
+import org.eclipse.epf.uma.MethodConfiguration;
+import org.eclipse.epf.uma.MethodLibrary;
+import org.eclipse.epf.uma.MethodPackage;
+import org.eclipse.epf.uma.MethodPlugin;
+import org.eclipse.epf.uma.Process;
+import org.eclipse.epf.uma.ProcessComponent;
+import org.eclipse.epf.uma.ProcessPackage;
+import org.eclipse.epf.uma.util.UmaUtil;
+
+/**
+ * Helper utilities for the Migration Service.
+ *
+ * @author Kelvin Low
+ * @since  1.0
+ */
+public class MigrationUtil {
+
+	/**
+	 * Returns a map of all the <code>CapabilityPattern</code> and <code>DeliveryProcess</code>
+	 * in the current Method Library.
+	 *
+	 * TODO: Move this method to the com.ibm.rmm.library.services.LibraryUtil class.
+	 */
+	public static Map getProcesses() {
+		MethodLibrary library = LibraryService.getInstance()
+		.getCurrentMethodLibrary();
+		if (library == null) {
+			return null;
+		}
+
+		Map result = new TreeMap();
+		List methodPlugins = LibraryUtil.getMethodPlugins(library);
+		for (Iterator i = methodPlugins.iterator(); i.hasNext(); ) {
+			MethodPlugin methodPlugin = (MethodPlugin)i.next();
+			String capabilityPatternPaths[] = ModelStructure.DEFAULT.capabilityPatternPath;
+			MethodPackage methodPackage  = UmaUtil.findMethodPackage(methodPlugin, capabilityPatternPaths);
+			if (methodPackage instanceof ProcessPackage) {
+				if (methodPackage instanceof ProcessPackage) {
+					getCapabilityPatterns((ProcessPackage)methodPackage, result);
+				}
+			}
+			String deliveryProcessPaths[] = ModelStructure.DEFAULT.deliveryProcessPath;
+			methodPackage = UmaUtil.findMethodPackage(methodPlugin, deliveryProcessPaths);
+			if (methodPackage instanceof ProcessPackage) {
+				if (methodPackage instanceof ProcessPackage) {
+					getDeliveryProcesses((ProcessPackage)methodPackage, result);
+				}
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * Returns a map of all <code>CapabilityPattern</code> in the current Method Library.
+	 *
+	 * TODO: Move this method to the com.ibm.rmm.library.services.LibraryUtil class.
+	 */
+	public static Map getCapabilityPatterns() {
+		MethodLibrary library = LibraryService.getInstance()
+		.getCurrentMethodLibrary();
+		if (library == null) {
+			return null;
+		}
+
+		Map result = new TreeMap();
+		List methodPlugins = LibraryUtil.getMethodPlugins(library);
+		for (Iterator i = methodPlugins.iterator(); i.hasNext(); ) {
+			MethodPlugin methodPlugin = (MethodPlugin)i.next();
+			String capabilityPatternPaths[] = ModelStructure.DEFAULT.capabilityPatternPath;
+			MethodPackage methodPackage  = UmaUtil.findMethodPackage(methodPlugin, capabilityPatternPaths);
+			if (methodPackage instanceof ProcessPackage) {
+				getCapabilityPatterns((ProcessPackage)methodPackage, result);
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * Returns a map of all the <code>DeliveryProcess</code> in the current Method Library.
+	 *
+	 * TODO: Move this method to the com.ibm.rmm.library.services.LibraryUtil class.
+	 */
+	public static Map getDeliveryProcesses() {
+		MethodLibrary library = LibraryService.getInstance()
+		.getCurrentMethodLibrary();
+		if (library == null) {
+			return null;
+		}
+
+		Map result = new TreeMap();
+		List methodPlugins = LibraryUtil.getMethodPlugins(library);
+		for (Iterator i = methodPlugins.iterator(); i.hasNext(); ) {
+			MethodPlugin methodPlugin = (MethodPlugin)i.next();
+			String deliveryProcessPaths[] = ModelStructure.DEFAULT.deliveryProcessPath;
+			MethodPackage methodPackage = UmaUtil.findMethodPackage(methodPlugin, deliveryProcessPaths);
+			if (methodPackage instanceof ProcessPackage) {
+				getDeliveryProcesses((ProcessPackage)methodPackage, result);
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * Returns a map of all the contexts associated with a process.
+	 *
+	 * TODO: Move this method to the com.ibm.rmm.library.services.LibraryUtil class.
+	 */
+	public static Map getContexts(Process process) {
+		if (process == null) {
+			return null;
+		}
+
+		MethodLibrary library = LibraryService.getInstance()
+		.getCurrentMethodLibrary();
+		if (library == null) {
+			return null;
+		}
+
+		Map result = new TreeMap();
+		MethodConfiguration defaultContext = process.getDefaultContext();
+		if (defaultContext != null) {
+			result.put(defaultContext.getName(), defaultContext);
+		}
+
+		List contexts = process.getValidContext();
+		for (Iterator i = contexts.iterator(); i.hasNext(); ) {
+			MethodConfiguration context = (MethodConfiguration)i.next();
+			if (context != null) {
+				result.put(context.getName(), context);
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	 * Add a map of all <code>CapabilityPattern</code> in a given <code>ProcessPackage</code>.
+	 *
+	 * TODO: Move this method to the com.ibm.rmm.library.services.LibraryUtil class.
+	 */
+	protected static void getCapabilityPatterns(ProcessPackage processPackage, Map result) {
+		List childPackages = processPackage.getChildPackages();
+		for (Iterator i = childPackages.iterator(); i.hasNext(); ) {
+			Object obj = i.next();
+			if (obj instanceof ProcessComponent) {
+				ProcessComponent processComponent = (ProcessComponent)obj;
+				Process process  = processComponent.getProcess();
+				if (process instanceof CapabilityPattern) {
+					String name = process.getName();
+					result.put(name, process);
+				}
+			}
+			else if (obj instanceof ProcessPackage) {
+				getCapabilityPatterns((ProcessPackage)obj, result);
+			}
+		}
+	}
+
+	/**
+	 * Add a map of all <code>DeliveryProcess</code> in a given <code>ProcessPackage</code>.
+	 *
+	 * TODO: Move this method to the com.ibm.rmm.library.services.LibraryUtil class.
+	 */
+	protected static void getDeliveryProcesses(ProcessPackage processPackage, Map result) {
+		List childPackages = processPackage.getChildPackages();
+		for (Iterator i = childPackages.iterator(); i.hasNext(); ) {
+			Object obj = i.next();
+			if (obj instanceof ProcessComponent) {
+				ProcessComponent processComponent = (ProcessComponent)obj;
+				Process process  = processComponent.getProcess();
+				if (process instanceof DeliveryProcess) {
+					String name = process.getName();
+					result.put(name, process);
+				}
+			}
+			else if (obj instanceof ProcessPackage) {
+				getDeliveryProcesses((ProcessPackage)obj, result);
+			}
+		}
+	}
+	
+	public static Map getActivities(Process process){
+		return getActivities(process, false);
+	}
+	
+	public static Map getActivities(Process process, boolean linkedHashMap){
+		Map result = linkedHashMap ? new LinkedHashMap() : new TreeMap();
+		MethodConfiguration defaultContext = process.getDefaultContext();
+		ProcessConfigurator filter = new ProcessConfigurator(defaultContext, null);
+		getActivities(process, result, filter);
+		return result;
+	}
+	
+	/**
+	 * Method returns List of activities (recursively) for particular configuration 
+	 * under a Process (<code>DeliveryProcess</code> or <code>CapabilityPattern</code>).  
+	 *  @param Activity
+	 *  @param Map
+	 *  @param ProcessConfigurator
+	 */
+	protected static void getActivities(Activity process, Map result, ProcessConfigurator filter){
+		result.put(process.getName(), process);
+		List list = process.getBreakdownElements();
+		if(list.size() > 0){
+			for(Iterator iterator = list.iterator(); iterator.hasNext();){
+				Object object = iterator.next();
+				if(object instanceof Activity){
+					if(filter != null && filter.accept(object)){
+						result.put(((Activity)object).getName(), object);
+					}
+					if(object instanceof Activity){
+						getActivities((Activity)object, result, filter);
+					}
+				}
+			}
+		}
+	}
+
+}