blob: 5bf0937505e36fe557da5434737f77e6b03f5d27 [file] [log] [blame]
//------------------------------------------------------------------------------
// 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);
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);
}
}
}
}
}
}