blob: 2e5a10646e3ca8415f55b14886d3e296ffb78dfe [file] [log] [blame]
package org.eclipse.epf.library.edit.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.epf.common.utils.StrUtil;
import org.eclipse.epf.library.edit.LibraryEditPlugin;
import org.eclipse.epf.library.edit.meta.TypeDefUtil;
import org.eclipse.epf.library.edit.realization.IRealizationManager;
import org.eclipse.epf.library.edit.util.model.util.StringResource;
import org.eclipse.epf.library.edit.validation.IValidationManager;
import org.eclipse.epf.services.ILibraryPersister;
import org.eclipse.epf.services.Services;
import org.eclipse.epf.uma.CapabilityPattern;
import org.eclipse.epf.uma.ContentElement;
import org.eclipse.epf.uma.ContentPackage;
import org.eclipse.epf.uma.CustomCategory;
import org.eclipse.epf.uma.DeliveryProcess;
import org.eclipse.epf.uma.DescribableElement;
import org.eclipse.epf.uma.Descriptor;
import org.eclipse.epf.uma.Guidance;
import org.eclipse.epf.uma.MethodConfiguration;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.MethodLibrary;
import org.eclipse.epf.uma.MethodPackage;
import org.eclipse.epf.uma.MethodPlugin;
import org.eclipse.epf.uma.Milestone;
import org.eclipse.epf.uma.Practice;
import org.eclipse.epf.uma.Process;
import org.eclipse.epf.uma.ProcessComponent;
import org.eclipse.epf.uma.ProcessPackage;
import org.eclipse.epf.uma.RoleDescriptor;
import org.eclipse.epf.uma.TaskDescriptor;
import org.eclipse.epf.uma.UmaFactory;
import org.eclipse.epf.uma.UmaPackage;
import org.eclipse.epf.uma.VariabilityElement;
import org.eclipse.epf.uma.WorkBreakdownElement;
import org.eclipse.epf.uma.WorkProduct;
import org.eclipse.epf.uma.WorkProductDescriptor;
import org.eclipse.epf.uma.ecore.impl.MultiResourceEObject;
import org.eclipse.epf.uma.ecore.util.OppositeFeature;
import org.eclipse.epf.uma.util.AssociationHelper;
import org.eclipse.epf.uma.util.ExtendedReference;
import org.eclipse.epf.uma.util.ModifiedTypeMeta;
import org.eclipse.epf.uma.util.UmaUtil;
import org.eclipse.epf.uma.util.UserDefinedTypeMeta;
public class LibraryEditUtil {
private static boolean debug = false;
private static LibraryEditUtil instance = new LibraryEditUtil();
private IRealizationManager defaultRealizationManager;
private ILibraryEditUtilProvider provider;
private boolean junitTest = false;
private static Map<EReference, EReference> taskGuidanceRefMap;
private static Map<EReference, EReference> roleGuidanceRefMap;
private static Map<EReference, EReference> workproductGuidanceRefMap;
private static UmaPackage up = UmaPackage.eINSTANCE;
private static Set<EReference> autoSynReferences;
public static LibraryEditUtil getInstance() {
return instance;
}
private LibraryEditUtil() {
}
public ILibraryEditUtilProvider getProvider() {
if (provider == null) {
provider = ExtensionManager.getLibraryEditUtilProvider();
}
return provider;
}
public IValidationManager getValidationManager() {
ILibraryEditUtilProvider p = getProvider();
return p == null ? null : p.getValidationManager();
}
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 MethodElement getMethodElement(String guid) {
return getMethodElement(guid, true);
}
public MethodElement getMethodElement(String guid, boolean skipContent) {
ILibraryEditUtilProvider p = getProvider();
return p == null ? null : p.getMethodElement(guid, skipContent);
}
public String getPresentationName(MethodElement element,
MethodConfiguration config) {
String pName = element.getPresentationName();
if (! StrUtil.isBlank(pName)) {
return pName;
}
ILibraryEditUtilProvider p = getProvider();
if (p == null) {
return pName;
}
return p.getPresentationName(element, config);
}
public boolean isDynamicAndExclude(Object obj, Descriptor desc,
EReference ref, MethodConfiguration config) {
return getProvider().isDynamicAndExclude(obj, desc, ref, config);
}
public boolean isDynamic(Object obj, Descriptor desc, EReference ref) {
return getProvider().isDynamic(obj, desc, ref);
}
public MethodLibrary getCurrentMethodLibrary() {
return getProvider().getCurrentMethodLibrary();
}
public boolean isGuidanceDynamic(Object obj, Descriptor desc,
MethodConfiguration config) {
return getProvider().isGuidanceDynamic(obj, desc, config);
}
public EReference getExcludeFeature(EReference ref) {
if (ref == up.getTaskDescriptor_PerformedPrimarilyBy()) {
return up.getTaskDescriptor_PerformedPrimarilyByExcluded();
}
if (ref == up.getTaskDescriptor_AdditionallyPerformedBy()) {
return up.getTaskDescriptor_AdditionallyPerformedByExclude();
}
if (ref == up.getTaskDescriptor_MandatoryInput()) {
return up.getTaskDescriptor_MandatoryInputExclude();
}
if (ref == up.getTaskDescriptor_OptionalInput()) {
return up.getTaskDescriptor_OptionalInputExclude();
}
if (ref == up.getTaskDescriptor_Output()) {
return up.getTaskDescriptor_OutputExclude();
}
if (ref == up.getTaskDescriptor_SelectedSteps()) {
return up.getTaskDescriptor_SelectedStepsExclude();
}
if (ref == up.getRoleDescriptor_ResponsibleFor()) {
return up.getRoleDescriptor_ResponsibleForExclude();
}
if (ref == up.getWorkProductDescriptor_DeliverableParts()) {
return up.getWorkProductDescriptor_DeliverablePartsExclude();
}
if (ref == up.getBreakdownElement_Checklists() || ref == up.getBreakdownElement_Concepts()
|| ref == up.getBreakdownElement_Examples() || ref == up.getBreakdownElement_SupportingMaterials()
|| ref == up.getBreakdownElement_Guidelines() || ref == up.getBreakdownElement_ReusableAssets()
|| ref == up.getBreakdownElement_Templates() || ref == up.getBreakdownElement_Reports()
|| ref == up.getBreakdownElement_Toolmentor() || ref == up.getBreakdownElement_Estimationconsiderations()
|| ref == UmaUtil.MethodElement_UdtList) {
return up.getDescriptor_GuidanceExclude();
}
//...
return null;
}
public EReference getLinkedElementFeature(EReference descriptorRef) {
if (descriptorRef == up.getTaskDescriptor_PerformedPrimarilyBy()) {
return up.getTask_PerformedBy();
}
if (descriptorRef == up.getTaskDescriptor_AdditionallyPerformedBy()) {
return up.getTask_AdditionallyPerformedBy();
}
if (descriptorRef == up.getTaskDescriptor_MandatoryInput()) {
return up.getTask_MandatoryInput();
}
if (descriptorRef == up.getTaskDescriptor_OptionalInput()) {
return up.getTask_OptionalInput();
}
if (descriptorRef == up.getTaskDescriptor_Output()) {
return up.getTask_Output();
}
if (descriptorRef == up.getTaskDescriptor_SelectedSteps()) {
return up.getTask_Steps();
}
if (descriptorRef == up.getRoleDescriptor_ResponsibleFor()) {
return up.getRole_ResponsibleFor();
}
if (descriptorRef == up.getWorkProductDescriptor_DeliverableParts()) {
return up.getDeliverable_DeliveredWorkProducts();
}
//To do: guidances need to be handled differently
// if (descriptorRef == up.getBreakdownElement_Checklists() || descriptorRef == up.getBreakdownElement_Concepts()
// || descriptorRef == up.getBreakdownElement_Examples() || descriptorRef == up.getBreakdownElement_SupportingMaterials()
// || descriptorRef == up.getBreakdownElement_Guidelines() || descriptorRef == up.getBreakdownElement_ReusableAssets()
// || descriptorRef == up.getBreakdownElement_Templates() || descriptorRef == up.getBreakdownElement_Reports()
// || descriptorRef == up.getBreakdownElement_Toolmentor() || descriptorRef == up.getBreakdownElement_Estimationconsiderations()) {
// return up.getDescriptor_GuidanceExclude();
// }
//...
return null;
}
public boolean isJunitTest() {
return junitTest;
}
public void setJunitTest(boolean junitTest) {
this.junitTest = junitTest;
}
public List<EReference> getExcludeRefList(Descriptor des) {
List<EReference> list = new ArrayList<EReference>();
if (des instanceof TaskDescriptor) {
list.add(up.getTaskDescriptor_PerformedPrimarilyByExcluded());
list.add(up.getTaskDescriptor_AdditionallyPerformedByExclude());
list.add(up.getTaskDescriptor_MandatoryInputExclude());
list.add(up.getTaskDescriptor_OptionalInputExclude());
list.add(up.getTaskDescriptor_OutputExclude());
} else if (des instanceof RoleDescriptor) {
list.add(up.getRoleDescriptor_ResponsibleForExclude());
} else if (des instanceof WorkProductDescriptor) {
list.add(up.getWorkProductDescriptor_DeliverablePartsExclude());
}
return list;
}
public boolean isGuidanceListReference(EReference ref) {
if (ref.isContainment() || !ref.isMany()) {
return false;
}
if (ref == UmaPackage.eINSTANCE.getDescriptor_GuidanceAdditional()
|| ref == UmaPackage.eINSTANCE.getDescriptor_GuidanceExclude()) {
return false;
}
if (ref.getEType() instanceof EClass) {
Object obj = null;
try {
obj = UmaFactory.eINSTANCE.create((EClass) ref.getEType());
} catch (Exception e) {
return false;
}
return obj instanceof Guidance;
}
return false;
}
public synchronized Map<EReference, EReference> getGuidanceRefMap(EClass cls) {
if (cls == up.getTask()) {
if (taskGuidanceRefMap == null) {
taskGuidanceRefMap = buildGuidanceMap(cls, up.getTaskDescriptor());
}
return taskGuidanceRefMap;
}
if (cls == up.getRole()) {
if (roleGuidanceRefMap == null) {
roleGuidanceRefMap = buildGuidanceMap(cls, up.getRoleDescriptor());
}
return roleGuidanceRefMap;
}
if (up.getWorkProduct().isSuperTypeOf(cls)) {
if (workproductGuidanceRefMap == null) {
workproductGuidanceRefMap = buildGuidanceMap(up.getWorkProduct(), up.getWorkProductDescriptor());
}
return workproductGuidanceRefMap;
}
return null;
}
private Map<EReference, EReference> buildGuidanceMap(EClass cls, EClass desCls) {
Map<EReference, EReference> resultMap = new HashMap<EReference, EReference>();
Map<EClassifier, EReference> map = new HashMap<EClassifier, EReference>();
for (EReference ref : desCls.getEAllReferences()) {
if (isGuidanceListReference(ref)) {
map.put(ref.getEType(), ref);
}
}
for (EReference ref : cls.getEAllReferences()) {
if (isGuidanceListReference(ref)) {
EReference value = map.get(ref.getEType());
if (value != null) {
resultMap.put(ref, value);
}
}
}
resultMap.put(UmaUtil.MethodElement_UdtList, UmaUtil.MethodElement_UdtList);
return resultMap;
}
public void addOppositeFeature(MethodElement referencing,
MethodElement referenced, EStructuralFeature feature) {
if (referencing == null || referenced == null) {
return;
}
ExtendedReference eRef = TypeDefUtil.getInstance().getAssociatedExtendedReference(feature);
if (eRef != null) {
PropUtil.getPropUtil().addOpposite(eRef.getGlobalId(), referencing, referenced);
return;
}
OppositeFeature oppositeFeature = OppositeFeature
.getOppositeFeature(feature);
if (oppositeFeature == null) {
return;
}
MultiResourceEObject mreferenced = (MultiResourceEObject) referenced;
mreferenced.oppositeAdd(oppositeFeature, referencing);
}
public void removeOppositeFeature(MethodElement referencing,
MethodElement referenced, EStructuralFeature feature) {
if (referencing == null || referenced == null) {
return;
}
ExtendedReference eRef = TypeDefUtil.getInstance().getAssociatedExtendedReference(feature);
if (eRef != null) {
PropUtil.getPropUtil().removeOpposite(eRef.getGlobalId(), referencing, referenced);
return;
}
OppositeFeature oppositeFeature = OppositeFeature
.getOppositeFeature(feature);
if (oppositeFeature == null) {
return;
}
MultiResourceEObject mreferenced = (MultiResourceEObject) referenced;
mreferenced.oppositeRemove(oppositeFeature, referencing);
}
public Set<? extends VariabilityElement> collectVariabilityRelatives(VariabilityElement element) {
Set<VariabilityElement> results = new HashSet<VariabilityElement>();
collectVariabilityRelatives(element, results);
return results;
}
private void collectVariabilityRelatives(VariabilityElement element,
Set<VariabilityElement> results) {
if (element == null || results.contains(element)) {
return;
}
results.add(element);
VariabilityElement base = element.getVariabilityBasedOnElement();
if (base != null) {
collectVariabilityRelatives(base, results);
}
for (VariabilityElement v : (List<VariabilityElement>) AssociationHelper
.getImmediateVarieties(element)) {
collectVariabilityRelatives(v, results);
}
}
public IRealizationManager getRealizationManager(MethodConfiguration config) {
ILibraryEditUtilProvider p = getProvider();
return p == null ? null : p.getRealizationManager(config);
}
public void removeAutoSynReferences(Process proc) {
Set<Descriptor> desSet = LibraryEditUtil.getInstance().collectDescriptors(proc);
for (Descriptor des : desSet) {
removeAutoSynReferences(des);
}
}
private void removeAutoSynReferences(Descriptor des) {
if (autoSynReferences == null) {
autoSynReferences = new HashSet<EReference>();
autoSynReferences.add(up.getTaskDescriptor_PerformedPrimarilyByExcluded());
autoSynReferences.add(up.getTaskDescriptor_AdditionallyPerformedByExclude());
autoSynReferences.add(up.getTaskDescriptor_MandatoryInputExclude());
autoSynReferences.add(up.getTaskDescriptor_OptionalInputExclude());
autoSynReferences.add(up.getTaskDescriptor_OutputExclude());
autoSynReferences.add(up.getRoleDescriptor_ResponsibleForExclude());
autoSynReferences.add(up.getWorkProductDescriptor_DeliverablePartsExclude());
autoSynReferences.add(up.getDescriptor_GuidanceExclude());
}
boolean oldDeliver = des.eDeliver();
try {
des.eSetDeliver(false);
for (EReference ref : des.eClass().getEAllReferences()) {
if(autoSynReferences.contains(ref)) {
List list = (List) des.eGet(ref);
if (list != null && !list.isEmpty()) {
list.clear();
}
}
}
DescriptorPropUtil.getDesciptorPropUtil().clearAllAutoSynProps(des);
} finally {
des.eSetDeliver(oldDeliver);
}
}
public MethodElement getCalcualtedElement(MethodElement element, MethodConfiguration config) {
ILibraryEditUtilProvider p = getProvider();
return p == null ? element : p.getCalculatedElement(element, config);
}
public boolean inConfig(MethodElement element, MethodConfiguration config) {
ILibraryEditUtilProvider p = getProvider();
return p == null ? false : p.inConfig(element, config);
}
public static class CollectElementFilter {
public boolean accept(MethodElement element) {
return true;
}
public boolean skipChildren(MethodElement element) {
if (element instanceof MethodLibrary) {
return false;
}
if (element instanceof MethodPlugin) {
return false;
}
if (element instanceof MethodPackage) {
return false;
}
return true;
}
}
public static class CollectElementFilterExtend extends CollectElementFilter {
@Override
public boolean accept(MethodElement element) {
if (element instanceof MethodPlugin) {
return false;
}
if (element instanceof MethodPackage) {
return false;
}
if (element instanceof MethodConfiguration) {
return false;
}
if (element instanceof MethodLibrary) {
return false;
}
return true;
}
}
private void collectElements(MethodElement element,
CollectElementFilter filter, Set<MethodElement> collected,
Set<MethodElement> processed) {
if (processed.contains(element)) {
return;
}
processed.add(element);
if (filter.accept(element)) {
collected.add(element);
}
if (filter.skipChildren(element)) {
return;
}
EList<EReference> refList = element.eClass().getEAllContainments();
if (refList == null || refList.isEmpty()) {
return;
}
for (EReference ref : refList) {
if (ref == UmaPackage.eINSTANCE.getDescribableElement_Presentation()) {
continue;
}
Object obj = element.eGet(ref);
if (obj instanceof MethodElement) {
collectElements((MethodElement) obj, filter, collected,
processed);
} else if (obj instanceof List) {
List list = (List) obj;
for (Object itemObj : list) {
if (itemObj instanceof MethodElement) {
collectElements((MethodElement) itemObj, filter,
collected, processed);
}
}
}
}
}
public Set<? extends MethodElement> getFilteredElements(
MethodConfiguration config, CollectElementFilter filter) {
Set<MethodElement> set = new HashSet<MethodElement>();
for (MethodPlugin plugin : config.getMethodPluginSelection()) {
set.addAll(getElementsUnder(plugin, filter));
}
return set;
}
public Set<? extends MethodElement> getElementsUnder(MethodElement topElement, CollectElementFilter filter) {
Set<MethodElement> set = new HashSet<MethodElement>();
collectElements(topElement, filter, set, new HashSet<MethodElement>());
return set;
}
public Set<WorkProduct> getAllWorkProducts(MethodElement topElement) {
CollectElementFilter filter = new CollectElementFilter() {
public boolean accept(MethodElement element) {
return element instanceof WorkProduct;
}
public boolean skipChildren(MethodElement element) {
if (element instanceof ProcessPackage) {
return true;
}
return super.skipChildren(element);
}
};
return (Set<WorkProduct> ) getElementsUnder(topElement, filter);
}
public Set<Practice> getAllPractices(MethodElement topElement) {
CollectElementFilter filter = new CollectElementFilter() {
public boolean accept(MethodElement element) {
return element instanceof Practice;
}
public boolean skipChildren(MethodElement element) {
if (element instanceof ProcessPackage) {
return true;
}
return super.skipChildren(element);
}
};
return (Set<Practice> ) getElementsUnder(topElement, filter);
}
public Set<? extends DescribableElement> getTypedElements(MethodElement topElement, final EClass type) {
final boolean processElementType = UmaPackage.eINSTANCE.getProcessElement().isSuperTypeOf(type);
CollectElementFilter filter = new CollectElementFilter() {
public boolean accept(MethodElement element) {
return type.isSuperTypeOf(element.eClass());
}
public boolean skipChildren(MethodElement element) {
if (element instanceof ProcessPackage) {
return processElementType ? false : true;
} else if (element instanceof ContentPackage) {
if (processElementType) {
if (element.getName().equals(ModelStructure.CONTENT_PACKAGE_NAME) ||
element.eContainer() instanceof MethodPlugin) {
return false;
}
return true;
}
return false;
}
return super.skipChildren(element);
}
};
return (Set<? extends DescribableElement>) getElementsUnder(topElement, filter);
}
//<key: meta, value: set of udt of same meta for update>
//Also place those invlid id UDTs under UserDefinedTypeMeta.noneValue entry
public Map<UserDefinedTypeMeta, Set<Practice>> getUdtInstanceMap(MethodLibrary lib, Collection<UserDefinedTypeMeta> metas) {
Map<UserDefinedTypeMeta, Set<Practice>> map = new HashMap<UserDefinedTypeMeta, Set<Practice>>();
if (lib == null || metas == null || metas.isEmpty()) {
return map;
}
Map<String, UserDefinedTypeMeta> idMetaMap = new HashMap<String, UserDefinedTypeMeta>();
for (UserDefinedTypeMeta meta : metas) {
idMetaMap.put(meta.getId(), meta);
}
Set<Practice> practices = new HashSet<Practice>();
for (MethodPlugin plugin : lib.getMethodPlugins()) {
practices.addAll(getAllPractices(plugin));
}
PracticePropUtil propUtil = PracticePropUtil.getPracticePropUtil();
for (Practice practice : practices) {
UserDefinedTypeMeta oldMeta = propUtil.getUdtMeta(practice);
if (oldMeta != null) {
UserDefinedTypeMeta meta = idMetaMap.get(oldMeta.getId());
if (meta != null && ! meta.same(oldMeta)) {
addToMap(map, practice, meta);
} else if (meta == null) {
meta = UserDefinedTypeMeta.noneValue;
addToMap(map, practice, meta);
}
}
}
return map;
}
private void addToMap(Map<UserDefinedTypeMeta, Set<Practice>> map,
Practice practice, UserDefinedTypeMeta meta) {
Set<Practice> set = map.get(meta);
if (set == null) {
set = new HashSet<Practice>();
map.put(meta, set);
}
set.add(practice);
}
public static boolean save(Collection<Resource> resouresToSave) {
ILibraryPersister.FailSafeMethodLibraryPersister persister = Services.getDefaultLibraryPersister().getFailSafePersister();
try {
HashSet<Resource> seens = new HashSet<Resource>();
for (Iterator<Resource> it = resouresToSave.iterator(); it.hasNext();) {
Resource res = it.next();
if (! seens.contains(res)) {
persister.save(res);
seens.add(res);
}
}
persister.commit();
} catch (Exception e) {
persister.rollback();
return false;
} finally {
}
return true;
}
public void fixUpDanglingCustomCategories(MethodLibrary library) {
if (library == null) {
return;
}
for (MethodPlugin plugin : library.getMethodPlugins()) {
fixUpDanglingCustomCategories(plugin);
}
}
public void fixUpDanglingCustomCategories(MethodPlugin plugin) {
ContentPackage customCategoryPkg = UmaUtil.findContentPackage(
plugin, ModelStructure.DEFAULT.customCategoryPath);
if (customCategoryPkg == null) {
return;
}
CustomCategory rootCC = TngUtil.getRootCustomCategory(plugin);
if(rootCC == null) {
return;
}
Set<CustomCategory> ccSet = new HashSet<CustomCategory>();
addToCCSet(rootCC.getCategorizedElements(), ccSet);
for (ContentElement element : customCategoryPkg
.getContentElements()) {
if (element instanceof CustomCategory) {
addToCCSet(((CustomCategory) element)
.getCategorizedElements(), ccSet);
}
}
for (ContentElement element : customCategoryPkg
.getContentElements()) {
if (element instanceof CustomCategory
&& !ccSet.contains(element)) {
rootCC.getCategorizedElements().add(element);
}
}
}
private void addToCCSet(List<DescribableElement> list,
Set<CustomCategory> ccSet) {
for (DescribableElement element : list) {
if (element instanceof CustomCategory) {
ccSet.add((CustomCategory) element);
}
}
}
public boolean isContainedBy(MethodElement element,
MethodElement container, MethodConfiguration config) {
if (element == null || container == null) {
return false;
}
if (UmaUtil.isContainedBy(element, container)) {
return true;
}
if (config == null) {
return false;
}
EObject parent = element.eContainer();
while (parent instanceof VariabilityElement) {
MethodElement parentElement = getCalcualtedElement(
(VariabilityElement) parent, config);
if (parentElement == container) {
return true;
}
parent = parentElement == null ? null : parentElement.eContainer();
}
return parent == container;
}
public List<MethodElement> calc0nFeatureValue(MethodElement element,
EStructuralFeature feature, MethodConfiguration config) {
return getProvider() == null ? null : getProvider().calc0nFeatureValue(element, feature, config);
}
public List<MethodElement> calc0nFeatureValue(MethodElement element,
OppositeFeature feature, MethodConfiguration config) {
return getProvider() == null ? null : getProvider().calc0nFeatureValue(element, feature, config);
}
public void fixWpStates(Collection<? extends MethodElement> elements, Set<Resource> modifeiedResources) {
try {
fixWpStates_(elements, modifeiedResources);
} catch (Throwable e) {
LibraryEditPlugin.getDefault().getLogger().logError(e);
}
}
private void fixWpStates_(Collection<? extends Object> elements, Set<Resource> modifeiedResources) {
WorkProductPropUtil wpPropUtil = WorkProductPropUtil.getWorkProductPropUtil();
for (Object element : elements) {
if (! (element instanceof WorkProduct)) {
continue;
}
WorkProduct wp = (WorkProduct) element;
wpPropUtil.fixWorkProductStates(wp, modifeiedResources);
}
for (Object element : elements) {
if (! (element instanceof TaskDescriptor || element instanceof Milestone)) {
continue;
}
WorkBreakdownElement wbe = (WorkBreakdownElement) element;
// ConstraintManager.fixWpStates(wbe)
}
}
public void fixProcssWpStates(Collection<? extends MethodElement> elements, Set<Resource> modifeiedResources) {
try {
fixProcessWpStates_(elements, modifeiedResources);
} catch (Throwable e) {
LibraryEditPlugin.getDefault().getLogger().logError(e);
}
}
private void fixProcessWpStates_(Collection<? extends Object> elements, Set<Resource> modifeiedResources) {
WorkProductPropUtil wpPropUtil = WorkProductPropUtil.getWorkProductPropUtil();
for (Object element : elements) {
wpPropUtil.fixProcessWpStates(element, modifeiedResources);
}
}
public void createUserDefinedTypeContextMenuOnGuidanceNode(Collection<Object> newChildDescriptors) {
getProvider().createUserDefinedTypeContextMenuOnGuidanceNode(newChildDescriptors);
}
public Collection<UserDefinedTypeMeta> getUserDefinedTypes() {
return getProvider() == null ? null : getProvider().getUserDefinedTypes();
}
public UserDefinedTypeMeta getUserDefineType(String id) {
return getProvider() == null ? null : getProvider().getUserDefineType(id);
}
public ModifiedTypeMeta getModifiedType(String id) {
return getProvider() == null ? null : getProvider().getModifiedType(id);
}
public Collection<ModifiedTypeMeta> getModifiedTypes() {
return getProvider() == null ? null : getProvider().getModifiedTypes();
}
public MethodPackage getCoreContentPackage(MethodPlugin plugin) {
String[] path = new String[] { ModelStructure.CONTENT_PACKAGE_NAME,
ModelStructure.CORE_CONTENT_PACAKGE_NAME };
MethodPackage pkg = UmaUtil.findMethodPackage(plugin, path);
return pkg;
}
public List<CustomCategory> getRootLevelCustomCategories(MethodPlugin plugin) {
List list = new ArrayList<CustomCategory>();
CustomCategory topRoot = TngUtil.getRootCustomCategory(plugin);
if (topRoot != null) {
for (DescribableElement element : topRoot.getCategorizedElements()) {
if (element instanceof CustomCategory) {
list.add((CustomCategory) element);
}
}
}
return list;
}
public String getXmiString(EObject obj) {
if (obj == null) {
return ""; //$NON-NLS-1$
}
Map options = new HashMap();
options.put(XMLResource.OPTION_ENCODING, "ASCII"); //$NON-NLS-1$
StringResource res = new StringResource(null);
res.getContents().add(EcoreUtil.copy(obj));
try {
res.save(options);
} catch (Exception e) {
LibraryEditPlugin.getDefault().getLogger().logError(e);
}
return res.getString();
}
public EObject loadObject(String xmiString) {
if (xmiString == null || xmiString.length() == 0) {
return null;
}
Map options = new HashMap();
options.put(XMLResource.OPTION_ENCODING, "ASCII"); //$NON-NLS-1$
StringResource res = new StringResource(xmiString);
try {
res.load(options);
return res.getContents().get(0);
} catch (Exception e) {
LibraryEditPlugin.getDefault().getLogger().logError(e);
}
return null;
}
}