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);
+ }
+ }
+ }
+ }
+ }
+
+}