| //------------------------------------------------------------------------------ |
| // 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.uma.util; |
| |
| import java.lang.reflect.Field; |
| import java.lang.reflect.Modifier; |
| 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.BasicEList; |
| import org.eclipse.emf.common.util.UniqueEList; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.epf.uma.Activity; |
| import org.eclipse.epf.uma.BreakdownElement; |
| import org.eclipse.epf.uma.CapabilityPattern; |
| import org.eclipse.epf.uma.Checklist; |
| import org.eclipse.epf.uma.Concept; |
| import org.eclipse.epf.uma.ContentElement; |
| import org.eclipse.epf.uma.CustomCategory; |
| import org.eclipse.epf.uma.DescribableElement; |
| import org.eclipse.epf.uma.Discipline; |
| import org.eclipse.epf.uma.Example; |
| import org.eclipse.epf.uma.FulfillableElement; |
| import org.eclipse.epf.uma.Guideline; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.epf.uma.MethodElement; |
| import org.eclipse.epf.uma.MethodPackage; |
| import org.eclipse.epf.uma.MethodPlugin; |
| import org.eclipse.epf.uma.Report; |
| import org.eclipse.epf.uma.ReusableAsset; |
| import org.eclipse.epf.uma.Roadmap; |
| import org.eclipse.epf.uma.Role; |
| import org.eclipse.epf.uma.RoleDescriptor; |
| import org.eclipse.epf.uma.RoleSet; |
| import org.eclipse.epf.uma.Section; |
| import org.eclipse.epf.uma.SupportingMaterial; |
| import org.eclipse.epf.uma.Task; |
| import org.eclipse.epf.uma.Template; |
| import org.eclipse.epf.uma.Tool; |
| import org.eclipse.epf.uma.ToolMentor; |
| import org.eclipse.epf.uma.UmaPackage; |
| import org.eclipse.epf.uma.VariabilityElement; |
| import org.eclipse.epf.uma.WorkBreakdownElement; |
| import org.eclipse.epf.uma.WorkOrder; |
| 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; |
| |
| /** |
| * A helper class for navigating and querying bidirectional associations among |
| * the model objects. |
| * |
| * @author Phong Nguyen Le |
| * @author Kelvin Low |
| * @since 1.0 |
| */ |
| public final class AssociationHelper { |
| |
| /** |
| * An opposite feature used for retrieving the disciplines which a task is |
| * categorized under. |
| */ |
| public static final OppositeFeature Task_Disciplines = new OppositeFeature( |
| Task.class, |
| "Task_Disciplines", UmaPackage.eINSTANCE.getDiscipline_Tasks(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the task descriptors which are |
| * created from a specific task. |
| */ |
| public static final OppositeFeature Task_TaskDescriptors = new OppositeFeature( |
| Task.class, |
| "Task_TaskDescriptors", UmaPackage.eINSTANCE.getTaskDescriptor_Task(), true, false); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the domains which a work product |
| * is categorized under. |
| */ |
| public static final OppositeFeature WorkProduct_Domains = new OppositeFeature( |
| WorkProduct.class, |
| "WorkProduct_Domains", UmaPackage.eINSTANCE.getDomain_WorkProducts(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the tasks which produce a work |
| * product as an output. |
| */ |
| public static final OppositeFeature WorkProduct_OutputFrom_Tasks = new OppositeFeature( |
| WorkProduct.class, |
| "WorkProduct_OutputFrom_Tasks", UmaPackage.eINSTANCE.getTask_Output(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the tasks which use a work |
| * product as a mandatory input. |
| */ |
| public static final OppositeFeature WorkProduct_MandatoryInputTo_Tasks = new OppositeFeature( |
| WorkProduct.class, |
| "WorkProduct_InputTo_Tasks", UmaPackage.eINSTANCE.getTask_MandatoryInput(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the work product types which a |
| * work product is categorized under. |
| */ |
| public static final OppositeFeature WorkProduct_WorkProductTypes = new OppositeFeature( |
| WorkProduct.class, |
| "WorkProduct_WorkProductTypes", UmaPackage.eINSTANCE.getWorkProductType_WorkProducts(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the responsible roles for a work |
| * product. |
| */ |
| public static final OppositeFeature WorkProduct_ResponsibleRoles = new OppositeFeature( |
| WorkProduct.class, |
| "WorkProduct_ResponsibleRoles", UmaPackage.eINSTANCE.getRole_ResponsibleFor(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the deliverables which a work |
| * product is contained in. |
| */ |
| public static final OppositeFeature WorkProduct_Deliverables = new OppositeFeature( |
| WorkProduct.class, |
| "WorkProduct_Deliverables", UmaPackage.eINSTANCE.getDeliverable_DeliveredWorkProducts(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the tasks that use a work product |
| * as an optional input. |
| */ |
| public static final OppositeFeature WorkProduct_OptionalInputTo_Tasks = new OppositeFeature( |
| WorkProduct.class, |
| "WorkProduct_OptionalInputTo_Tasks", UmaPackage.eINSTANCE.getTask_OptionalInput(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the work product descriptors |
| * which are created from a work product. |
| */ |
| public static final OppositeFeature WorkProduct_WorkProductDescriptors = new OppositeFeature( |
| WorkProduct.class, |
| "WorkProduct_WorkProductDescriptors", UmaPackage.eINSTANCE.getWorkProductDescriptor_WorkProduct(), true, false); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the primary tasks of a role. |
| */ |
| public static final OppositeFeature Role_Primary_Tasks = new OppositeFeature( |
| Role.class, |
| "Role_Primary_Tasks", UmaPackage.eINSTANCE.getTask_PerformedBy(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the secondary tasks of a role. |
| */ |
| public static final OppositeFeature Role_Secondary_Tasks = new OppositeFeature( |
| Role.class, |
| "Role_Secondary_Tasks", UmaPackage.eINSTANCE.getTask_AdditionallyPerformedBy(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the role sets which a role is |
| * categorized under. |
| */ |
| public static final OppositeFeature Role_RoleSets = new OppositeFeature( |
| Role.class, |
| "Role_RoleSets", UmaPackage.eINSTANCE.getRoleSet_Roles(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the composite roles which |
| * includes a role. |
| */ |
| public static final OppositeFeature Role_CompositeRoles = new OppositeFeature( |
| Role.class, |
| "Role_CompositeRoles", UmaPackage.eINSTANCE.getCompositeRole_AggregatedRoles(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the role descriptors which are |
| * created from a role. |
| */ |
| public static final OppositeFeature Role_RoleDescriptors = new OppositeFeature( |
| Role.class, |
| "Role_RoleDescriptors", UmaPackage.eINSTANCE.getRoleDescriptor_Role(), true, false); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the content elements which a |
| * checklist is associated with. |
| */ |
| public static final OppositeFeature Checklist_ContentElements = new OppositeFeature( |
| Checklist.class, |
| "Checklist_ContentElements", UmaPackage.eINSTANCE.getContentElement_Checklists(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the activities which a checklist is |
| * associated with. |
| */ |
| public static final OppositeFeature Checklist_BreakdownElements = new OppositeFeature( |
| Checklist.class, |
| "Checklist_BreakdownElements", UmaPackage.eINSTANCE.getBreakdownElement_Checklists(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the activities which a concept is |
| * associated with. |
| */ |
| public static final OppositeFeature Concept_BreakdownElements = new OppositeFeature( |
| Concept.class, |
| "Concept_BreakdownElements", UmaPackage.eINSTANCE.getBreakdownElement_Concepts(), true, false); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the activities which an example is |
| * associated with. |
| */ |
| public static final OppositeFeature Example_BreakdownElements = new OppositeFeature( |
| Concept.class, |
| "Example_BreakdownElements", UmaPackage.eINSTANCE.getBreakdownElement_Examples(), true, false); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the activities which a ReusableAsset is |
| * associated with. |
| */ |
| public static final OppositeFeature ReusableAsset_BreakdownElements = new OppositeFeature( |
| Concept.class, |
| "ReusableAsset_BreakdownElements", UmaPackage.eINSTANCE.getBreakdownElement_ReusableAssets(), true, false); //$NON-NLS-1$ |
| |
| |
| /** |
| * An opposite feature used for retrieving the content elements which a |
| * concept is associated with. |
| */ |
| public static final OppositeFeature Concept_ContentElements = new OppositeFeature( |
| Concept.class, |
| "Concept_ContentElements", UmaPackage.eINSTANCE.getContentElement_ConceptsAndPapers(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the content elements which an |
| * example is associated with. |
| */ |
| public static final OppositeFeature Example_ContentElements = new OppositeFeature( |
| Example.class, |
| "Example_ContentElements", UmaPackage.eINSTANCE.getContentElement_Examples(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the content elements which a |
| * report is associated with. |
| */ |
| public static final OppositeFeature Report_WorkProducts = new OppositeFeature( |
| Report.class, |
| "Report_WorkProducts", UmaPackage.eINSTANCE.getWorkProduct_Reports(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the tasks which a |
| * EstimationConsiderations is associated with. |
| */ |
| public static final OppositeFeature EstimationConsiderations_Tasks = new OppositeFeature( |
| Report.class, |
| "EstimationConsiderations_Tasks", UmaPackage.eINSTANCE.getTask_EstimationConsiderations(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the work products which a |
| * EstimationConsiderations is associated with. |
| */ |
| public static final OppositeFeature EstimationConsiderations_WorkProducts = new OppositeFeature( |
| Report.class, |
| "EstimationConsiderations_WorkProducts", UmaPackage.eINSTANCE.getWorkProduct_EstimationConsiderations(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the content elements which a |
| * reusable asset is associated with. |
| */ |
| public static final OppositeFeature ReusableAsset_ContentElements = new OppositeFeature( |
| ReusableAsset.class, |
| "ReusableAsset_ContentElements", UmaPackage.eINSTANCE.getContentElement_Assets(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the activities which a roadmap is |
| * associated with. |
| */ |
| public static final OppositeFeature Roadmap_Activites = new OppositeFeature( |
| Roadmap.class, |
| "Roadmap_Activites", UmaPackage.eINSTANCE.getActivity_Roadmaps(), true); //$NON-NLS-1$ |
| |
| |
| /** |
| * An opposite feature used for retrieving the fulfills elements which a workproduct is |
| * associated with. |
| */ |
| public static final OppositeFeature FulFills_FullFillableElements = new OppositeFeature( |
| FulfillableElement.class, |
| "FulFills_FullFillableElements", UmaPackage.eINSTANCE.getFulfillableElement_Fulfills(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the activities which a supporting |
| * material is associated with. |
| */ |
| public static final OppositeFeature SupportingMaterial_BreakdownElements = new OppositeFeature( |
| SupportingMaterial.class, |
| "SupportingMaterial_BreakdownElements", UmaPackage.eINSTANCE.getBreakdownElement_SupportingMaterials(), true, false); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the content elements which a |
| * supporting material is associated with. |
| */ |
| public static final OppositeFeature SupportingMaterial_ContentElements = new OppositeFeature( |
| SupportingMaterial.class, |
| "SupportingMaterial_ContentElements", UmaPackage.eINSTANCE.getContentElement_SupportingMaterials(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the delivery processes which a |
| * communication supporting material is associated with. |
| */ |
| public static final OppositeFeature SupportingMaterial_Communications_DeliveryProcesses = new OppositeFeature( |
| SupportingMaterial.class, |
| "SupportingMaterial_Communications_DeliveryProcesses", UmaPackage.eINSTANCE.getDeliveryProcess_CommunicationsMaterials(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the delivery processes which an |
| * education supporting material is associated with. |
| */ |
| public static final OppositeFeature SupportingMaterial_Education_DeliveryProcesses = new OppositeFeature( |
| SupportingMaterial.class, |
| "SupportingMaterial_Education_DeliveryProcesses", UmaPackage.eINSTANCE.getDeliveryProcess_EducationMaterials(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the method units which a |
| * copyright supporting material is associated with. |
| */ |
| public static final OppositeFeature SupportingMaterial_CopyrightStatement_MethodUnits = new OppositeFeature( |
| SupportingMaterial.class, |
| "SupportingMaterial_CopyrightStatement_MethodPlugins", UmaPackage.eINSTANCE.getMethodUnit_CopyrightStatement(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the content elements which a |
| * guideline is associated with. |
| */ |
| public static final OppositeFeature Guideline_ContentElements = new OppositeFeature( |
| Guideline.class, |
| "Guideline_ContentElements", UmaPackage.eINSTANCE.getContentElement_Guidelines(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the activities which a guideline |
| * is associated with. |
| */ |
| public static final OppositeFeature Guideline_BreakdownElements = new OppositeFeature( |
| Guideline.class, |
| "Guideline_BreakdownElements", UmaPackage.eINSTANCE.getBreakdownElement_Guidelines(), true, false); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the work products which a |
| * template is associated with. |
| */ |
| public static final OppositeFeature Template_WorkProducts = new OppositeFeature( |
| Template.class, |
| "Template_WorkProducts", UmaPackage.eINSTANCE.getWorkProduct_Templates(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the tool which a tool mentor is |
| * categorized under. |
| */ |
| public static final OppositeFeature ToolMentor_Tools = new OppositeFeature( |
| ToolMentor.class, |
| "ToolMentor_Tools", UmaPackage.eINSTANCE.getTool_ToolMentors(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the tasks which a tool mentor is |
| * associated with. |
| */ |
| public static final OppositeFeature ToolMentor_Tasks = new OppositeFeature( |
| ToolMentor.class, |
| "ToolMentor_Tasks", UmaPackage.eINSTANCE.getTask_ToolMentors(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the work products which a tool |
| * mentor is associated with. |
| */ |
| public static final OppositeFeature ToolMentor_WorkProducts = new OppositeFeature( |
| Template.class, |
| "ToolMentor_WorkProducts", UmaPackage.eINSTANCE.getWorkProduct_ToolMentors(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the custom categories which a |
| * describable element is associated with. |
| */ |
| public static final OppositeFeature DescribableElement_CustomCategories = new OppositeFeature( |
| DescribableElement.class, |
| "ContentElement_CustomCategories", UmaPackage.eINSTANCE.getCustomCategory_CategorizedElements(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the practices referenced by a |
| * content element. |
| */ |
| public static final OppositeFeature ContentElement_Practices = new OppositeFeature( |
| ContentElement.class, |
| "ContentElement_Practices", UmaPackage.eINSTANCE.getPractice_ContentReferences(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the method plug-ins referenced by |
| * a method plug-in. |
| */ |
| public static final OppositeFeature MethodPlugin_DirectExtensions = new OppositeFeature( |
| MethodPlugin.class, |
| "MethodPlugin_DirectExtensions", UmaPackage.eINSTANCE.getMethodPlugin_Bases(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the method configurations which |
| * contain a reference to a method plug-in. |
| */ |
| public static final OppositeFeature MethodPlugin_MethodConfigurations = new OppositeFeature( |
| MethodPlugin.class, |
| "MethodPlugin_MethodConfigurations", UmaPackage.eINSTANCE.getMethodConfiguration_MethodPluginSelection(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the method packages |
| * used/referenced by a method package. |
| */ |
| public static final OppositeFeature MethodPackage_UsingPackages = new OppositeFeature( |
| MethodPackage.class, |
| "MethodPackage_UsingPackages", UmaPackage.eINSTANCE.getMethodPackage_ReusedPackages(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the method configurations which |
| * contain a reference to a method package. |
| */ |
| public static final OppositeFeature MethodPackage_MethodConfigurations = new OppositeFeature( |
| MethodPackage.class, |
| "MethodPackage_MethodConfigurations", UmaPackage.eINSTANCE.getMethodConfiguration_MethodPackageSelection(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the method configurations which |
| * contain a reference to a CustomCategory. |
| */ |
| public static final OppositeFeature CustomCategory_MethodConfigurations = new OppositeFeature( |
| CustomCategory.class, |
| "CustomCategory_MethodConfigurations", UmaPackage.eINSTANCE.getMethodConfiguration_ProcessViews(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the discipline groupings which |
| * contain a reference to a discipline. |
| */ |
| public static final OppositeFeature Discipline_DisciplineGroupings = new OppositeFeature( |
| Discipline.class, |
| "Discipline_DisciplineGroupings", UmaPackage.eINSTANCE.getDisciplineGrouping_Disciplines(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the disciplines which |
| * contain a reference to a discipline (ie, a subdiscipline). |
| */ |
| public static final OppositeFeature Subdiscipline_Discipline = new OppositeFeature( |
| Discipline.class, |
| "Subdiscipline_Discipline", UmaPackage.eINSTANCE.getDiscipline_Subdiscipline(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the role set groupings which |
| * contain a reference to a role set. |
| */ |
| public static final OppositeFeature RoleSet_RoleSetGrouppings = new OppositeFeature( |
| RoleSet.class, |
| "RoleSet_RoleSetGrouppings", UmaPackage.eINSTANCE.getRoleSetGrouping_RoleSets(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the successor of a work order. |
| */ |
| public static final OppositeFeature WorkOrder_Successor = new OppositeFeature( |
| WorkOrder.class, |
| "WorkOrder_Successor", UmaPackage.eINSTANCE.getWorkBreakdownElement_LinkToPredecessor(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the successor link of a work |
| * breakdown element. |
| */ |
| public static final OppositeFeature WorkBreakdownElement_LinkToSuccessor = new OppositeFeature( |
| WorkBreakdownElement.class, |
| "WorkBreakdownElement_LinkToSuccessor", UmaPackage.eINSTANCE.getWorkOrder_Pred(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the immediate variaties of a |
| * variability element. |
| */ |
| public static final OppositeFeature VariabilityElement_ImmediateVarieties = new OppositeFeature( |
| VariabilityElement.class, |
| "VariabilityElement_ImmediateVarieties", UmaPackage.eINSTANCE.getVariabilityElement_VariabilityBasedOnElement(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the successors to a section. |
| */ |
| public static final OppositeFeature Section_Successors = new OppositeFeature( |
| Section.class, |
| "Section_Successors", UmaPackage.eINSTANCE.getSection_Predecessor(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the task descriptors which a |
| * section is associated with. |
| */ |
| public static final OppositeFeature Section_TaskDescriptors = new OppositeFeature( |
| Section.class, |
| "Section_TaskDescriptors", UmaPackage.eINSTANCE.getTaskDescriptor_SelectedSteps(), true, false); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the team profiles which includes |
| * a specific role descriptor. |
| */ |
| public static final OppositeFeature RoleDescriptor_TeamProfiles = new OppositeFeature( |
| RoleDescriptor.class, |
| "RoleDescriptor_TeamProfiles", UmaPackage.eINSTANCE.getTeamProfile_TeamRoles(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the primary task descriptors |
| * performed by a role descriptor. |
| */ |
| public static final OppositeFeature RoleDescriptor_PrimaryTaskDescriptors = new OppositeFeature( |
| RoleDescriptor.class, |
| "RoleDescriptor_PrimaryTaskDescriptors", UmaPackage.eINSTANCE.getTaskDescriptor_PerformedPrimarilyBy(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the additional task descriptors |
| * performed by a role descriptor. |
| */ |
| public static final OppositeFeature RoleDescriptor_AdditionalTaskDescriptors = new OppositeFeature( |
| RoleDescriptor.class, |
| "RoleDescriptor_AdditionalTaskDescriptors", UmaPackage.eINSTANCE.getTaskDescriptor_AdditionallyPerformedBy(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the assisting task descriptors |
| * performed by a role descriptor. |
| */ |
| public static final OppositeFeature RoleDescriptor_AssistsIn_TaskDescriptors = new OppositeFeature( |
| RoleDescriptor.class, |
| "RoleDescriptor_AssistsIn_TaskDescriptors", UmaPackage.eINSTANCE.getTaskDescriptor_AssistedBy(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the dependent processes |
| * referenced in a method configuration. |
| */ |
| public static final OppositeFeature MethodConfiguration_DependentProcesses = new OppositeFeature( |
| MethodConfiguration.class, |
| "MethodConfiguration_DependentProcesses", UmaPackage.eINSTANCE.getProcess_DefaultContext(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the valid processes referenced in |
| * a method configuration. |
| */ |
| public static final OppositeFeature MethodConfiguration_ValidContext_Processes = new OppositeFeature( |
| MethodConfiguration.class, |
| "MethodConfiguration_ValidContext_Processes", UmaPackage.eINSTANCE.getProcess_ValidContext(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the task descriptors which |
| * produce a work product descriptor as an output. |
| */ |
| public static final OppositeFeature WorkProductDescriptor_OutputFrom_TaskDescriptors = new OppositeFeature( |
| WorkProductDescriptor.class, |
| "WorkProductDescriptor_OutputFrom_TaskDescriptors", UmaPackage.eINSTANCE.getTaskDescriptor_Output(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the task descriptors which use a |
| * work product descriptor as an optional input. |
| */ |
| public static final OppositeFeature WorkProductDescriptor_OptionalInputTo_TaskDescriptors = new OppositeFeature( |
| WorkProductDescriptor.class, |
| "WorkProductDescriptor_OptionalInputTo_TaskDescriptors", UmaPackage.eINSTANCE.getTaskDescriptor_OptionalInput(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the task descriptors which use a |
| * work product descriptor as an mandatory input. |
| */ |
| public static final OppositeFeature WorkProductDescriptor_MandatoryInputTo_TaskDescriptors = new OppositeFeature( |
| WorkProductDescriptor.class, |
| "WorkProductDescriptor_MandatoryInputTo_TaskDescriptors", //$NON-NLS-1$ |
| UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput(), true); |
| |
| /** |
| * An opposite feature used for retrieving the task descriptors which use a |
| * work product descriptor as an external input. |
| */ |
| public static final OppositeFeature WorkProductDescriptor_ExternalInputTo_TaskDescriptors = new OppositeFeature( |
| WorkProductDescriptor.class, |
| "WorkProductDescriptor_ExternalInputTo_TaskDescriptors", //$NON-NLS-1$ |
| UmaPackage.eINSTANCE.getTaskDescriptor_ExternalInput(), true); |
| |
| /** |
| * An opposite feature used for retrieving the role descriptors which are |
| * responsible for a work product descriptor. |
| */ |
| public static final OppositeFeature WorkProductDescriptor_ResponsibleRoleDescriptors = new OppositeFeature( |
| WorkProductDescriptor.class, |
| "WorkProductDescriptor_ResponsibleRoleDescriptors", //$NON-NLS-1$ |
| UmaPackage.eINSTANCE.getRoleDescriptor_ResponsibleFor(), true); |
| |
| /** |
| * An opposite feature used for retrieving the deliverable descriptors which |
| * contain a specific work product descriptor. |
| */ |
| public static final OppositeFeature WorkProductDescriptor_DeliverableDescriptors = new OppositeFeature( |
| WorkProductDescriptor.class, |
| "WorkProductDescriptor_DeliverableDescriptors", UmaPackage.eINSTANCE.getWorkProductDescriptor_DeliverableParts(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the disciplines which an activity |
| * is associated with. |
| */ |
| public static final OppositeFeature Activity_Disciplines = new OppositeFeature( |
| Activity.class, |
| "Activity_Disciplines", UmaPackage.eINSTANCE.getDiscipline_ReferenceWorkflows(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the practices which an activity |
| * is associated with. |
| */ |
| public static final OppositeFeature Activity_Pratices = new OppositeFeature( |
| Activity.class, |
| "Activity_Pratices", UmaPackage.eINSTANCE.getPractice_ActivityReferences(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the process planning templates |
| * which a process is associated with. |
| */ |
| public static final OppositeFeature Process_ProcessPlanningTemplates = new OppositeFeature( |
| Process.class, |
| "Process_ProcessPlanningTemplates", UmaPackage.eINSTANCE.getProcessPlanningTemplate_BasedOnProcesses(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the procesess which references a |
| * capability pattern. |
| */ |
| public static final OppositeFeature CapabilityPattern_ConsumingProcesses = new OppositeFeature( |
| CapabilityPattern.class, |
| "CapabilityPattern_ConsumingProcesses", UmaPackage.eINSTANCE.getProcess_IncludesPatterns(), true); //$NON-NLS-1$ |
| |
| /** |
| * An opposite feature used for retrieving the breakdown element which is |
| * displayed before a breakdown element. |
| */ |
| public static final OppositeFeature BreakdownElement_PresentedBefore = new OppositeFeature( |
| BreakdownElement.class, |
| "BreakdownElement_PresentedBefore", //$NON-NLS-1$ |
| UmaPackage.eINSTANCE.getBreakdownElement_PresentedAfter(), true, |
| false); |
| |
| /** |
| * An opposite feature used for retrieving the breakdown element which is |
| * displayed after a breakdown element. |
| */ |
| public static final OppositeFeature BreakdownElement_PresentedAfter = new OppositeFeature( |
| BreakdownElement.class, |
| "BreakdownElement_PresentedAfter", //$NON-NLS-1$ |
| UmaPackage.eINSTANCE.getBreakdownElement_PresentedBefore(), true, |
| false); |
| |
| /** |
| * An opposite feature used for retrieving the UMA sematic model bridges |
| * referenced by a method element. |
| */ |
| public static final OppositeFeature MethodElement_UMASematicModelBridges = new OppositeFeature( |
| MethodElement.class, |
| "MethodElement_UMASematicModelBridges", //$NON-NLS-1$ |
| UmaPackage.eINSTANCE.getUMASemanticModelBridge_Element(), true, |
| false); |
| |
| private static ArrayList predefinedOppositeFeatures; |
| |
| static { |
| registerPredefinedOppositeFeatures(); |
| } |
| |
| /** |
| * Registers the predefined opposite features. |
| */ |
| public static final void registerPredefinedOppositeFeatures() { |
| predefinedOppositeFeatures = new ArrayList(); |
| AssociationHelper object = new AssociationHelper(); |
| Field[] fields = object.getClass().getDeclaredFields(); |
| for (int i = 0; i < fields.length; i++) { |
| Field field = fields[i]; |
| int mod = field.getModifiers(); |
| if (Modifier.isPublic(mod) && Modifier.isStatic(mod) |
| && Modifier.isFinal(mod) |
| && field.getType() == OppositeFeature.class) { |
| try { |
| predefinedOppositeFeatures.add(field.get(object)); |
| } catch (IllegalArgumentException e) { |
| e.printStackTrace(); |
| } catch (IllegalAccessException e) { |
| e.printStackTrace(); |
| } |
| } |
| } |
| |
| /* |
| * System.out |
| * .println("AssociationHelper.registerPredefinedOppositeFeatures(): |
| * defined opposite features: " + predefinedOppositeFeatures.size()); |
| * //$NON-NLS-1$ System.out.println(predefinedOppositeFeatures); |
| */ |
| |
| for (Iterator iter = predefinedOppositeFeatures.iterator(); iter |
| .hasNext();) { |
| OppositeFeature feature = (OppositeFeature) iter.next(); |
| OppositeFeature.registerOppositeFeature(feature); |
| } |
| } |
| |
| /** |
| * Gets the predefined opposite features. |
| * |
| * @return the predefined opposite features |
| */ |
| public static Collection getPredefinedOppositeFeatures() { |
| return predefinedOppositeFeatures; |
| } |
| |
| /** |
| * Gets the deliverable descriptors which contain the given work product |
| * descriptor. |
| * |
| * @param wpd |
| * a work descriptor |
| * @return a list of deliverable descriptors |
| */ |
| public static List getDeliverableDescriptors(WorkProductDescriptor wpd) { |
| return (List) ((MultiResourceEObject) wpd) |
| .getOppositeFeatureValue(WorkProductDescriptor_DeliverableDescriptors); |
| } |
| |
| /** |
| * Gets the task descriptors which use a work product descriptor as an |
| * external input. |
| * |
| * @param wpd |
| * a work descriptor |
| * @return a list of task descriptors |
| */ |
| public static List getExternalInputTo(WorkProductDescriptor wpd) { |
| return (List) ((MultiResourceEObject) wpd) |
| .getOppositeFeatureValue(WorkProductDescriptor_ExternalInputTo_TaskDescriptors); |
| } |
| |
| /** |
| * Gets the task descriptors which use a work product descriptor as a |
| * mandatory input. |
| * |
| * @param wpd |
| * a work descriptor |
| * @return a list of task descriptors |
| */ |
| public static List getMandatoryInputTo(WorkProductDescriptor wpd) { |
| return (List) ((MultiResourceEObject) wpd) |
| .getOppositeFeatureValue(WorkProductDescriptor_MandatoryInputTo_TaskDescriptors); |
| } |
| |
| /** |
| * Gets the task descriptors which use a work product descriptor as an |
| * optional input. |
| * |
| * @param wpd |
| * a work descriptor |
| * @return a list of task descriptors |
| */ |
| public static List getOptionalInputTo(WorkProductDescriptor wpd) { |
| return (List) ((MultiResourceEObject) wpd) |
| .getOppositeFeatureValue(WorkProductDescriptor_OptionalInputTo_TaskDescriptors); |
| } |
| |
| /** |
| * Gets the task descriptors which which produce a work product descriptor |
| * as an output. |
| * |
| * @param wpd |
| * a work descriptor |
| * @return a list of task descriptors |
| */ |
| public static List getOutputFrom(WorkProductDescriptor wpd) { |
| return (List) ((MultiResourceEObject) wpd) |
| .getOppositeFeatureValue(WorkProductDescriptor_OutputFrom_TaskDescriptors); |
| } |
| |
| /** |
| * Gets the role descriptors which are responsible for a work product |
| * descriptor. |
| * |
| * @param wpd |
| * a work descriptor |
| * @return a list of role descriptors |
| */ |
| public static List getResponsibleRoleDescriptors(WorkProductDescriptor wpd) { |
| return (List) wpd |
| .getOppositeFeatureValue(WorkProductDescriptor_ResponsibleRoleDescriptors); |
| } |
| |
| /** |
| * Gets the the dependent processes referenced in a method configuration. |
| * |
| * @param e |
| * a method configuration |
| * @return a list of processes |
| */ |
| public static List getDependentProcesses(MethodConfiguration e) { |
| return (List) ((MultiResourceEObject) e) |
| .getOppositeFeatureValue(MethodConfiguration_DependentProcesses); |
| } |
| |
| /** |
| * Gets the team profiles which includes a specific role descriptor. |
| * |
| * @param e |
| * a role descriptor |
| * @return a list of team profiles |
| */ |
| public static List getTeamProfiles(RoleDescriptor e) { |
| return (List) ((MultiResourceEObject) e) |
| .getOppositeFeatureValue(RoleDescriptor_TeamProfiles); |
| } |
| |
| /** |
| * Gets the practices referenced by a content element. |
| * |
| * @param e |
| * a content element |
| * @return a list of practices |
| */ |
| public static List getPractices(ContentElement e) { |
| return (List) ((MultiResourceEObject) e) |
| .getOppositeFeatureValue(ContentElement_Practices); |
| } |
| |
| /** |
| * Gets the tool which a tool mentor is categorized under. |
| * |
| * @param e |
| * a tool mentor |
| * @return a tool |
| */ |
| public static List<? extends ToolMentor> getTools(ToolMentor toolMentor) { |
| return (List<? extends ToolMentor>) ((MultiResourceEObject) toolMentor) |
| .getOppositeFeatureValue(ToolMentor_Tools); |
| } |
| |
| /** |
| * Gets the successors to a section. |
| * |
| * @param e |
| * a section |
| * @return a list of sections that are postioned after the given section |
| */ |
| public static List getSuccessors(Section section) { |
| return (List) ((MultiResourceEObject) section) |
| .getOppositeFeatureValue(Section_Successors); |
| } |
| |
| /** |
| * Gets the immediate variaties of a variability element. |
| * |
| * @param e |
| * a variability element |
| * @return a list of immediate variaties |
| */ |
| public static List getImmediateVarieties(VariabilityElement e) { |
| return (List) ((MultiResourceEObject) e) |
| .getOppositeFeatureValue(VariabilityElement_ImmediateVarieties); |
| } |
| |
| /** |
| * Gets the primary tasks of a role. |
| * |
| * @param role |
| * a role |
| * @return a list of tasks |
| */ |
| public static List getPrimaryTasks(Role role) { |
| return (List) ((MultiResourceEObject) role) |
| .getOppositeFeatureValue(Role_Primary_Tasks); |
| } |
| |
| /** |
| * Gets the secondary tasks of a role. |
| * |
| * @param role |
| * a role |
| * @return a list of tasks |
| */ |
| public static List getSecondaryTasks(Role role) { |
| return (List) ((MultiResourceEObject) role) |
| .getOppositeFeatureValue(Role_Secondary_Tasks); |
| } |
| |
| /** |
| * Gets the successor link of a work breakdown element. |
| * |
| * @param e |
| * a break down element |
| * @return a list of links to work breakdown elements |
| */ |
| public static List getLinkToSuccessor(BreakdownElement e) { |
| return (List) ((MultiResourceEObject) e) |
| .getOppositeFeatureValue(WorkBreakdownElement_LinkToSuccessor); |
| } |
| |
| /** |
| * Gets the successor of a work order. |
| * |
| * @param workOrder |
| * a work order |
| * @return a work breakdown element |
| */ |
| public static WorkBreakdownElement getSuccessor(WorkOrder workOrder) { |
| return (WorkBreakdownElement) ((MultiResourceEObject) workOrder) |
| .getOppositeFeatureValue(WorkOrder_Successor); |
| } |
| |
| /** |
| * Gets the tasks which produce a work product as an output. |
| * |
| * @param wp |
| * a work product |
| * @return a list of tasks |
| */ |
| public static List getOutputtingTasks(WorkProduct wp) { |
| return (List) ((MultiResourceEObject) wp) |
| .getOppositeFeatureValue(WorkProduct_OutputFrom_Tasks); |
| } |
| |
| /** |
| * Gets the tasks which use a work product as a mandatory input. |
| * |
| * @param wp |
| * a work product |
| * @return a list of tasks |
| */ |
| public static List getMandatoryInputToTasks(WorkProduct wp) { |
| return (List) ((MultiResourceEObject) wp) |
| .getOppositeFeatureValue(WorkProduct_MandatoryInputTo_Tasks); |
| } |
| |
| /** |
| * Gets the responsible roles for a work product. |
| * |
| * @param wp |
| * a work product |
| * @return a list of roles |
| */ |
| public static List getResponsibleRoles(WorkProduct wp) { |
| return (List) wp.getOppositeFeatureValue(WorkProduct_ResponsibleRoles); |
| } |
| |
| /** |
| * Gets list of work products for which given work product fulfills. |
| * |
| * @param wp |
| * a work product |
| * @return a list of work products |
| */ |
| public static List getFullFills(WorkProduct wp) { |
| return (List) wp.getOppositeFeatureValue(FulFills_FullFillableElements); |
| } |
| |
| /** |
| * Gets the work products modified by a role. |
| * |
| * @param role |
| * a role |
| * @return a list of work products |
| */ |
| public static List getModifiedWorkProducts(Role role) { |
| List performs = getPrimaryTasks(role); |
| List modifies = new BasicEList(); |
| if (performs != null && performs.size() > 0) { |
| for (Iterator i = performs.iterator(); i.hasNext();) { |
| Task task = (Task) i.next(); |
| |
| // for each task, get output work product; |
| List outputWPs = task.getOutput(); |
| if (outputWPs != null && outputWPs.size() > 0) { |
| for (Iterator it = outputWPs.iterator(); it.hasNext();) { |
| WorkProduct wp = (WorkProduct) it.next(); |
| if (wp != null) { |
| if (!modifies.contains(wp)) { |
| modifies.add(wp); |
| } |
| } |
| } |
| } |
| } |
| } |
| return modifies; |
| |
| } |
| |
| /** |
| * Gets the roles that modify a work product. |
| * |
| * @param wp |
| * a work product |
| * @return a list of roles |
| */ |
| public static List getModifiedBy(WorkProduct wp) { |
| List outputFrom = AssociationHelper.getOutputtingTasks(wp); |
| UniqueEList<Role> modifies = new UniqueEList<Role>(); |
| if (outputFrom != null && outputFrom.size() > 0) { |
| for (Iterator it = outputFrom.iterator(); it.hasNext();) { |
| // for each task get, get primary performer role |
| Task task = (Task) it.next(); |
| modifies.addAll(task.getPerformedBy()); |
| } |
| } |
| return modifies; |
| } |
| |
| /** |
| * Gets the discipline groupings which contain a reference to a discipline. |
| * |
| * @param discipline |
| * a discipline |
| * @return a list of discipline groupings |
| */ |
| public static List getDisciplineGroups(Discipline discipline) { |
| return (List) ((MultiResourceEObject) discipline) |
| .getOppositeFeatureValue(Discipline_DisciplineGroupings); |
| } |
| |
| /** |
| * Gets the discipline which contain a reference to a subdiscipline. |
| * |
| * @param discipline |
| * a discipline |
| * @return a list of discipline groupings |
| */ |
| public static List getDiscipline(Discipline subdiscipline) { |
| return (List) ((MultiResourceEObject) subdiscipline) |
| .getOppositeFeatureValue(Subdiscipline_Discipline); |
| } |
| |
| /** |
| * Gets the domains which a work product is categorized under. |
| * |
| * @param wp |
| * a work product |
| * @return a domain |
| */ |
| public static List getDomains(WorkProduct wp) { |
| return (List) ((MultiResourceEObject) wp) |
| .getOppositeFeatureValue(WorkProduct_Domains); |
| } |
| |
| /** |
| * Gets the role set groupings which contain a reference to a role set. |
| * |
| * @param roleSet |
| * a role set |
| * @return a list of role set groupings |
| */ |
| public static List getRoleSetGroups(RoleSet roleSet) { |
| return (List) ((MultiResourceEObject) roleSet) |
| .getOppositeFeatureValue(RoleSet_RoleSetGrouppings); |
| } |
| |
| /** |
| * Gets the role sets which a role is categorized under. |
| * |
| * @param role |
| * a role |
| * @return a list of role sets |
| */ |
| public static List getRoleSets(Role role) { |
| return (List) ((MultiResourceEObject) role) |
| .getOppositeFeatureValue(Role_RoleSets); |
| } |
| |
| /** |
| * Gets the task descriptors which have been created from a task. |
| * |
| * @param task |
| * a task |
| * @return a list of task descriptors |
| */ |
| public static List getTaskDescriptors(Task task) { |
| return (List) task.getOppositeFeatureValue(Task_TaskDescriptors); |
| } |
| |
| /** |
| * Gets the disciplines which a task is categorized under. |
| * |
| * @param task |
| * a task |
| * @return a list of disciplines |
| */ |
| public static List getDisciplines(Task task) { |
| return (List) task.getOppositeFeatureValue(Task_Disciplines); |
| } |
| |
| /** |
| * Gets the disciplines which an activity is associated with. |
| * |
| * @param activity |
| * an activity |
| * @return a list of disciplines |
| */ |
| public static List getDisciplines(Activity activity) { |
| return (List) activity.getOppositeFeatureValue(Activity_Disciplines); |
| } |
| |
| /** |
| * Gets the primary task descriptors performed by a role descriptor. |
| * |
| * @param roleDesc |
| * a role descriptor |
| * @return a list of task descriptors |
| */ |
| public static List getPrimaryTaskDescriptors(RoleDescriptor roleDesc) { |
| return (List) ((MultiResourceEObject) roleDesc) |
| .getOppositeFeatureValue(RoleDescriptor_PrimaryTaskDescriptors); |
| } |
| |
| /** |
| * Gets the additional task descriptors performed by a role descriptor. |
| * |
| * @param roleDesc |
| * a role descriptor |
| * @return a list of task descriptors |
| */ |
| public static List getAdditionalTaskDescriptors(RoleDescriptor roleDesc) { |
| return (List) ((MultiResourceEObject) roleDesc) |
| .getOppositeFeatureValue(RoleDescriptor_AdditionalTaskDescriptors); |
| } |
| |
| /** |
| * Gets the assisting task descriptors performed by a role descriptor. |
| * |
| * @param roleDesc |
| * a role descriptor |
| * @return a list of task descriptors |
| */ |
| public static List getAssistedTaskDescriptors(RoleDescriptor roleDesc) { |
| return (List) ((MultiResourceEObject) roleDesc) |
| .getOppositeFeatureValue(RoleDescriptor_AssistsIn_TaskDescriptors); |
| } |
| |
| /** |
| * Gets the work product types which a work product is categorized under. |
| * |
| * @param wp |
| * a work product |
| * @return a list of work product types |
| */ |
| public static List getWorkProductTypes(WorkProduct wp) { |
| return (List) ((MultiResourceEObject) wp) |
| .getOppositeFeatureValue(WorkProduct_WorkProductTypes); |
| } |
| |
| /** |
| * Gets the custom categories which a describable element is associated |
| * with. |
| * |
| * @param wp |
| * a describable element |
| * @return a list of custom categories |
| */ |
| public static List getCustomCategories(DescribableElement element) { |
| return (List) ((MultiResourceEObject) element) |
| .getOppositeFeatureValue(DescribableElement_CustomCategories); |
| } |
| |
| /** |
| * Gets the Deliverables which a WorkProduct element is associated with. |
| * |
| * @param wp |
| * a WorkProduct element |
| * @return a list of Deliverables |
| */ |
| public static List getDeliverables(WorkProduct element) { |
| return (List) ((MultiResourceEObject) element) |
| .getOppositeFeatureValue(WorkProduct_Deliverables); |
| } |
| |
| /** |
| * Gets the method plug-ins referenced by a method plug-in. |
| * |
| * @param plugin |
| * a method plug-in |
| * @return a list of method plug-ins |
| */ |
| public static List<MethodPlugin> getPluginDirectExtensions(MethodPlugin plugin) { |
| return (List<MethodPlugin>) ((MultiResourceEObject) plugin) |
| .getOppositeFeatureValue(MethodPlugin_DirectExtensions); |
| } |
| |
| /** |
| * Gets all the references to a method element. |
| * |
| * @param element |
| * a method element |
| * @return a collection of method element references |
| */ |
| public static Collection getReferences(MethodElement element) { |
| Set references = new HashSet(); |
| MultiResourceEObject eObj = (MultiResourceEObject) element; |
| |
| if (eObj.basicGetOppositeFeatureMap() == null) |
| return references; |
| |
| for (Iterator iter = eObj.getOppositeFeatureMap().entrySet().iterator(); iter |
| .hasNext();) { |
| Map.Entry entry = (Map.Entry) iter.next(); |
| OppositeFeature oppositeFeature = ((OppositeFeature) entry.getKey()); |
| oppositeFeature.getTargetFeature(); |
| if (oppositeFeature.isMany()) { |
| references.addAll((Collection) eObj |
| .getOppositeFeatureValue(oppositeFeature)); |
| } else { |
| EObject obj = (EObject) eObj |
| .getOppositeFeatureValue(oppositeFeature); |
| if (obj != null) { |
| references.add(obj); |
| } |
| } |
| } |
| |
| return references; |
| } |
| |
| /** |
| * Gets all the references to a method element. |
| * |
| * @param element |
| * a method element |
| * @return a map containing method element references |
| */ |
| public static Map<EObject, Collection<EStructuralFeature>> getReferenceMap(MethodElement element) { |
| Map<EObject, Collection<EStructuralFeature>> objectToFeaturesMap = new HashMap<EObject, Collection<EStructuralFeature>>(); |
| |
| MultiResourceEObject eObj = (MultiResourceEObject) element; |
| |
| if (eObj.basicGetOppositeFeatureMap() == null) { |
| return objectToFeaturesMap; |
| } |
| |
| for (Iterator iter = eObj.getOppositeFeatureMap().entrySet().iterator(); iter |
| .hasNext();) { |
| Map.Entry entry = (Map.Entry) iter.next(); |
| OppositeFeature oppositeFeature = ((OppositeFeature) entry.getKey()); |
| EStructuralFeature feature = oppositeFeature.getTargetFeature(); |
| if (oppositeFeature.isMany()) { |
| for (Iterator iterator = ((Collection) eObj |
| .getOppositeFeatureValue(oppositeFeature)).iterator(); iterator |
| .hasNext();) { |
| EObject object = (EObject) iterator.next(); |
| Collection<EStructuralFeature> features = objectToFeaturesMap |
| .get(object); |
| if (features == null) { |
| features = new ArrayList<EStructuralFeature>(); |
| objectToFeaturesMap.put(object, features); |
| } |
| features.add(feature); |
| } |
| ; |
| } else { |
| EObject object = (EObject) eObj |
| .getOppositeFeatureValue(oppositeFeature); |
| if (object != null) { |
| Collection<EStructuralFeature> features = objectToFeaturesMap |
| .get(object); |
| if (features == null) { |
| features = new ArrayList<EStructuralFeature>(); |
| objectToFeaturesMap.put(object, features); |
| } |
| features.add(feature); |
| } |
| } |
| } |
| |
| return objectToFeaturesMap; |
| } |
| |
| public static final void init() { |
| } |
| |
| /** |
| * Given a set of elements, returns the set of those elements plus any |
| * variability elements associated with them. |
| * |
| * @param elementSet |
| * a set of method elements for which to retrieve the variability |
| * elements |
| * @param getBases |
| * if <code>true</code>, recurse into the variability base |
| * elements ("up the tree") |
| * @param getChildren |
| * if <code>true</code>, recurse into the varieties ("down the |
| * tree") |
| * @return a collective set of method elements plus the associated |
| * variability elements |
| */ |
| public static Set getVariabilityElements(Set elementSet, boolean getBases, |
| boolean getChildren) { |
| if (elementSet != null && !elementSet.isEmpty()) { |
| Set varSet = new HashSet(); |
| for (Iterator iter = elementSet.iterator(); iter.hasNext();) { |
| Object o = iter.next(); |
| if (o instanceof VariabilityElement) { |
| VariabilityElement element = (VariabilityElement) o; |
| if (getChildren) |
| varSet.addAll(getImmediateVarieties(element)); |
| if (getBases |
| && element.getVariabilityBasedOnElement() != null) |
| varSet.add(element.getVariabilityBasedOnElement()); |
| } |
| } |
| if (varSet.isEmpty()) |
| return elementSet; |
| if (elementSet.containsAll(varSet)) |
| return elementSet; |
| elementSet.addAll(varSet); |
| elementSet.addAll(getVariabilityElements(elementSet, getBases, |
| getChildren)); |
| } |
| return elementSet; |
| } |
| |
| } |