blob: c23d286cec7b2ddccdbbc293137ed2255ef9f562 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 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.edit.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import com.ibm.uma.ContentElement;
import com.ibm.uma.Guidance;
import com.ibm.uma.MethodElement;
import com.ibm.uma.MethodPlugin;
import com.ibm.uma.util.AssociationHelper;
import com.ibm.uma.util.UmaUtil;
/**
* @author Shilpa Toraskar
* @since 1.0
*/
public class MethodElementUtil {
/**
* Return method model of the object
*
* @param obj
* @return
*/
public static MethodPlugin getMethodModel(Object obj) {
return UmaUtil.getMethodPlugin((MethodElement) obj);
}
/**
* Returns list of models as specified.. 1. Method model of the object 2.
* Referenced models of the method model of the object (e.g. reference
* relationship)
*
* @param object
* @return
*/
public static List getAllModels(Object object) {
List allModels = new ArrayList();
// get method model of the object
MethodPlugin model = getMethodModel(object);
if (model != null) {
// get all base models
//
Misc.getAllBase(model, allModels);
allModels.add(model);
// // get base model of the method model
// MethodPlugin baseModel = model.getBase();
// if ( baseModel != null )
// {
// allModels.add(baseModel);
// }
//
// // get referenced model of the method model
// List refModel = (List)model.getReferencedPlugin();
// for (int i=0; i < refModel.size(); i++)
// {
// allModels.add(refModel.get(i));
// }
}
return allModels;
}
/**
* Returns references guidances for the given object
*
* @param object
* @return
*/
public static List getSelectedGuidances(EObject object) {
List itemList = new ArrayList();
List references = ((EObject) object).eCrossReferences();
if (references != null && references.size() > 0) {
for (Iterator it = references.iterator(); it.hasNext();) {
Object obj = (Object) it.next();
if (obj instanceof Guidance) {
itemList.add(obj);
}
}
}
itemList
.addAll(AssociationHelper.getPractices((ContentElement) object));
return itemList;
}
// /**
// * Return ToolMentors in the model, given particular object
// * @param object
// * @return
// */
// public static List getAllToolMentors(Object object)
// {
// List itemList = new ArrayList();
// List pluginList = getAllModels(object);
// for(int i =0; i<pluginList.size(); i++){
//
// Object object1 = pluginList.get(i);
// TreeIterator iterator = ((EObject) object1).eAllContents();
// while (iterator.hasNext()) {
// Object obj = (Object) iterator.next();
// if (obj instanceof Guidance) {
// Guidance guidance = (Guidance) obj;
// if(guidance.getType().getName().equals("ToolMentor")){
// itemList.add(guidance);
// }
// }
// }
// }
// return itemList;
//
// }
// public static Discipline setDiscipline(Task task, Discipline discipline)
// {
// return (Discipline) addToCategory(discipline, task,
// UmaPackage.eINSTANCE.getDiscipline_Tasks(),
// ModelStructure.DEFAULT.disciplineDefinitionPath, false);
// }
//
// public static Domain setDomain(WorkProduct wp, Domain domain) {
// return (Domain) addToCategory(domain, wp,
// UmaPackage.eINSTANCE.getDomain_WorkProducts(),
// ModelStructure.DEFAULT.domainPath, false);
// }
//
// public static WorkProductType addToWorkProductType(WorkProductType
// wpType, WorkProduct wp) {
// return (WorkProductType) addToCategory(wpType, wp,
// UmaPackage.eINSTANCE.getWorkProductType_WorkProducts(),
// ModelStructure.DEFAULT.workProductTypePath, false);
// }
//
// public static UserDefinedCategory
// addToUserDefinedCategory(UserDefinedCategory userDefinedCategory,
// MethodElement element) {
// if(element instanceof ContentElement) {
// return (UserDefinedCategory) addToCategory(userDefinedCategory, element,
// UmaPackage.eINSTANCE.getUserDefinedCategory_ContentElements(),
// ModelStructure.DEFAULT.customCategoryPath, false);
// }
// else if(element instanceof ContentCategory) {
// return (UserDefinedCategory) addToCategory(userDefinedCategory, element,
// UmaPackage.eINSTANCE.getUserDefinedCategory_SubCategories(),
// ModelStructure.DEFAULT.customCategoryPath, false);
// }
// return null;
// }
//
// public static Tool addToTool(Tool tool, ToolMentor toolMentor) {
// return (Tool) addToCategory(tool, toolMentor,
// UmaPackage.eINSTANCE.getTool_ToolMentors(),
// ModelStructure.DEFAULT.toolPath, false);
// }
//
// public static RoleSet addToRoleSet(RoleSet roleSet, Role role) {
// return (RoleSet) addToCategory(roleSet, role,
// UmaPackage.eINSTANCE.getRoleSet_Roles(),
// ModelStructure.DEFAULT.roleSetPath, false);
// }
//
// public static ContentCategory addToCategory(ContentCategory category,
// MethodElement element, EStructuralFeature feature, String[]
// categoryPkgPath, boolean checkForExistingContributor) {
// // create contributor for category if it is not in the same plugin with
// the element
// //
// MethodPlugin elementPlugin = UmaUtil.getMethodPlugin(element);
// MethodPlugin categoryPlugin = UmaUtil.getMethodPlugin(category);
// ContentCategory usedCategory = null;
// boolean created = false;
// if(categoryPlugin != elementPlugin) {
// if(category.getVariabilityBasedOnElement() != null) {
// throw new IllegalArgumentException("Could not add element to an extended
// category that is in different plugin: " + category);
// }
// if(!Misc.isBaseOf(categoryPlugin, elementPlugin)) {
// throw new IllegalArgumentException("Inaccesible category: " + category);
// }
// ContentPackage categoryPkg = UmaUtil.findContentPackage(elementPlugin,
// categoryPkgPath);
// ContentCategory contrib = null;
// if(checkForExistingContributor) {
// // look for the existing contributor for the category
// //
// for (Iterator iter = categoryPkg.getContentElements().iterator();
// iter.hasNext();) {
// ContentCategory cat = (ContentCategory) iter.next();
// if(cat.getVariabilityBasedOnElement() == category) {
// contrib = cat;
// break;
// }
// }
// }
//
// if(contrib == null) {
// contrib = (ContentCategory)
// UmaFactory.eINSTANCE.create(category.eClass());
// contrib.setName(category.getName());
// contrib.setVariabilityBasedOnElement(category);
// contrib.setVariabilityType(VariabilityType.CONTRIBUTES_LITERAL);
// categoryPkg.getContentElements().add(contrib);
// created = true;
// }
// usedCategory = contrib;
// }
// else {
// usedCategory = category;
// }
//
// OppositeFeature oppositeFeature =
// MultiResourceEObject.getOppositeFeature(feature);
// MultiResourceEObject mrEObj = (MultiResourceEObject)element;
// Object oppositeFeatureValue =
// mrEObj.getOppositeFeatureMap().get(oppositeFeature);
// if(feature.isMany()) {
// Collection collection = (Collection) usedCategory.eGet(feature);
// if(oppositeFeatureValue != null && !oppositeFeature.isMany()) {
// if(oppositeFeatureValue != usedCategory) {
// ((Collection)((EObject)oppositeFeatureValue).eGet(feature)).remove(element);
// collection.add(element);
// }
// }
// if(!collection.contains(element)) {
// collection.add(element);
// }
// }
// else {
// Object val = usedCategory.eGet(feature);
// if(oppositeFeatureValue != null && !oppositeFeature.isMany()) {
// if(oppositeFeatureValue != usedCategory) {
// ((EObject)oppositeFeatureValue).eSet(feature, null);
// }
// }
// if(usedCategory != oppositeFeatureValue) {
// usedCategory.eSet(feature, element);
// }
// }
//
// return usedCategory;
// }
}